Поделиться через


Общие сведения об уведомлениях 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 работает следующим образом:

  1. Драйвер регистрируется для уведомления о категории событий, вызывая IoRegisterPlugPlayNotification.

    Подпрограмма обратного вызова уведомления PnP остается зарегистрированной до тех пор, пока драйвер явно не удалит регистрацию.

  2. Диспетчер PnP вызывает подпрограмму обратного вызова драйвера при возникновении события в зарегистрированной категории.

  3. Драйвер удаляет регистрацию обратного вызова, вызывая IoUnregisterPlugPlayNotification.

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

Дополнительные сведения об уведомлении PnP см. в следующих разделах:

Рекомендации по написанию процедур обратного вызова уведомлений PnP

Использование уведомления об изменении интерфейса устройства PnP

Использование уведомления об изменении целевого устройства PnP

Использование уведомления об изменении профиля оборудования PnP

Использование настраиваемого уведомления PnP