总线驱动程序的 Power-Down 和删除序列

下图显示了框架在关闭和删除连接到总线的设备时调用 KMDF 总线驱动程序的事件回调函数的顺序。 序列从图的顶部开始,操作设备处于工作电源状态(D0):

说明 KMDF 总线驱动程序断电和移除顺序的流程图,从处于工作电源状态(D0)的正常运行设备开始。

在从系统物理删除设备之前,框架不会删除 PDO。 例如,如果用户在 Device Manager 中禁用设备或将其停止在“安全删除硬件”实用工具中,但不以物理方式删除设备,框架将保留 PDO。 如果设备后来重新启用,则框架使用相同的 PDO,并通过调用 EvtDevicePrepareHardware 回调开始启动序列,如 物理设备对象的Power-Up Sequence 中所示。

注意:通常,框架会在调用总线驱动程序的 EvtDeviceReleaseHardware 回调函数之前,先对驱动程序枚举的所有子设备调用 EvtDeviceReleaseHardware 函数。 在父设备遇到启动或停机故障的情况下,框架可能会在调用所有子设备的 EvtDeviceReleaseHardware 函数之前调用驱动程序的 EvtDeviceReleaseHardware。 请考虑调用 WdfDeviceInitSetReleaseHardwareOrderOnFailure ,以确保框架仅在删除所有子设备后调用总线驱动程序的 EvtDeviceReleaseHardware 回调。