Home › Forums › Discussions › General › TDI FILTER driver
- This topic has 61 replies, 2 voices, and was last updated 17 years, 4 months ago by Dmitry_177.
-
AuthorPosts
-
July 2, 2007 at 6:52 pm #6306
Поменяй paged lookaside list на non paged lookaside list и будет тебе счастье.
А это где менять??? Что-то я не пойму..
July 2, 2007 at 9:30 pm #6307А это где менять??? Что-то я не пойму..
🙄
ExInitializePagedLookasideList –> ExInitializeNPagedLookasideList
ExAllocateFromPagedLookasideList –> ExAllocateFromNPagedLookasideListJuly 3, 2007 at 5:26 am #6308Изменил.. Вснравно BSOD.. 🙁
July 3, 2007 at 8:33 am #6309Изменил.. Вснравно BSOD..
Значит этот баг не единственный, еще есть… Отлаживайся…
July 3, 2007 at 3:35 pm #6310Искал.. и в отладчике тоже.. Все осталось тоже самое.. При вызове оригинальной функции система падает..
July 3, 2007 at 5:43 pm #6311Искал.. и в отладчике тоже.. Все осталось тоже самое.. При вызове оригинальной функции система падает..
Ну так и посмотри в каком месте и почему она падает. Проверь адреса на валидность… Никто за тебя твой драйвер писать не будет. Ссылку на исходники TDI FW я давал, там перехват этот реализован, насколько я знаю.
July 7, 2007 at 10:38 am #6312Как-то странно.. ничего не понимаю.. Падает он все так же при вызове оригинальной функции.. Проверял адреса функции и контекста так:
в TDI_SET_EVENT_HANDLER выводил DbgPrint-ом адреса pBlockFromPagedLookasideList->EventHandler и pBlockFromPagedLookasideList->EventContext, а потом в HookedClientEventReceive тоже выводил.. Все правильно, адреса совпадают.. А вот почему падает не понимаю…=((July 10, 2007 at 12:58 pm #6313!analyze -v от crash dump?
July 12, 2007 at 6:58 pm #6314!analyze -v от crash dump?
А что это? crash dump я примерно представляю что это, снимок оперативной памяти, сохраненный в файл во время сбоя.. А вот !analyze -v что то не пойму что это..
July 12, 2007 at 9:54 pm #6315А вот !analyze -v что то не пойму что это..
Команда для автоанализа crash dump в WinDBG.
July 13, 2007 at 5:03 pm #6316много всего понаписано там.. приведу все что было написано в после analyze
kd> !analyze -v ******************************************************************************* * * * Bugcheck Analysis * * * ******************************************************************************* KERNEL_MODE_EXCEPTION_NOT_HANDLED_M (1000008e) This is a very common bugcheck. Usually the exception address pinpoints the driver/function that caused the problem. Always note this address as well as the link date of the driver/image that contains this address. Some common problems are exception code 0x80000003. This means a hard coded breakpoint or assertion was hit, but this system was booted /NODEBUG. This is not supposed to happen as developers should never have hardcoded breakpoints in retail code, but ... If this happens, make sure a debugger gets connected, and the system is booted /DEBUG. This will let us see why this breakpoint is happening. Arguments: Arg1: 80000003, The exception code that was not handled Arg2: f8ae6988, The address that the exception occurred at Arg3: f88a3b38, Trap Frame Arg4: 00000000 Debugging Details: ***** Kernel symbols are WRONG. Please fix symbols to do analysis. ***** Kernel symbols are WRONG. Please fix symbols to do analysis. ************************************************************************* *** *** *** *** *** Your debugger is not using the correct symbols *** *** *** *** In order for this command to work properly, your symbol path *** *** must point to .pdb files that have full type information. *** *** *** *** Certain .pdb files (such as the public OS symbols) do not *** *** contain the required information. Contact the group that *** *** provided you with these symbols if you need this command to *** *** work. *** *** *** *** Type referenced: nt!_KPRCB *** *** *** ************************************************************************* ************************************************************************* *** *** *** *** *** Your debugger is not using the correct symbols *** *** *** *** In order for this command to work properly, your symbol path *** *** must point to .pdb files that have full type information. *** *** *** *** Certain .pdb files (such as the public OS symbols) do not *** *** contain the required information. Contact the group that *** *** provided you with these symbols if you need this command to *** *** work. *** *** *** *** Type referenced: nt!KPRCB *** *** *** ************************************************************************* ************************************************************************* *** *** *** *** *** Your debugger is not using the correct symbols *** *** *** *** In order for this command to work properly, your symbol path *** *** must point to .pdb files that have full type information. *** *** *** *** Certain .pdb files (such as the public OS symbols) do not *** *** contain the required information. Contact the group that *** *** provided you with these symbols if you need this command to *** *** work. *** *** *** *** Type referenced: nt!_KPRCB *** *** *** ************************************************************************* ************************************************************************* *** *** *** *** *** Your debugger is not using the correct symbols *** *** *** *** In order for this command to work properly, your symbol path *** *** must point to .pdb files that have full type information. *** *** *** *** Certain .pdb files (such as the public OS symbols) do not *** *** contain the required information. Contact the group that *** *** provided you with these symbols if you need this command to *** *** work. *** *** *** *** Type referenced: nt!KPRCB *** *** *** ************************************************************************* ************************************************************************* *** *** *** *** *** Your debugger is not using the correct symbols *** *** *** *** In order for this command to work properly, your symbol path *** *** must point to .pdb files that have full type information. *** *** *** *** Certain .pdb files (such as the public OS symbols) do not *** *** contain the required information. Contact the group that *** *** provided you with these symbols if you need this command to *** *** work. *** *** *** *** Type referenced: nt!_KPRCB *** *** *** ************************************************************************* FAULTING_MODULE: 804d7000 nt DEBUG_FLR_IMAGE_TIMESTAMP: 4689dbf6 EXCEPTION_CODE: (HRESULT) 0x80000003 (2147483651) - FAULTING_IP: tdifilter_testdriver+988 f8ae6988 cc int 3 TRAP_FRAME: f88a3b38 -- (.trap fffffffff88a3b38) ErrCode = 00000000 eax=f88a3c1c ebx=00000e20 ecx=00000458 edx=f88a3c18 esi=82206160 edi=821a2c08 eip=f8ae6989 esp=f88a3bac ebp=f88a3bbc iopl=0 nv up ei ng nz na pe nc cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000286 tdifilter_testdriver+0x989: f8ae6989 8b4508 mov eax,dword ptr [ebp+8] ss:0010:f88a3bc4=8228b870 Resetting default scope CUSTOMER_CRASH_COUNT: 1 DEFAULT_BUCKET_ID: WRONG_SYMBOLS BUGCHECK_STR: 0x8E LAST_CONTROL_TRANSFER: from aaca362d to f8ae6989 STACK_TEXT: WARNING: Stack unwind information not available. Following frames may be wrong. f88a3bbc aaca362d 8228b870 820a6c00 00000e20 tdifilter_testdriver+0x989 f88a3c20 aaca8e39 820a6c00 00001950 f88a3d40 tcpip+0x862d f88a3ca8 aac9cef5 8180e9d0 2101a8c0 89e66ad9 tcpip+0xde39 f88a3d08 aacbae4d 00000020 8180e9d0 aac9f076 tcpip+0x1ef5 f88a3dbc aac9b922 8180e9d0 8191a222 0000046c tcpip+0x1fe4d f88a3dfc aac9b84d 00000000 818c15d0 8191a200 tcpip+0x922 f88a3e38 f8138f45 8180f138 00000000 f766db40 tcpip+0x84d f88a3e8c f766801d 008c0c08 82096450 00000001 NDIS+0x22f45 f88a3ea0 f76681b4 8208aad0 82096450 00000001 psched+0x801d f88a3ec4 f76685f9 818bb5a8 00000000 8208aad0 psched+0x81b4 f88a3edc f8138d40 818bb5a0 00000001 8193f37c psched+0x85f9 f88a3f2c f7723fe0 008c0c08 f88a3f4c 00000001 NDIS+0x22d40 f88a3f7c f771dc67 8193f004 8193f37c 821c4878 yk51x86+0xdfe0 f88a3fac f771f1ea 6093f004 f88a3fd0 f812ef09 yk51x86+0x7c67 f88a3fb8 f812ef09 8193f004 820efd98 820efffc yk51x86+0x91ea f88a3fd0 80540f7d 8193f088 8193f074 00000000 NDIS+0x18f09 f88a3fd4 8193f088 8193f074 00000000 00000000 nt+0x69f7d f88a3fd8 8193f074 00000000 00000000 fdb469e6 0x8193f088 f88a3fdc 00000000 00000000 fdb469e6 bf74bbbf 0x8193f074 STACK_COMMAND: .bugcheck ; kb FOLLOWUP_IP: tdifilter_testdriver+988 f8ae6988 cc int 3 FOLLOWUP_NAME: MachineOwner MODULE_NAME: tdifilter_testdriver IMAGE_NAME: tdifilter_testdriver.sys SYMBOL_NAME: tdifilter_testdriver+988 BUCKET_ID: WRONG_SYMBOLS Followup: MachineOwner
tdifilter_testdriver.sys это какраз мой драйвер
July 14, 2007 at 5:05 pm #6317FAULTING_IP:
tdifilter_testdriver+988
f8ae6988 cc int 3BSOD на необработанном INT3, который ты сам видимо и воткнул…
July 14, 2007 at 7:33 pm #6318А как int3 может выдавать BSOD если это отладочная команда???
Убрал все int3 и действительно BSOD не возникает, но в WinDBG пишется:
Illegal instruction - code c000001d (!!! second chance !!!) 80e3bcd4 f04a lock dec edx
потом делаю “g”, и опять пишется тоже самое.. а страница на виртуальной машине так и не открывается..
Может это из за того что я как-то неправильно передаю параметры в оригинальную функцию? Делаю я так:
typedef NTSTATUS (*OLDCLIENTEVENTRECEIVE)(IN PVOID, IN CONNECTION_CONTEXT, IN ULONG, IN ULONG, IN ULONG, OUT ULONG, IN PVOID, OUT PIRP); NTSTATUS HookedClientEventReceive(IN PVOID TdiEventContext, IN CONNECTION_CONTEXT ConnectionContext, IN ULONG ReceiveFlags, IN ULONG BytesIndicated, IN ULONG BytesAvailable, OUT ULONG *BytesTaken, IN PVOID Tsdu, OUT PIRP *IoRequestPacket) { PCLIENTEVENTRECEIVECONTEXT pBlockFromPagedLookasideList; OLDCLIENTEVENTRECEIVE OldClientEventReceive; ... pBlockFromPagedLookasideList = TdiEventContext; OldClientEventReceive = pBlockFromPagedLookasideList->EventHandler; ... return OldClientEventReceive(pBlockFromPagedLookasideList->EventContext, ConnectionContext, ReceiveFlags, BytesIndicated, BytesAvailable, *BytesTaken, Tsdu, *IoRequestPacket); }
July 15, 2007 at 8:56 am #6319А как int3 может выдавать BSOD если это отладочная команда???
Это прерывание обычно используемое отладчиком, но если отладчика нет , то получите необработанное исключение, в ядре это BSOD.
Насчет остального – разбирайся, чтобы что-то сказать определенное информации маловато.
July 15, 2007 at 10:22 am #6320Это прерывание обычно используемое отладчиком, но если отладчика нет , то получите необработанное исключение, в ядре это BSOD.
Так я же с отладчиком и делал и получал на виртуальной машине BSOD.. Не очень понятно, конечно почему BSOD с int3.
Насчет остального – разбирайся, чтобы что-то сказать определенное информации маловато.
А сами переменные я правильнопередаю в оригинальную функцию? Больше всего меня смущают *BytesTaken и *IoRequestPacket… Какой информации не хватает? Я как-то выкладывал тут почти весь код, он так почти не изменился..
Странно, у меня опять сейчас BSOD, ничего не менял в драйвере, просто попробовал еще раз..
-
AuthorPosts
- You must be logged in to reply to this topic.