TDI FILTER driver

Home Forums Discussions General Discussion TDI FILTER driver

This topic contains 61 replies, has 2 voices, and was last updated by  Dmitry_177 11 years, 11 months ago.

Viewing 15 posts - 31 through 45 (of 62 total)
  • Author
    Posts
  • #6306

    Dmitry_177
    Participant

    Поменяй paged lookaside list на non paged lookaside list и будет тебе счастье.

    А это где менять??? Что-то я не пойму..

    #6307

    Vadim Smirnov
    Moderator

    А это где менять??? Что-то я не пойму..

    🙄

    ExInitializePagedLookasideList –> ExInitializeNPagedLookasideList
    ExAllocateFromPagedLookasideList –> ExAllocateFromNPagedLookasideList

    #6308

    Dmitry_177
    Participant

    Изменил.. Вснравно BSOD.. 🙁

    #6309

    Vadim Smirnov
    Moderator

    Изменил.. Вснравно BSOD..

    Значит этот баг не единственный, еще есть… Отлаживайся…

    #6310

    Dmitry_177
    Participant

    Искал.. и в отладчике тоже.. Все осталось тоже самое.. При вызове оригинальной функции система падает..

    #6311

    Vadim Smirnov
    Moderator

    Искал.. и в отладчике тоже.. Все осталось тоже самое.. При вызове оригинальной функции система падает..

    Ну так и посмотри в каком месте и почему она падает. Проверь адреса на валидность… Никто за тебя твой драйвер писать не будет. Ссылку на исходники TDI FW я давал, там перехват этот реализован, насколько я знаю.

    #6312

    Dmitry_177
    Participant

    Как-то странно.. ничего не понимаю.. Падает он все так же при вызове оригинальной функции.. Проверял адреса функции и контекста так:
    в TDI_SET_EVENT_HANDLER выводил DbgPrint-ом адреса pBlockFromPagedLookasideList->EventHandler и pBlockFromPagedLookasideList->EventContext, а потом в HookedClientEventReceive тоже выводил.. Все правильно, адреса совпадают.. А вот почему падает не понимаю…=((

    #6313

    Vadim Smirnov
    Moderator

    !analyze -v от crash dump?

    #6314

    Dmitry_177
    Participant

    !analyze -v от crash dump?

    А что это? crash dump я примерно представляю что это, снимок оперативной памяти, сохраненный в файл во время сбоя.. А вот !analyze -v что то не пойму что это..

    #6315

    Vadim Smirnov
    Moderator

    А вот !analyze -v что то не пойму что это..

    Команда для автоанализа crash dump в WinDBG.

    #6316

    Dmitry_177
    Participant

    много всего понаписано там.. приведу все что было написано в после 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 это какраз мой драйвер

    #6317

    Vadim Smirnov
    Moderator
    FAULTING_IP:
    tdifilter_testdriver+988
    f8ae6988 cc int 3

    BSOD на необработанном INT3, который ты сам видимо и воткнул…

    #6318

    Dmitry_177
    Participant

    А как 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);
    
    }
    #6319

    Vadim Smirnov
    Moderator

    А как int3 может выдавать BSOD если это отладочная команда???

    Это прерывание обычно используемое отладчиком, но если отладчика нет , то получите необработанное исключение, в ядре это BSOD.

    Насчет остального – разбирайся, чтобы что-то сказать определенное информации маловато.

    #6320

    Dmitry_177
    Participant

    Это прерывание обычно используемое отладчиком, но если отладчика нет , то получите необработанное исключение, в ядре это BSOD.

    Так я же с отладчиком и делал и получал на виртуальной машине BSOD.. Не очень понятно, конечно почему BSOD с int3.

    Насчет остального – разбирайся, чтобы что-то сказать определенное информации маловато.

    А сами переменные я правильнопередаю в оригинальную функцию? Больше всего меня смущают *BytesTaken и *IoRequestPacket… Какой информации не хватает? Я как-то выкладывал тут почти весь код, он так почти не изменился..

    Странно, у меня опять сейчас BSOD, ничего не менял в драйвере, просто попробовал еще раз..

Viewing 15 posts - 31 through 45 (of 62 total)

You must be logged in to reply to this topic.