设备回到工作状态

如果发生以下情况之一,处于低功耗状态的设备将返回到其工作状态:

  • 设备检测到外部事件并在其总线上触发唤醒信号。 检测唤醒信号的总线驱动程序调用 WdfDeviceIndicateWakeStatus。 因此,框架调用总线驱动程序的 EvtDeviceDisableWakeAtBus 回调函数。

  • 设备处于空闲状态,驱动程序调用 WdfDeviceStopIdle

  • 系统的电源状态已从低功率状态更改为其工作 (S0) 状态。

在上述每种情况下,框架都会调用总线驱动程序的 EvtDeviceD0Entry 回调函数,然后将设备 (总线) 的子设备还原到其工作 (D0) 状态。

对于支持设备的每个函数和筛选器驱动程序,框架依次执行以下操作,一次一个驱动程序,从驱动程序堆栈中最低的驱动程序开始:

  1. 框架调用驱动程序的 EvtDeviceD0Entry 回调函数 ((如果它存在于) )。

  2. 框架 (调用驱动程序的 EvtInterruptEnable 回调函数(如果每个中断存在) ),然后调用驱动程序的 EvtDeviceD0EntryPostInterruptsEnabled 回调函数 ((如果它) 存在),则调用该驱动程序的 EvtDeviceD0EntryPostEnabled 回调函数) 。

  3. 如果硬件和驱动程序支持 DMA,框架将调用驱动程序的 EvtDmaEnablerFillEvtDmaEnablerEnableEvtDmaEnablerSelfManagedIoStart 回调函数 ((如果它们对于创建的每个 DMA 通道存在) )。

  4. 如果驱动程序是设备的电源策略所有者,框架将调用其 EvtDeviceDisarmWakeFromS0EvtDeviceDisarmWakeFromSx 回调函数。

  5. 框架调用驱动程序的 EvtChildListScanForChildren 回调函数 ((如果它存在于) )。

  6. 框架会重启驱动程序的所有电源托管 I/O 队列,并在必要时 (调用其 EvtIoResume 回调函数) 。

  7. 如果驱动程序使用自托管 I/O,框架将调用驱动程序的 EvtDeviceSelfManagedIoRestart 回调函数。