ClientEventReceive

Тема в разделе "WASM.NETWORKS", создана пользователем GLEB, 2 авг 2009.

  1. GLEB

    GLEB New Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2007
    Сообщения:
    83
    Как правильно прервать выполнение ClientEventReceive?

    Делаю перехват

    Код (Text):
    1. NTSTATUS  NewClientEventReceive(IN PVOID  EventContext,
    2.          IN CONNECTION_CONTEXT ConnectionContext,
    3.          IN ULONG              Flags,
    4.          IN ULONG              BytesIndicated,
    5.          IN ULONG              BytesAvailable,
    6.          OUT ULONG             *BytesTaken,
    7.          IN PVOID              Tsdu,
    8.          OUT PIRP              *IoRequestPacket
    9.        )
    10. {
    11.             NTSTATUS  status;
    12.  
    13.             DbgPrint("----------NewClientEventReceive-------------");
    14.  
    15.             // вот тут нужно прервать прием данных
    16.  
    17.            status = OldClientEventReceive(EventContext, ConnectionContext, Flags, BytesIndicated, BytesAvailable, BytesTaken, Tsdu, IoRequestPacket);
    18.            return status;
    19. }
     
  2. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    а просто не вызвать OldClientEventReceive и вернуть status error?
     
  3. GLEB

    GLEB New Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2007
    Сообщения:
    83
    BSOD
    tcpip.sys DRIVER_IRQL_NOT_LESS_OR_EQUAL 0x000000D1
     
  4. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    А вызвать при этом завершение обработки или обо всем этом надо писать. Посмотри что делает OldClientEventReceive (как завершает обработку) и сделай так же
     
  5. GLEB

    GLEB New Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2007
    Сообщения:
    83
    Ну вот как раз это наверно и нужно, только вот как это сделать
     
  6. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    т.е. вы нашли ClientEventReceive, но проанализировать ее не в силах?
     
  7. GLEB

    GLEB New Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2007
    Сообщения:
    83
    угу ))

    в ассемблере я не силен, а в кодах NT4 я нашел только пустые функции ClientEventReceive, ClientEventChainedReceive, ...

    ну и нашел грязный способ остановки приема, установив BytesTaken в 0 )

    Я вообще не пойму как этот механизм работает, зачем например TDI_SET_EVENT_HANDLER вызывается постоянно? ведь callback всегда один и тот же

    смотрел код tdifw там тоже в TDI_SET_EVENT_HANDLER запоминается старый обработчик и ставится новый, а при вызове также вызывается старый, где там фильтрация я не увидел.