启用和禁用设备接口实例

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

如果驱动程序可以成功启动其设备,则应在处理即插即用 (PnP) manager 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 功能的设备