TDI filter - RECEIVE
От: onyx2 Украина  
Дата: 21.05.05 10:09
Оценка:
Как реализовать отлложенную обработку IRP пакетов при приеме данных?

Я перехватываю callback ClientEventReceive, в нем проверяю данные, а затем вызываю оригинальный обработчик
ClientEventReceive, адрес которого сохранил при перехвате.

//вырезка из кода
//===============================================================
NTSTATUS MyClientEventReceive(PVOID TdiEventContext,
    CONNECTION_CONTEXT  ConnectionContext,
    ULONG  ReceiveFlags, ULONG BytesIndicated,
    ULONG  BytesAvailable, ULONG  *BytesTaken,
    PVOID  Tsdu, PIRP* IoRequestPacket)
{

    .
    .
    .

    OriginalClientEventReceive(TdiEventContext, ConnectionContext,ReceiveFlags, BytesIndicated,
        BytesAvailable, BytesTaken, Tsdu, IoRequestPacket);

    .
    .
    .
}


Мне нужно приостановить на некоторое время прием данных.
Ожидать мы не можем т.к. данный callback вызывается на DISPATH_LEVEL.

Мне советовали сделать так: сохранить где-нибудь Tsdu, в BytesTaken записать 0 и вернуть STATUS_DATA_NOT_ACCEPTED.
Когда же мне понадобится возобновить обработку приема — надо сформировать IRP пакет TDI_RECEIVE и вызвать IoCallDriver.

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

Как организовать отложенную обработку IRP при приеме?

Заранее благодарен за любые ответы, советы, ссылки...
www.cubik.biz
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.