Перехват callback функций на примере TDI

Тема в разделе "WASM.BEGINNERS", создана пользователем Dmitry_177, 21 июн 2007.

  1. Dmitry_177

    Dmitry_177 New Member

    Публикаций:
    0
    Регистрация:
    27 мар 2007
    Сообщения:
    75
    Нужно перехватывать регистрацию TDI_EVENT_RECEIVE event'а и менять указатель на свой...

    Ловим:

    MajorFunction=IRP_INTERNAL_DEVICE_CONTROL
    MinorFunction=TDI_SET_EVENT_HANDLER
    Parameters->EventType=TDI_EVENT_RECEIVE

    Из DDK я как понял в Parameters->EventHandler будет указатель на callback функцию ClientEventReceive, но как его поменять на свой? может так?:

    Код (Text):
    1. OldClientEventReceive = ((PTDI_REQUEST_KERNEL_SET_EVENT)&irpStack->Parameters)->EventHandler;
    2. if (OldClientEventReceive)
    3. {
    4.     ((PTDI_REQUEST_KERNEL_SET_EVENT)&irpStack->Parameters)->EventHandler =
    5.  
    6. HookedClientEventReceive;
    7. }
    А еще тогда в HookedClientEventReceive нужно вызывать оригинал:

    Код (Text):
    1. return OldClientEventReceive(TdiEventContext,
    2.                     ConnectionContext,
    3.                     ReceiveFlags,
    4.                     BytesIndicated,
    5.                     BytesAvailable,
    6.                     BytesTaken,
    7.                     Tsdu,
    8.                     IoRequestPacket);
    Как тогда все оригинальные адреса callback функций сохранять для разных потоков вызвавших TDI_SET_EVENT_HANDLER чтобы потом их вызывать в HookedClientEventReceive? Или может есть какойнибудь способ передавать этот адрес в саму функцию HookedClientEventReceive?
     
  2. Dmitry_177

    Dmitry_177 New Member

    Публикаций:
    0
    Регистрация:
    27 мар 2007
    Сообщения:
    75
    неужели никто не знает???