支持可弹出设备

可弹出设备 是可以插入扩展坞并从扩展坞弹出的设备。 通常,必须先禁用可弹出设备的总线电源,然后才能移除设备。

如果设备可弹出,则设备总线的总线驱动程序必须在设备的WDF_DEVICE_PNP_CAPABILITIES结构中设置弹出成员。

当总线驱动程序确定其枚举子设备之一即将弹出时,它会调用 WdfPdoRequestEjectWdfChildListRequestChildEject。 例如,总线驱动程序可能会检测到用户按下了弹出按钮。

当驱动程序调用 WdfChildListRequestChildEjectWdfPdoRequestEject 时,PnP 管理器使用 有序删除 方案通知设备的驱动程序正在删除该设备。 框架在设备总线的总线驱动程序中调用 EvtDeviceReleaseHardware 回调函数后,框架将调用总线驱动程序的 EvtDeviceEject 回调函数,该回调函数执行物理弹出设备所需的任何操作。

如果弹出设备导致其他设备也被弹出,则总线驱动程序可以维护 弹出关系的列表。 当用户删除你的设备时,PnP 管理器会通知列表中的设备的驱动程序,他们的设备也会被删除。 若要维护弹出关系的列表,总线驱动程序可以使用 WdfPdoAddEjectionRelationsPhysicalDeviceWdfPdoRemoveEjectionRelationsPhysicalDeviceWdfPdoClearEjectionRelationsDevices 方法。

如果设备可以在扩展坞中锁定,则总线驱动程序必须在设备的WDF_DEVICE_PNP_CAPABILITIES结构中设置 LockSupported 成员。 总线驱动程序还必须提供 EvtDeviceSetLock 回调函数,该功能可锁定设备以禁用弹出或解锁设备以启用弹出。