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 自定义通知