Кто-нибудь посылал данные через TDI в DISPATCH_LEVEL?
Проблема в следующем:
Создаю IRP, посылаю TDI_SEND запрос.
Он возвращается с флагом PendingReturned в мою IoCompletionRoutine.
Следуя указаниям DDK, я должен ему сделать MarkIrpPending и вернуть STATUS_MORE_PROCESSING_REQUIRED.
Но мне нужно во-первых освободить MDL, с ним связанный, и, во-вторых, освободить сам IRP.
А как я его поймаю?
В IoCompletionRoutine он уже больше не возвращается...
Здравствуйте, Bevz, Вы писали:
B>День Добрый!
B>Кто-нибудь посылал данные через TDI в DISPATCH_LEVEL? B>Проблема в следующем: B>Создаю IRP, посылаю TDI_SEND запрос. B>Он возвращается с флагом PendingReturned в мою IoCompletionRoutine. B>Следуя указаниям DDK, я должен ему сделать MarkIrpPending и вернуть STATUS_MORE_PROCESSING_REQUIRED. B>Но мне нужно во-первых освободить MDL, с ним связанный, и, во-вторых, освободить сам IRP. B>А как я его поймаю? B>В IoCompletionRoutine он уже больше не возвращается...
--
Как я понимаю, проблема заключается в том, что на уровне DISPATCH_LEVEL нельзя ожидать окончания обработки IRP с ненулевым timeout.
В таком случае можно воспользоваться отдельным специальным потоком или work item, которые будут работать на PASSIVE_LEVEL. Нужно каким-то образом передать ему управление (или запустить), а они уже в свою очередь создадут необходимый IRP, отправят его на обработку, дождутся окончания выполнения IRP и удалят его.