Обработка запроса IRP_MN_REMOVE_DEVICE

Диспетчер PnP использует этот IRP для направления драйверов на удаление программного представления устройства (объектов устройства и т. д.). Диспетчер PnP отправляет этот IRP, если устройство было удалено упорядоченным образом (например, инициировано пользователем в программе "Отключить или извлечь оборудование"), неожиданно (пользователь извлекает устройство из слота без предварительного предупреждения) или когда пользователь запрашивает обновление драйверов.

В Windows 2000 и более поздних версиях диспетчер PnP отправляет этот IRP, когда диспетчер устройств отключает устройство. В Windows 98/Me диспетчер PnP отправляет вместо этого остановку IRP. Дополнительные сведения см. в разделе Остановка устройства .

Перед отправкой этого IRP в драйверы устройства диспетчер PnP выполняет следующие действия:

  • Отправляет IRP_MN_REMOVE_DEVICE запросы дочерним элементам устройства, если таковые есть.

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

  • (В системах Windows 2000 и более поздних версий) Если на устройстве подключена файловая система, диспетчер PnP отправляет запрос на удаление в файловую систему и все фильтры файловой системы. В ответ файловая система обычно отключает том.

Верхний драйвер в стеке устройств обрабатывает удаление IRP и передает его следующему нижнему драйверу. Родительский драйвер шины для устройства является последним драйвером, выполняющий операции удаления устройства. Драйвер обрабатывает удаление IRP в своей подпрограмме DispatchPnP .

Прежде чем драйвер возвращает успешное выполнение запроса IRP_MN_REMOVE_DEVICE , он должен убедиться, что все ресурсы для устройства освобождены. Этот IRP может быть последним вызовом перед выгрузки драйвера.

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

В данном разделе рассматриваются следующие вопросы.

Удаление устройства в драйвере функции

Удаление устройства в драйвере фильтра

Удаление устройства в драйвере шины