Как реализовать отлложенную обработку 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 при приеме?
Заранее благодарен за любые ответы, советы, ссылки...