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


Обработка системного Set-Power IRP в владельце политики питания устройства

В ответ на системный IRP установки питания, владелец политики питания для стека устройств отвечает за перевод стека устройств в соответствующее состояние энергопотребления.

Как правило, когда владелец политики питания устройства получает IRP_MN_SET_POWER для состояния питания системы, он должен реагировать, передавая системный IRP настройки питания вниз по стеку устройств. Владелец политики питания устройства также должен отвечать, отправляя вниз по стеку устройств IRP_MN_SET_POWER для соответствующего состояния питания устройства в процедуре IoCompletion. После того как все драйверы в стеке завершат IRP установки питания устройства, владелец политики питания устройства завершает системный IRP на установку питания.

Однако для повышения производительности возобновления работы системы владельцы питания устройств для устройств, которые не имеют дочерних устройств, должны использовать другой подход, чтобы сократить время, которое требуется системе для возврата к рабочему состоянию S0 из спящего состояния. В этом случае, в ответ на IRP управления питанием системы, который возвращает систему в рабочее состояние S0, владельцы политики энергосбережения устройств должны выполнить следующую последовательность операций:

  1. После получения IRP IRP_MN_SET_POWER для состояния системы S0 в подпрограмме DispatchPower драйвера, задайте подпрограмму IoCompletion для этого IRP и передайте его вниз по стеку.

  2. В процедуре IoCompletion на шаге (1) запросите IRP_MN_SET_POWER IRP для соответствующего состояния питания устройства, а затем немедленно завершите системный IRP изменения питания. Драйвер не должен ждать завершения IRP установки мощности устройства, прежде чем он завершит системную установку мощности IRP. Подпрограмма IoCompletion выполняется после того, как все драйверы нижнего уровня завершили обработку системного запроса на установку питания IRP, и этот запрос передается обратно в функциональный объект устройства драйвера (FDO).

  3. Выполните любую требуемую инициализацию для конкретного устройства.

  4. Завершите обработку IRP установки питания устройства, отправленного на шаге (2).

  5. Обработка запросов ввода-вывода, которые были помещены в очередь, когда устройство находилось в спящем состоянии устройства.

Диспетчер питания ядра имеет ограниченный набор очередей отправки IRP и должен быстро уведомлять все устройства в системе возврата к рабочему состоянию системы S0. Драйверы, которые не могут завершить системный набор данных IRP как можно быстрее, препятствуют получению IRP других устройств, что может негативно повлиять на производительность системы во время переходов состояния питания системы.

Подробные сведения об обработке системных IRP, устанавливающих питание, см. в следующих статьях.

Определение правильного состояния питания устройства

Отправка IRP устройства Set-Power в ответ на IRP системы Set-Power