Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Прежде чем диспетчер PnP отправляет IRP_MN_QUERY_REMOVE_DEVICE IRP драйверам для устройства, он вызывает все подпрограммы обратного вызова уведомлений, зарегистрированные для EventCategoryTargetDeviceChange на устройстве. Диспетчер PnP указывает структуру NotificationStructure.Событие типа GUID_TARGET_DEVICE_QUERY_REMOVE.
В ответ на такое уведомление подпрограмма обратного вызова определяет, можно ли удалить устройство без нарушения системы.
Если устройство не должно быть удалено, подпрограмма обратного вызова возвращает STATUS_UNSUCCESSFUL. В ответ на это состояние диспетчер PnP прерывает обработку запроса и устройство не будет удалено.
Если устройство можно удалить, подпрограмма обратного вызова должна выполнить все необходимые действия для подготовки к этому процессу, например закрыть любые дескрипторы, открытые для устройства (если это возможно). Если дескрипторы остаются открытыми на устройстве, диспетчер PnP не может удалить устройство, и диспетчер PnP прерывает процесс обработки запроса на удаление.
При успешной обработке события GUID_TARGET_DEVICE_QUERY_REMOVE подпрограмма обратного вызова уведомлений должна:
Закройте все открытые дескрипторы на устройстве.
Если у драйвера есть незавершенная ссылка на объект файла, разыменуйте этот объект файла.
Оставаться зарегистрированными для будущих уведомлений EventCategoryTargetDeviceChange . Это важно, так как предстоящая операция удаления может быть отменена.
Закрытие дескриптора устройства не отменяет регистрацию драйвера для уведомления об изменении целевого PnP устройства. Диспетчер PnP по-прежнему может вызывать подпрограмму обратного вызова уведомления драйвера, но в таких вызовах объект файла в NotificationStructure не является допустимым.