Здравствуйте, A_G_M, Вы писали:
Так давай по порядку!
A_G>У меня такая проблема. Мой драйвер — это посредник, между одним интерфейсом и драйвером другого устройства. Во время работы с ними мне надо извлечь устройство нижележащего драйвера, когда мой драйвер работает, т е выполняет запросы.
Как я понимаю это фильтр-драйвер который включен в стек драйверов на самом верхнем уровне и ты сам формируешь IRP и передаешь его вниз по стеку.
A_G>А так как нижележащий драйвер плаг энд плэй, то он выгружается после извлечения устройства. А мой драйвер продолжает обращаться к драйверу, которого нет. Как сделать так, чтобы избежать обращения в никуда и остановить мой драйвер после извлечения устройства... или не передавать запросы в нижележ драйвер..у меня обращение к нему организовано через эвент, а не через CompletionRoutine.
Использование CompletionRoutine с одной стороны возможно помогло бы тебе получить нотификацию о отсутствии устройства, хотя это не метод. Ну тоесть я хочу сказать, что в CompletionRoutine тебе бы например пришло что IPR canceled.
Но лучше использовать
PnP Notification смотри в DDK там же вроде все описано хорошо. Для поиска используй
IoRegisterPlugPlayNotification функцию.
A_G>Можно ли использовать IoMarkIrpPending и как выйти из этой ситуации?
Для того что бы использовать IoMarkIrpPending нужно установить CompletionRoutine потому что ф-я IoMarkIrpPending всего лишь отмечает данный IPR как PENDING тоесть говорит о том что драйверу нужно потом будет провести обработку данных вызвав CompletionRoutine.
Удачи!
... << RSDN@Home 1.1.3 beta 1 >>