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


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

Владелец политики питания проверяет массив DeviceState в структуре DEVICE_CAPABILITIES , чтобы определить допустимый диапазон состояний питания устройства для каждого состояния питания системы. Массив содержит наибольшее состояние питания устройства, которое может поддерживаться базовым устройством для каждого состояния питания системы.

При выборе конкретного состояния из этого диапазона учитывайте следующее:

  • Большинство устройств переходит в состояние D0, когда система переходит в состояние S0.

  • Большинство устройств переходит в состояние D3, когда система переходит в любое спящее состояние. Однако для устройства, которое включено для пробуждения, может потребоваться ввести D1 или D2, если оно поддерживает такие состояния. Дополнительные сведения см. в разделе Возможности управления питанием устройств.

  • Для устройства, на которое будет храниться файл гибернации, применяются специальные правила. Если IRP системы запрашивает PowerSystemHibernate, устройство, которое будет содержать файл гибернации, не должно отключать питание. Владелец политики питания для такого устройства должен запросить состояние питания устройства D3 и сохранить контекст, но драйверы устройства не должны выключать устройство.

Если IRP системы запрашивает PowerSystemShutdown, драйвер должен проверка значение POWER_ACTION в Irp-Parameters.Power.ShutdownType>, чтобы определить причину изменения состояния. Дополнительные сведения см. в разделе System Power Actions.

Владелец политики управления питанием устройства должен отправить IRP набора питания устройства для каждой системной IRP, даже если устройство уже находится в правильном состоянии питания устройства. Если драйвер ранее приостановил операции устройства в ответ на IRP с мощностью запроса, IRP set-power уведомляет его о прекращении очередей IRP и возвращении к нормальной работе для текущего состояния питания. Единственное исключение возникает, когда устройство находится в состоянии D3; в этом случае драйверу не нужно отправлять дополнительный запрос IRP_MN_SET_POWER для D3.