IRP_MN_POWER_SEQUENCE
Этот IRP возвращает значения последовательности питания для устройства.
Основной код
При отправке
Драйвер отправляет это IRP в качестве оптимизации, чтобы определить, действительно ли его устройство перешло в определенное состояние питания. Поддержка этого IRP является необязательной.
Для отправки этого IRP драйвер должен вызвать IoAllocateIrp для выделения IRP, указав основной код IRP IRP_MJ_POWER и дополнительный код IRP IRP_MN_POWER_SEQUENCE. Затем драйвер должен вызвать IoCallDriver (Windows Vista) или PoCallDriver (Windows Server 2003, Windows XP и Windows 2000), чтобы передать IRP следующему драйверу ниже. Диспетчер управления питанием не может отправить этот IRP.
Отправители этого IRP должны работать в IRQL <= DISPATCH_LEVEL.
Входные параметры
Отсутствует.
Выходные параметры
Parameters.PowerSequence указывает на POWER_SEQUENCE структуру со следующими элементами:
SequenceD1
Количество раз, когда устройство находилось в состоянии питания D1 или ниже.
SequenceD2
Количество раз, когда устройство находилось в состоянии питания D2 или ниже.
SequenceD3
Количество раз, когда устройство находилось в состоянии питания D3.
Значения последовательности отслеживают минимальное число случаев, когда устройство находилось в соответствующем состоянии питания или в более низком состоянии питания.
Драйвер шины увеличивает значения в SequenceD1, SequenceD2 и SequenceD3 по крайней мере каждый раз, когда устройство переходит в соответствующее состояние питания или в более низкое состояние питания.
Блок состояния ввода-вывода
Драйвер задает Irp-IoStatus.Status> значение STATUS_SUCCESS, чтобы указать, что он вернул запрошенные сведения, или STATUS_NOT_IMPLEMENTED, чтобы указать, что он не поддерживает этот IRP.
Операция
Этот IRP возвращает значения последовательности питания для устройства. Водители автобусов могут дополнительно обработать его; Функции и драйверы фильтров могут при необходимости отправить его.
Этот IRP обеспечивает полезную оптимизацию для устройства, которое требует длительного времени для изменения состояния. Каждый раз, когда устройство изменяет состояние питания, драйвер шины увеличивает значение последовательности для этого состояния питания. Драйвер шины инициализирует значения последовательности во время загрузки и постоянно увеличивает их после этого; Их не нужно сбрасывать до нуля.
Владелец политики устройства может отправить этот IRP один раз, чтобы получить значения последовательности перед отключением устройства и еще раз получить новые значения при восстановлении питания на устройстве. Сравнивая два набора значений, драйвер может определить, действительно ли устройство перешло в состояние с низким энергопотреблением. Если устройство не потеряло питание, драйвер может избежать повторной инициализации, отнимающей много времени, когда устройство возвращается в состояние D0.
Например, если на восстановление питания устройства после достижения состояния D2 требуется много времени, драйвер может сохранить значение SequenceD2 , прежде чем установить для устройства значение D2 или ниже. Позже, когда устройство восстанавливает питание, драйвер может сравнить новое значение SequenceD2 с хранимым значением, чтобы определить, действительно ли состояние устройства упало ниже D2. Если значения совпадают, устройство фактически не переходит в состояние питания D2 или более низкое, и драйвер может избежать повторной инициализации устройства.
Требования
Заголовок |
Wdm.h (включая Wdm.h, Ntddk.h или Ntifs.h) |