Reply To: TDI FILTER driver

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

#6282

Dmitry_177
Participant

Нужно перехватывать регистрацию 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?