Home › Forums › Discussions › General › TDI FILTER driver › Reply To: TDI FILTER driver
Разобрался я немного с отладчиком… Из него я как понял драйвер валится на этом:
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 не понимаю…