Забавный баг существует на Windows XP, в нотификаторе на создание потока нельзя получить объект потока по приходящему в него tid'у.
А все потому, что:
NTSTATUS PspCreateThread(...)
{
...
ExGetCallBackBlockRoutine - вызов колбека на XP
...
ObInsertObject - а добавление объекта в таблицу хендлов идет уже после
...
}
На Windows Vista баг пофикшен:
NTSTATUS PspInsertThread(...)
{
...
call ObInsertObject - сначала объект добавляется в таблицу хендлов
...
mov [ebp+arg_14], offset _PspCreateProcessNotifyRoutine
push [ebp+arg_14]
call _ExReferenceCallBackBlock
...
call dword ptr [edi+4] - а уже потом идет вызов колбека
...
call _ExDereferenceCallBackBlock
...
}
А все потому, что:
NTSTATUS PspCreateThread(...)
{
...
ExGetCallBackBlockRoutine - вызов колбека на XP
...
ObInsertObject - а добавление объекта в таблицу хендлов идет уже после
...
}
На Windows Vista баг пофикшен:
NTSTATUS PspInsertThread(...)
{
...
call ObInsertObject - сначала объект добавляется в таблицу хендлов
...
mov [ebp+arg_14], offset _PspCreateProcessNotifyRoutine
push [ebp+arg_14]
call _ExReferenceCallBackBlock
...
call dword ptr [edi+4] - а уже потом идет вызов колбека
...
call _ExDereferenceCallBackBlock
...
}
Комментариев нет:
Отправить комментарий