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


Метод IAdapterPowerManagement::P owerChangeState (portcls.h)

Метод PowerChangeState запрашивает, чтобы устройство переключилось в новое состояние питания.

Синтаксис

void PowerChangeState(
  [in] POWER_STATE NewState
);

Параметры

[in] NewState

Указывает новое состояние питания, запрашиваемое для устройства. Этот параметр является объединением типа POWER_STATE. Новое состояние питания (NewState.DeviceState) может быть одним из DEVICE_POWER_STATE значений перечисления, показанных в следующей таблице.

Состояние включения Значение
PowerDeviceD0 Состояние полного питания (D0). Этот код может быть функцией текущего состояния питания. Сохраните новое состояние. Это локальное значение используется для определения того, когда следует кэшировать доступ к свойству, а когда разрешить драйверу доступ к оборудованию.
PowerDeviceD1 Состояние спящего режима с наименьшей задержкой по отношению к времени задержки, необходимого для возврата в D0
PowerDeviceD2 Состояние спящего режима со средней задержкой. В этом состоянии драйвер устройства не может предполагать, что он может коснуться оборудования, поэтому все доступы должны быть кэшированы и восстановлено оборудование при входе в D0.
PowerDeviceD3 Состояние полного гибернации и является состоянием спящего режима с максимальной задержкой. Драйвер не может получить доступ к оборудованию в этом состоянии и должен кэшировать все операции доступа к оборудованию и восстанавливать оборудование по возвращении в D0 или D1.

Возвращаемое значение

None

Remarks

PortCls вызывает PowerChangeState метод в ответ на IRP IRP_MN_SET_POWER питания. Этот вызов не должен завершаться ошибкой. PortCls и система используют PowerChangeState вызов , чтобы поместить устройство в требуемое состояние питания. Когда система пытается приостановить или возобновить активный аудиопоток, драйвер должен быть в состоянии сохранить или восстановить контекст устройства соответствующим образом.

Чтобы помочь драйверу, PortCls приостановит все активные звуковые потоки перед вызовом этого метода, чтобы поместить устройство в спящий режим. После вызова этого метода PortCls разблокирует активные звуковые потоки, чтобы разбудить устройство. Минипорты могут выбрать дополнительные уведомления, используя интерфейс IPowerNotify .

Драйвер мини-порта должен выполнить запрошенное изменение состояния питания устройства перед возвратом PowerChangeState из вызова. Если драйверу мини-порта необходимо сохранить или восстановить состояние устройства перед изменением состояния питания, драйвер минипорта должен поддерживать интерфейс IPowerNotify , который позволяет получать предварительное предупреждение о любом таком изменении. Перед возвращением из успешного PowerChangeState вызова драйвер мини-порта должен кэшировать новое состояние питания.

Хотя драйвер мини-порта находится в одном из состояний спящего режима (любое состояние, отличное от PowerDeviceD0), он должен избегать записи на оборудование. Драйвер мини-порта должен кэшировать все аппаратные доступы, которые необходимо отложить до тех пор, пока устройство снова не войтется. Если состояние питания изменяется с одного из состояний спящего режима на PowerDeviceD0, драйвер мини-порта должен выполнять любые отложенные аппаратные операции доступа после включения питания устройства. Если состояние питания изменяется с PowerDeviceD0 на спящий режим, драйвер мини-порта может выполнять любые необходимые аппаратные операции во время PowerChangeState вызова, прежде чем выключать устройство.

При выключении драйвера минипорта никогда не предлагается создать объект драйвера мини-порта или объект потока. PortCls всегда помещает устройство в состояние PowerDeviceD0 перед вызовом метода NewStream драйвера мини-порта.

Код для этого метода должен находиться в постраничной памяти.

Требования

Требование Значение
Целевая платформа Универсальное
Верхняя часть portcls.h (включая Portcls.h)

См. также раздел

IAdapterPowerManagement

IPowerNotify

IRP_MN_SET_POWER