当驱动程序或用户模式组件启用或禁用设备接口实例时,PnP 管理器将调用在设备接口类上为 EventCategoryDeviceInterfaceChange 事件注册的所有通知回调例程。 为了指示通知的原因,PnP 管理器将回调例程的 NotificationStructure 参数的 Event 成员设置为GUID_DEVICE_INTERFACE_ARRIVAL或GUID_DEVICE_INTERFACE_REMOVAL。
处理GUID_DEVICE_INTERFACE_ARRIVAL事件时,通知回调例程应:
执行驱动程序定义的任务来处理新接口。
通常,通知回调例程直接在回调的上下文中打开设备。 但是,如果打开设备可能导致后续 PnP 事件发生 (例如,子设备的枚举) ,则回调例程应改为将辅助角色例程排队以打开设备;否则,可能会出现死锁。
回调例程可能会启用自己的接口,以响应新接口的可用性。
处理GUID_DEVICE_INTERFACE_REMOVAL事件时,通知回调例程应:
- 撤消启用接口时执行的任何操作。 关闭为响应接口到达事件而打开的任何文件句柄。
除了 EventCategoryDeviceInterfaceChange 外,驱动程序还必须注册 EventCategoryTargetDeviceChange,并从 GUID_TARGET_DEVICE_QUERY_REMOVE 事件回调关闭文件句柄。 使文件句柄保持打开状态将否决删除过程,并导致有序删除被取消。