Нужно перехватывать регистрацию TDI_EVENT_RECEIVE event'а и менять указатель на свой...
Ловим:
MajorFunction=IRP_INTERNAL_DEVICE_CONTROL
MinorFunction=TDI_SET_EVENT_HANDLER
Parameters->EventType=TDI_EVENT_RECEIVE
Из DDK я как понял в Parameters->EventHandler будет указатель на callback функцию ClientEventReceive, но как его поменять на свой? может так?:
OldClientEventReceive = ((PTDI_REQUEST_KERNEL_SET_EVENT)&irpStack->Parameters)->EventHandler;
if (OldClientEventReceive)
{
((PTDI_REQUEST_KERNEL_SET_EVENT)&irpStack->Parameters)->EventHandler =
HookedClientEventReceive;
}
А еще тогда в HookedClientEventReceive нужно вызывать оригинал:
return OldClientEventReceive(TdiEventContext,
ConnectionContext,
ReceiveFlags,
BytesIndicated,
BytesAvailable,
BytesTaken,
Tsdu,
IoRequestPacket);
Как тогда все оригинальные адреса callback функций сохранять для разных потоков вызвавших TDI_SET_EVENT_HANDLER чтобы потом их вызывать в HookedClientEventReceive? Или может есть какойнибудь способ передавать этот адрес в саму функцию HookedClientEventReceive?