Reply To: TDI FILTER driver

Home Forums Discussions General TDI FILTER driver Reply To: TDI FILTER driver

#6300
Dmitry_177
Participant

    Разобрался я немного с отладчиком… Из него я как понял драйвер валится на этом:
    return OldClientEventReceive(pBlockFromPagedLookasideList->EventContext,

    ConnectionContext,

    ReceiveFlags,

    BytesIndicated,

    BytesAvailable,

    *BytesTaken,

    Tsdu,

    *IoRequestPacket);`

    из функции HookedClientEventReceive, а она вот так выглядит:

    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)
    
    {
    
    UCHAR	*sduBuffer;
    
    PCLIENTEVENTRECEIVECONTEXT	pBlockFromPagedLookasideList;
    
    OLDCLIENTEVENTRECEIVE		OldClientEventReceive;
    
    _asm  // ýòî ÿ äåëàë äëÿ ïðåðûâàíèÿ, äëÿ îòëàäêè..
    
    {
    
    int    3
    
    }
    
    pBlockFromPagedLookasideList = TdiEventContext;
    
    OldClientEventReceive = pBlockFromPagedLookasideList->EventHandler;
    
    _asm
    
    {
    
    int    3
    
    }
    
    sduBuffer = Tsdu;
    
    DbgPrint("tdi_sniffer TDI_RECEIVE:n");
    
    DbgPrint(sduBuffer);
    
    _asm
    
    {
    
    int    3
    
    }
    
    // âîò òà ýòîì OldClientEventReceive âàëèòñÿ..
    
    return OldClientEventReceive(pBlockFromPagedLookasideList->EventContext,
    
    ConnectionContext,
    
    ReceiveFlags,
    
    BytesIndicated,
    
    BytesAvailable,
    
    *BytesTaken,
    
    Tsdu,
    
    *IoRequestPacket);
    
    }

    Вобщем все прерывания срабатывают.. DbgPrint пишет принятый первый пакет только.. А потом драйвет сваливается.. Я как понял на этой строке, но что в ней не так никак не пойму… По идее я присваиваю OldClientEventReceive оригинальный адрес из EventHandler-а а в pBlockFromPagedLookasideList->EventContext по идее содержится оригинальный контекст.. и почему BSOD не понимаю…