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


Обработка IRP_MN_SET_POWER для состояний системного питания

Диспетчер питания отправляет запрос управления питанием (IRP), указывающий минорный код IRP_MN_SET_POWER и состояние энергосистемы по одной из следующих причин:

  • Изменение состояния питания системы.

  • Чтобы подтвердить текущее состояние питания после неудачного запроса IRP_MN_QUERY_POWER.

Через диспетчер ввода-вывода диспетчер питания отправляет IRP в верхний драйвер в стеке устройств на каждом узле устройства PnP. IRP уведомляет всех драйверов в стеке о правильном состоянии энергетической системы.

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

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

Система power IRP не является прямым запросом на изменение состояния питания — это уведомление. Драйвер не должен изменять состояние питания своего устройства в качестве прямого ответа на системный IRP; Драйвер изменяет состояние питания устройства только в ответ на IRP устройства . (Владелец политики питания устройства отправляет IRP устройства; см. раздел "Обработка системного Set-Power IRP" в владельце политики питания устройства.)

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

Как драйвер обрабатывает этот IRP, зависит от ее роли в стеке устройств, как описано в следующих разделах:

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

Обработка IRP системы Set-Power в драйвере шины

Обработка системного Set-Power IRP в фильтрующем драйвере

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