启用和禁用设备接口实例

成功启动设备后,注册接口的驱动程序调用 IoSetDeviceInterfaceState 来启用接口实例。 驱动程序传递 IoRegisterDeviceInterface 返回的符号链接名称以及布尔值 TRUE 以启用接口实例。

如果驱动程序可以成功启动其设备,则应在处理即插即用 (PnP) 管理器的IRP_MN_START_DEVICE请求时调用此例程。

IRP_MN_START_DEVICE请求完成后,PnP 管理器会向请求这些请求的任何内核模式或用户模式组件发出设备接口到达通知。 有关详细信息,请参阅 注册设备接口更改通知

若要禁用设备接口实例,驱动程序调用 IoSetDeviceInterfaceState,将 IoRegisterDeviceInterface 返回的 SymbolicLinkNameFALSE 作为 Enable 值传递。

驱动程序在处理设备的 IRP_MN_SURPRISE_REMOVALIRP_MN_REMOVE_DEVICE 请求时,应禁用设备的接口。 如果驱动程序在处理这些删除 IRP 时未禁用设备的接口,则它以后不得尝试执行此操作,因为 PnP 管理器会在删除设备时禁用这些接口。

当设备停止 (IRP_MN_STOP_DEVICE ) 时,驱动程序不应禁用接口;相反,它应保持启用任何设备接口并排队 I/O 请求,直到收到另一 个IRP_MN_START_DEVICE 请求。 同样,当设备处于睡眠状态时,驱动程序不应禁用其接口。 它应将 I/O 请求排队,直到设备唤醒。 有关详细信息,请参阅 支持具有Wake-Up功能的设备