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