BSOD в win32k, Помогите разобраться!
От: crash override  
Дата: 09.11.06 08:58
Оценка:
Доброе время суток!

Я пишу HIPS, у меня возникла проблема: непредсказуемые BSODы при перехвате вызова
win32k!NtUserSetWindowsHookEx
например такой:

IRQL_NOT_LESS_OR_EQUAL (a)
...
Arguments:
Arg1: fac16000, memory referenced
Arg2: 0000001d, IRQL
Arg3: 00000000, value 0 = read operation, 1 = write operation
Arg4: 804ef4bd, address which referenced memory


Debugging Details:
------------------


READ_ADDRESS:  fac16000 

CURRENT_IRQL:  1d

FAULTING_IP: 
nt!IopWriteTriageDump+297
804ef4bd f3a5             rep     movsd

DEFAULT_BUCKET_ID:  DRIVER_FAULT

BUGCHECK_STR:  0xA

LAST_CONTROL_TRANSFER:  from 804f428c to 8051d4b0

STACK_TEXT:  
fadca020 804f428c 00000003 fadca350 fac16000 nt!RtlpBreakWithStatusInstruction
fadca06c 804f4d11 00000003 fac16000 804ef4bd nt!KiBugCheckDebugBreak+0x19
fadca438 804f52af 0000000a fac16000 0000001d nt!KeBugCheck2+0x46d
fadca458 805331a1 0000000a fac16000 0000001d nt!KeBugCheckEx+0x19
fadca458 804ef4bd 0000000a fac16000 0000001d nt!KiTrap0E+0x2b5
fadca4f8 804ef8d5 00000dff f9458ecc fadca5d4 nt!IopWriteTriageDump+0x297
fadca5cc 804f5256 81206af8 00000000 00001000 nt!IoWriteCrashDump+0x380
fadca9b4 804f52af 0000000a fac1affc 000000ff nt!KeBugCheck2+0x9b2
fadca9d4 805331a1 0000000a fac1affc 000000ff nt!KeBugCheckEx+0x19
fadca9d4 8053451f 0000000a fac1affc 000000ff nt!KiTrap0E+0x2b5
fadcaa68 805343bb fadcaac4 8128c350 ffdff120 nt!SwapContext+0x6f
fadcaa7c 804fd59e 00000000 8128c350 811aac28 nt!KiSwapContext+0x2f
fadcaa8c 804f6044 804fa428 00000001 bf993bf8 nt!KiSwapThread+0x6a
fadcaac4 bf879a96 00000007 8128c298 00000001 nt!KeWaitForMultipleObjects+0x282
fadcad34 bf80ba70 fadba4e4 00000002 fadcad64 win32k!RawInputThread+0x454
fadcad44 bf874990 fadba4e4 fadcad64 006dfff4 win32k!xxxCreateSystemThreads+0x5e
fadcad54 805303c4 00000000 00000022 00000000 win32k!NtUserCallOneParam+0x20
fadcad54 7ffe0304 00000000 00000022 00000000 nt!KiSystemService+0xc9
006dffe0 75b64f9e 75b6c264 00000000 00000022 SharedUserData!SystemCallStub+0x4
006dffe0 00000000 75b6c264 00000000 00000022 winsrv!ConsoleWindowProc+0x1647


STACK_COMMAND:  kb

FOLLOWUP_IP: 
win32k!RawInputThread+454
bf879a96 392d349b99bf     cmp     [win32k!gdwUpdateKeyboard (bf999b34)],ebp

FAULTING_SOURCE_CODE:  


SYMBOL_STACK_INDEX:  e

FOLLOWUP_NAME:  MachineOwner

SYMBOL_NAME:  win32k!RawInputThread+454

MODULE_NAME:  win32k

IMAGE_NAME:  win32k.sys

DEBUG_FLR_IMAGE_TIMESTAMP:  3d6de5e5

FAILURE_BUCKET_ID:  0xA_win32k!RawInputThread+454

BUCKET_ID:  0xA_win32k!RawInputThread+454

Followup: MachineOwner
---------


Причем сбой всегда возникает при следующем вызове после того, как в предыдущем вызове в перехватчик вернул 0 без выполнения оригинального вызова (т.е. запрет внедрения DLL в чужой процесс).
В анализе сбоя всегда присутствует RawInputThread.
IRQL иногда равен IPI_LEVEL (как приведено выше), иногда — 000000ff (т.е. вообще запредельный)
Видимо как-то глючит переключение потоков.

Ищу хоть какую-нибудь зацепку, буду признателен за любую помощь
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.