Обработка системного Set-Power IRP у владельца политики управления питанием устройства
В ответ на IRP, установленного системой, владелец политики питания для стека устройств отвечает за перевод стека устройств в соответствующее состояние питания устройства.
Как правило, когда владелец политики управления питанием устройства получает IRP_MN_SET_POWER для состояния питания системы, он должен реагировать путем передачи системного набора питания IRP вниз стека устройств. Владелец политики питания устройства также должен ответить, отправив IRP_MN_SET_POWER стека устройств для соответствующего состояния питания устройства в процедуре IoCompletion . После того как все драйверы в стеке завершили IRP набора питания устройства, владелец политики питания устройства завершает IRP с набором питания системы.
Однако для повышения производительности возобновления работы системы владельцы устройств, у которых нет дочерних устройств, должны использовать другой подход, чтобы сократить время, необходимое системе для возврата в рабочее состояние S0 из спящего состояния. В этом случае в ответ на системный IRP,который возвращает систему в рабочее состояние S0, владельцы политики питания устройства должны выполнить следующую последовательность операций:
Получив IRP_MN_SET_POWER IRP для состояния питания системы S0 в подпрограмме DispatchPower драйвера, установите подпрограмму IoCompletion для IRP и передайте IRP вниз по стеку.
В процедуре IoCompletion , заданной на шаге (1), запросите IRP_MN_SET_POWER IRP для соответствующего состояния питания устройства, а затем немедленно завершите IRP набора питания системы. Драйвер не должен ждать завершения irp набора устройств, прежде чем он завершит IRP набора питания системы. Подпрограмма IoCompletion выполняется после того, как все драйверы нижнего уровня завершили системную настройку питания IRP, а системный IRP set-power передается обратно в объект функционального устройства (FDO) драйвера.
Выполните необходимую инициализацию для конкретного устройства.
Заполните IRP набора питания устройства, который был отправлен на шаге (2).
Обработка запросов ввода-вывода, которые были помещены в очередь, когда устройство находилось в спящем состоянии.
Диспетчер питания ядра имеет ограниченный набор очередей диспетчеризации IRP и должен быстро уведомлять все устройства в системе о возвращении в системное рабочее состояние S0. Драйверы, которые не могут как можно быстрее завершить IRP установки питания системы, не позволяют другим устройствам получить IRP с питанием системы, что может негативно повлиять на общую производительность системы во время перехода состояния питания системы.
Дополнительные сведения об обработке irP набора системных наборов питания см. в следующих статьях:
Определение правильного состояния питания устройства
Отправка IRP устройства Set-Power в ответ на системную Set-Power IRP