Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Запрос IRP_MN_CANCEL_STOP_DEVICE должен обрабатываться сначала драйвером родительской шины для устройства, а затем каждым следующим драйвером в стеке устройств. Драйвер обрабатывает остановку запросов IRP в подпрограмме DispatchPnP.
В ответ на запрос IRP_MN_CANCEL_STOP_DEVICE драйвер должен вернуть устройство в состояние запуска и возобновить нормальную работу. Драйверы должны завершиться отменой IRP.
Драйвер обрабатывает запрос IRP_MN_CANCEL_STOP_DEVICE с помощью процедуры, например следующей:
Отложить перезапуск устройства до тех пор, пока более низкие драйверы не завершили свои операции перезапуска. (См. раздел "Отложенная обработка IRP PnP", пока не завершится завершение работы с более низкими драйверами.)
После завершения работы с более низкими драйверами верните устройство в состояние запуска.
Точные операции зависят от устройства и драйвера.
Запустите IRP в очереди хранения IRP.
Если драйвер держал запросы, пока устройство находилось в состоянии остановки, снимите флаг HOLD_NEW_REQUESTS и запустите irPs в очереди хранения IRP. Дополнительные сведения см. в статье Удержание входящих IRPs при приостановке устройства.
Выполните IRP с помощью IoCompleteRequest.
В функции или драйвере фильтра:
Подпрограмма IoCompletion драйвера вернула STATUS_MORE_PROCESSING_REQUIRED, как описано в разделе "Отложенная обработка IRP PnP до конца нижних драйверов", поэтому подпрограмма DispatchPnP драйвера должна вызвать IoCompleteRequest , чтобы возобновить обработку ввода-вывода.
Драйвер задает значение Irp-IoStatus.Status> STATUS_SUCCESS, вызывает IoCompleteRequest с приоритетом повышения IO_NO_INCREMENT и возвращает STATUS_SUCCESS из подпрограммы DispatchPnP.
Драйверы не должны провалить эту операцию. Если драйвер не прошел перезапуск IRP, устройство находится в некорректном состоянии и работает неправильно.
В родительском драйвере шины:
Драйвер задает Irp->IoStatus.Status на STATUS_SUCCESS и вызывает IoCompleteRequest, указав приоритет повышения IO_NO_INCREMENT. Драйвер шины возвращает STATUS_SUCCESS из подпрограммы DispatchPnP.
Водитель автобуса не должен провалить эту операцию. Если драйверу не удается пройти перезапуск IRP, устройство находится в несогласованном состоянии и не будет работать должным образом.
Драйвер может получить ложный запрос на отмену остановки, когда устройство запущено и активно. Это может произойти, например, если драйвер (или драйвер выше в стеке устройств) дает сбой при запросе IRP_MN_QUERY_STOP_DEVICE. Когда устройство запущено и активно, драйверы могут безопасно и успешно выполнять запросы на отмену остановки для устройства.