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


функция обратного вызова SET_D3COLD_SUPPORT (wdm.h)

Подпрограмма обратного вызова SetD3ColdSupport включает или отключает переходы в состояние питания устройства D3cold.

Синтаксис

SET_D3COLD_SUPPORT SetD3coldSupport;

void SetD3coldSupport(
  [in, optional] PVOID Context,
  [in]           BOOLEAN D3ColdSupport
)
{...}

Параметры

[in, optional] Context

Указатель на сведения о контексте для конкретного интерфейса. Вызывающий объект задает этому параметру значение члена Contextструктуры D3COLD_SUPPORT_INTERFACE для интерфейса.

[in] D3ColdSupport

Следует ли разрешить переходы из D3hot в D3cold. Установите значение TRUE , чтобы включить эти переходы. В противном случае задайте значение FALSE. Дополнительные сведения см. в разделе Примечания.

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

None

Remarks

Драйвер, который является владельцем политики питания (PPO) для устройства, может вызывать эту процедуру, чтобы включить или отключить переходы на подсостояние D3cold, которые могут произойти, когда компьютер находится в состоянии питания системы S0 (работает) и не готовится к выходу из S0.

Если устройство должно иметь возможность сигнализировать о событии пробуждения из любого состояния Dx с низким энергопотреблением, которое оно входит, драйвер для этого устройства не должен включать переходы на подсостояние D3cold, если устройство не может сообщить о событии пробуждения из этого подсостоя. В противном случае после ввода D3cold устройство будет недоступно до тех пор, пока компьютер не перезагрузится или не выйдет из спящего режима.

Драйвер устройства может вызвать подпрограмму GetIdleWakeInfo , чтобы определить, может ли устройство сигнализировать о событии пробуждения от D3cold.

При необходимости драйвер для устройства может выполнить ряд вызовов SetD3ColdSupport для включения и отключения переходов D3cold в ответ на динамически изменяющиеся условия.

Например, графическое устройство может иметь большой аппаратный контекст для восстановления после перехода с D3cold на D0. Время, необходимое для восстановления этого контекста, может быть приемлемым в зависимости от набора задач, выполняемых пользователем в данный момент. Кроме того, время восстановления может отличаться в зависимости от этого набора задач. Драйверу может потребоваться динамически включать и отключать переходы на D3cold по мере изменения набора задач.

Устройство может входить в подсостояние D3cold только из подсостояние D3hot. Если драйвер вызывает SetD3ColdSupport , чтобы включить переходы с D3hot на D3cold, устройство может войти в D3cold после входа в D3hot. В ответ на событие пробуждения устройство может войти в D0 непосредственно из D3hot, не проходя через D3cold.

При перемещении устройства с D3hot на D3cold оно, вероятно, делает это, потому что источник питания, который он совместно использует с некоторыми другими устройствами, был отключен. Через некоторое время после того, как эти устройства войдут в D3cold, драйвер для одного из устройств может запросить переход на D0. В ответ на этот запрос драйвер родительской шины или драйвер фильтра ACPI включает источник питания, и все устройства, которые совместно используют источник питания, переходят в состояние включения питания по умолчанию.

Единственным драйвером устройства, который ожидает такое изменение состояния питания, является драйвер, который запросил изменение. Драйверы для других устройств должны получать уведомление об этом изменении, чтобы они могли правильно инициализировать свои устройства для работы в D0. Только драйвер, который может получать это уведомление, должен разрешить устройству войти в D3cold. В противном случае драйвер не будет знать, когда устройство входит в D0.

Начиная с Windows 8, драйвер WDM может зарегистрировать свое устройство в power framework (PoFx) и получать уведомления от процедуры DevicePowerRequiredCallback, когда устройство входит в D0. Аналогичным образом драйвер KMDF может зарегистрировать свое устройство в PoFx и получать уведомления с помощью обратного вызова события EvtDeviceD0Entry .

Драйвер, который не регистрирует свое устройство в PoFx, по-прежнему может получать уведомления о переходе на D0, если устройство вооружается для пробуждения. Когда водители автобуса включат питание устройства, они выполняют запрос IRP_MN_WAIT_WAKE водителя. В ответ драйвер инициализирует свое устройство для работы в D0.

После включения источника питания, совместно используемого несколькими устройствами, устройство, драйвер которого запросил переход на D0, может быть единственным из этих устройств, которое должно работать. Другие устройства, скорее всего, будут простаивать. В этом случае их драйверы через некоторое время переместят эти устройства в D3hot.

Если драйвер вызывает SetD3ColdSupport , чтобы отключить переходы на D3cold, D0 является единственным состоянием питания устройства, которое устройство может войти из D3hot.

Если драйвер вызывает SetD3ColdSupport , чтобы включить переходы на D3cold, эти переходы могут быть отключены по другим причинам. Драйвер может вызвать подпрограмму GetD3ColdCapability , чтобы определить, может ли устройство входить в подсостояние D3cold. Однако драйверу может не потребоваться эта информация. Если устройство не может войти в D3cold, вызовы SetD3ColdSupport не оказывают никакого влияния, но являются безвредными.

Подпрограмма SetD3ColdSupport влияет только на переходы D3hot в D3cold, которые могут происходить, когда компьютер находится в состоянии S0 (и не готовится к выходу из нее). Эта процедура не влияет на ситуацию, когда компьютер готовится выйти из S0 и перейти в состояние системы с низким энергопотреблением. Устройство в подсостояние D3hot всегда может войти в подсостояние D3cold непосредственно перед тем, как компьютер перейдет в системное состояние с низким энергопотреблением.

По умолчанию перед первым вызовом процедуры SetD3ColdSupport переходы D3hot в D3cold отключены. Чтобы изменить это значение по умолчанию так, чтобы переходы D3hot на D3cold были включены перед первым вызовом SetD3ColdSupport , пакет драйвера для устройства может включать следующие две строки в разделе DDInstall.HW INF-файла, устанавливающего драйвер:

Include = machine.inf
Needs = PciD3ColdSupported

Windows 8 — это первая версия Windows для поддержки устройств, которые могут входить и выходить из подсостояния D3cold, пока компьютер остается в состоянии S0. Дополнительные сведения см. в разделе Состояния Low-Power устройств.

Требования

Требование Значение
Минимальная версия клиента Доступно начиная с Windows 8.
Целевая платформа Персональный компьютер
Верхняя часть wdm.h (включая Wdm.h)
IRQL PASSIVE_LEVEL

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

D3COLD_SUPPORT_INTERFACE

DevicePowerRequiredCallback

EvtDeviceD0Entry

GetD3ColdCapability

IRP_MN_WAIT_WAKE