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


Метод 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

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

Никакой

Замечания

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

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

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

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

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

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

Требования

Требование Ценность
целевая платформа Всеобщий
заголовка portcls.h (include Portcls.h)

См. также

IAdapterPowerManagement

IPowerNotify

IRP_MN_SET_POWER