Общие сведения об уведомлениях PnP
Диспетчер PnP предоставляет механизм для уведомлений драйверов и приложений при возникновении определенных событий на определенном устройстве или в системе в целом. Драйвер может зарегистрироваться для уведомления о следующих категориях событий:
EventCategoryDeviceInterfaceChange
Когда драйвер регистрирует события этой категории в интерфейсе устройства, диспетчер PnP уведомляет драйвер о следующих событиях:
GUID_DEVICE_INTERFACE_ARRIVAL
Указывает, что интерфейс устройства указанного класса включен. Например, пользователь добавил на компьютер новый диск, а диспетчер томов включил новый том (интерфейс устройства класса volume).GUID_DEVICE_INTERFACE_REMOVAL
Указывает, что интерфейс устройства указанного класса отключен.Дополнительные сведения об интерфейсах устройств см. в статье IoRegisterDeviceInterface и связанные процедуры.
EventCategoryTargetDeviceChange
Когда драйвер регистрируется для этой категории событий на устройстве, диспетчер PnP уведомляет драйвер, когда на устройстве происходят следующие события:
GUID_TARGET_DEVICE_QUERY_REMOVE
Указывает, что диспетчер PnP вот-вот удалит драйверы для устройства. Это событие может вызвать несколько действий, в том числе: пользователь запросил удалить указанное устройство с компьютера или пользователь выдал запрос на обновление драйвера для устройства. Это уведомление запрашивает у драйверов устройства утверждение или вето предстоящей операции удаления.GUID_TARGET_DEVICE_REMOVE_COMPLETE
Указывает, что указанное устройство было удалено с компьютера или что пользователь изменяет драйверы для устройства.GUID_TARGET_DEVICE_REMOVE_CANCELLED
Указывает, что надвигающаяся операция удаления на указанном устройстве была отменена.GUID_XXX (пользовательские события)
Указывает, что на указанном устройстве произошло пользовательское событие.Модуль записи драйверов может определить пользовательское событие для устройства. Когда драйвер (или другой связанный компонент) уведомляет диспетчер PnP о том, что произошло пользовательское событие, диспетчер PnP уведомляет все компоненты, зарегистрированные для уведомлений об изменении целевого устройства на устройстве.
В отличие от регистрации для изменений интерфейса устройства, которые можно считать "пассивным" интересом к интерфейсу, регистрация для изменений целевого устройства указывает на "активный" интерес к устройству.
EventCategoryHardwareProfileChange
Эта категория включает следующие события:
GUID_HWPROFILE_QUERY_CHANGE
Указывает, что пользователь запросил изменение профиля оборудования компьютера. Диспетчер PnP использует это уведомление, чтобы запросить у зарегистрированных компонентов, можно ли изменить профиль оборудования без нарушения работы системы. Зарегистрированные компоненты обычно выполняют эти запросы.GUID_HWPROFILE_CHANGE_COMPLETE
Указывает, что профиль оборудования компьютера изменился. Если драйвер поддерживает параметры, относящиеся к конкретному профилю, такой драйвер должен обновить эти параметры после изменения профиля оборудования.GUID_HWPROFILE_CHANGE_CANCELLED
Указывает, что предстоящее изменение профиля оборудования было отменено.
Для компонентов режима ядра уведомление PnP работает следующим образом:
Драйвер регистрируется для уведомления о категории событий, вызывая IoRegisterPlugPlayNotification.
Подпрограмма обратного вызова уведомления PnP остается зарегистрированной до тех пор, пока драйвер явно не удалит регистрацию.
Диспетчер PnP вызывает подпрограмму обратного вызова драйвера при возникновении события в зарегистрированной категории.
Драйвер удаляет регистрацию обратного вызова, вызывая IoUnregisterPlugPlayNotification.
Драйверы не должны создавать синхронное событие или ждать асинхронного события во время обработки закрытия.
Дополнительные сведения об уведомлении PnP см. в следующих разделах:
Рекомендации по написанию процедур обратного вызова уведомлений PnP
Использование уведомления об изменении интерфейса устройства PnP
Использование уведомления об изменении целевого устройства PnP
Использование уведомления об изменении профиля оборудования PnP