Поделиться через


Устройство возвращается в рабочее состояние.

Устройство, которое находится в состоянии низкой мощности, возвращается в рабочее состояние, если происходит одно из следующих действий:

  • Устройство обнаруживает внешнее событие и активирует сигнал пробуждения на системной шине. Драйвер шинного интерфейса, который обнаруживает сигнал пробуждения, вызывает WdfDeviceIndicateWakeStatus. В результате фреймворк вызывает функцию обратного вызова водителя автобуса EvtDeviceDisableWakeAtBus.

  • Устройство неактивно и драйвер вызывает WdfDeviceStopIdle.

  • Состояние питания системы изменилось с состояния низкой мощности на его рабочее состояние (S0).

В каждой из этих ситуаций фреймворк вызывает функцию обратного вызова водителя шины EvtDeviceD0Entry, которая затем восстанавливает устройство (дочернее устройство шины) в его рабочее состояние (D0).

Для каждой функции и драйвера фильтра, поддерживающего устройство, платформа выполняет в последовательной последовательности один драйвер за раз, начиная с драйвера, который является самым низким в стеке драйверов:

  1. Платформа вызывает функцию обратного вызова драйвера EvtDeviceD0Entry (если она существует).

  2. Платформа вызывает функцию обратного вызова драйвера EvtInterruptEnable (если она существует) для каждого прерывания, а затем функцию обратного вызова драйвера EvtDeviceD0EntryPostInterruptsEnabled (если она существует), чтобы драйвер мог включить прерывания устройства.

  3. Если оборудование и драйвер поддерживают DMA, фреймворк вызывает функции обратного вызова EvtDmaEnablerFill, EvtDmaEnablerEnableи EvtDmaEnablerSelfManagedIoStart (если они существуют) для каждого созданного канала DMA.

  4. Если драйвер является владельцем политики питания устройства, платформа вызывает функцию обратного вызова EvtDeviceDisarmWakeFromS0 или EvtDeviceDisarmWakeFromSx.

  5. Платформа вызывает функцию обратного вызова драйвера EvtChildListScanForChildren (если такая функция существует).

  6. Фреймворк перезапускает все очереди управляемых драйвером операций ввода-вывода и вызывает их функции обратного вызова EvtIoResume (при необходимости).

  7. Если драйвер использует самоуправляемый ввод-вывод, фреймворк вызывает функцию обратного вызова драйвера EvtDeviceSelfManagedIoRestart.