Reply To: TDI FILTER driver

Home Forums Discussions General 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?