Устройство переходит в состояние Low-Power
Устройство выходит из рабочего состояния (D0) и переходит в состояние с низким энергопотреблением, если происходит одно из следующих действий:
Устройство бездействует (т. е. не имеет доступа) и может переходить в состояние простоя с низким энергопотреблением, пока система остается в рабочем состоянии (S0).
Состояние питания системы изменилось с рабочего состояния (S0) на состояние с низким энергопотреблением. (Драйверы могут вызывать WdfDeviceGetSystemPowerAction , чтобы определить причину изменения состояния питания системы.)
Для каждого драйвера функции и фильтра, который поддерживает устройство, платформа последовательно выполняет по одному драйверу за раз, начиная с драйвера, который является самым высоким в стеке драйверов:
Если драйвер использует самоуправляемый ввод-вывод, платформа вызывает функцию обратного вызова EvtDeviceSelfManagedIoSuspend драйвера.
Платформа останавливает все управляемые драйвером очереди ввода-вывода и вызывает их функции обратного вызова EvtIoStop (если они существуют).
Если драйвер является владельцем политики управления питанием устройства, платформа вызывает функцию обратного вызова EvtDeviceArmWakeFromS0, EvtDeviceArmWakeFromSx или EvtDeviceArmWakeFromSxWithReason .
Если оборудование и драйвер поддерживают DMA, платформа вызывает функции обратного вызова EvtDmaEnablerSelfManagedIoStop, EvtDmaEnablerFlush и EvtDmaEnablerDisable (если они существуют) для каждого созданного канала DMA.
Платформа вызывает функцию обратного вызова EvtDeviceD0ExitPreInterruptsDisabled (если она существует), а затем вызывает функцию обратного вызова EvtInterruptDisable драйвера (если она существует) для каждого прерывания, чтобы драйвер мог отключить прерывания устройства.
Платформа вызывает функцию обратного вызова EvtDeviceD0Exit драйвера (если она существует).
Водитель автобуса — это водитель в стеке, который называется последним. Когда платформа вызывает функцию обратного вызова EvtDeviceD0Exit водителя шины, функция обратного вызова устанавливает состояние питания устройства (дочернего устройства шины) в состояние с низким энергопотреблением. Платформа указывает состояние D3 с низким энергопотреблением, если владелец политики питания не указал другое состояние с низким энергопотреблением.
Примечание
Метод, используемый водителем шины для установки состояния питания дочернего устройства, зависит от шины. Например, спецификация управления питанием шины PCI определяет 16-разрядный регистр управления питанием и состояния (PMCSR). Два наименьших бита ("PowerState") определяют текущее состояние питания устройства и используются для установки устройства в новое состояние питания. pci.sys
Когда PDO получает IRP_MN_SET_POWER/D3, он считывает PMCSR, изменяет биты PowerState на 11b (уровень питания D3) и записывает pmcsr обратно.