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


структура WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS (wdfdevice.h)

[Относится к KMDF и UMDF]

Структура WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS содержит предоставленные драйвером сведения, которые платформа использует, когда устройство простаивает и система находится в рабочем состоянии системы (S0).

Синтаксис

typedef struct _WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS {
  ULONG                                 Size;
  WDF_POWER_POLICY_S0_IDLE_CAPABILITIES IdleCaps;
  DEVICE_POWER_STATE                    DxState;
  ULONG                                 IdleTimeout;
  WDF_POWER_POLICY_S0_IDLE_USER_CONTROL UserControlOfIdleSettings;
  WDF_TRI_STATE                         Enabled;
  WDF_TRI_STATE                         PowerUpIdleDeviceOnSystemWake;
  WDF_POWER_POLICY_IDLE_TIMEOUT_TYPE    IdleTimeoutType;
  WDF_TRI_STATE                         ExcludeD3Cold;
} WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS, *PWDF_DEVICE_POWER_POLICY_IDLE_SETTINGS;

Члены

Size

Размер данной структуры (в байтах).

IdleCaps

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

DxState

DEVICE_POWER_STATE типизированный перечислитель, определяющий низкое состояние питания устройства, которое будет введено устройством после истечения периода ожидания простоя. DEVICE_POWER_STATE значения определяются в wdm.h.

IdleTimeout

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

UserControlOfIdleSettings

WDF_POWER_POLICY_S0_IDLE_USER_CONTROL типизированный перечислитель, который указывает, имеют ли пользователи возможность изменять параметры простоя устройства.

Enabled

WDF_TRI_STATE типизированный перечислитель, который указывает, будет ли устройство выключено, если оно остается бездействующим и пока питание системы находится на уровне S0. Этот элемент может иметь одно из следующих значений:

WdfTrue — выключение питания включено.

WdfFalse — выключение питания отключено.

WdfUseDefault — выключение питания изначально включено по умолчанию; но если для элемента UserControlOfIdleSettings задано значение IdleAllowUserControl, то параметр пользователя или INF-файл драйвера переопределяет начальное значение.

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

PowerUpIdleDeviceOnSystemWake

Перечислитель типа WDF_TRI_STATE, который указывает, вернется ли устройство в рабочее (D0) состояние, когда система вернется в рабочее (S0). Этот член действителен, только если драйвер задает для элемента IdleCaps значение IdleCannotWakeFromS0. Элемент PowerUpIdleDeviceOnSystemWake может иметь одно из следующих значений:

WdfTrue — если устройство и система находятся в состоянии с низким энергопотреблением, устройство возвращается в рабочее состояние, когда система возвращается в рабочее состояние.

WdfFalse . Если и устройство, и система находятся в состоянии низкого энергопотребления, устройство остается в состоянии низкого энергопотребления, когда система возвращается в рабочее состояние.

WdfUseDefault — значение по умолчанию, используемое платформой, если драйвер не задает другое значение. Это значение имеет то же значение, что и WdfFalse.

Если для элемента PowerUpIdleDeviceOnSystemWake задано значение WdfFalse или WdfUseDefault, устройство возвращается в рабочее состояние только при доступе программного обеспечения к устройству, например, когда приложение отправляет на устройство запрос ввода-вывода. Дополнительные сведения см. в разделе Устройство возвращается в рабочее состояние.

Элемент PowerUpIdleDeviceOnSystemWake доступен в KMDF версии 1.9 и более поздних версиях и начиная с версии UMDF 2.0.

IdleTimeoutType

Перечислитель типа WDF_POWER_POLICY_IDLE_TIMEOUT_TYPE, указывающий, как используется элемент IdleTimeout .

Элемент IdleTimeoutType доступен в KMDF версии 1.11 и более поздних, а также начиная с версии 2.0 UMDF. Дополнительные сведения см. в разделе Примечания.

ExcludeD3Cold

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

WdfTrue — платформа переместит устройство в маломощное D-состояние по истечении периода простоя. Если это D-состояние — D3, устройство будет перемещено в D3hot. Если параметр ExcludeD3Cold имеет значение WdfTrue, дальнейший переход с D3hot на D3cold не будет разрешен.

WdfFalse — устройство может перейти в состояние питания D3cold по истечении времени ожидания простоя, если выполнены все следующие условия:

  • Элемент DxState этой структуры указывает PowerDeviceD3 или PowerDeviceMaximum.
  • Встроенное ПО ACPI указывает, что устройство поддерживает состояние питания D3cold.
  • Если драйвер указал IdleCanWakeFromS0 или IdleUsbSelectiveSuspend в элементе IdleCaps этой структуры, устройство может реагировать на внешнее событие пробуждения, находясь в состоянии питания D3cold. В противном случае это требование не применяется.
WdfUseDefault — платформа проверяет DDInstall. Раздел HW INF-файла драйвера. Если присутствуют следующие строки, это значение имеет то же значение, что и WdfFalse:
Include = machine.inf
Needs = PciD3ColdSupported
В противном случае это значение имеет то же значение, что и WdfTrue.

Член ExcludeD3Cold доступен начиная с KMDF версии 1.11, а также начиная с версии 2.0 UMDF и игнорируется в операционных системах, предшествующих Windows 8. Дополнительные сведения см. в разделе Примечания.

Комментарии

Структура WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS используется в качестве входных данных для WdfDeviceAssignS0IdleSettings.

При первом вызове драйвером WdfDeviceAssignS0IdleSettings выполняются следующие действия:

  • Платформа хранит значения всех элементов структуры WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS .
  • Если для элемента UserControlOfIdleSettings задано значение IdleAllowUserControl , а для элемента Enabled задано значение WdfUseDefault, платформа считывает реестр, чтобы узнать, включил ли пользователь выключение устройства в режиме простоя.
Во время последующих вызовов WdfDeviceAssignS0IdleSettings платформа хранит только значения членов DxState, IdleTimeout и Enabled . Кроме того, в KMDF 1.9 и более ранних версиях платформа сохраняет значение члена IdleCaps , если только значением не является IdleUsbSelectiveSuspend. Поэтому драйвер должен использовать следующие правила:
  • Если драйвер указывает IdleUsbSelectiveSuspend для значения элемента IdleCaps , он должен сделать это при первом вызове WdfDeviceAssignS0IdleSettings и впоследствии не может изменить это значение.
  • Если драйвер указывает IdleCanWakeFromS0 или IdleCannotWakeFromS0 при первом вызове WdfDeviceAssignS0IdleSettings, он может снова вызвать WdfDeviceAssignS0IdleSettings , чтобы изменить это значение (но он не может изменить значение на IdleUsbSelectiveSuspend).

Начиная с KMDF 1.11 и UMDF 2.0, драйвер KMDF может переключаться между IdleUsbSelectiveSuspend и IdleCannotWakeFromS0 в любое время.

Начиная с Windows 8, установка элемента IdleTimeoutType на SystemManagedIdleTimeout или SystemManagedIdleTimeoutWithHint приводит к регистрации платформы управления питанием (PoFx).

Если драйвер реализует поддержку функционального состояния питания для многокомпонентного устройства, драйвер должен либо задать IdleTimeoutType значениеDriverManagedIdleTimeout, либо вообще не вызывать WdfDeviceAssignS0IdleSettings .

Дополнительные сведения см. в разделах Поддержка функциональных состояний питания и Обзор платформы управления питанием.

К значению, указанному для элемента DxState , применяются следующие правила:

  • Значение не может быть PowerDeviceD0.
  • Для USB-устройств значением не может быть PowerDeviceD0 или PowerDeviceD3.
  • Если указать PowerDeviceMaximum, платформа использует значение, которое драйвер для шины устройства предоставляется в элементе DeviceWake структуры WDF_DEVICE_POWER_CAPABILITIES .
  • Если значение элемента IdleCaps равно IdleCanWakeFromS0, нельзя указать состояние питания устройства, которое ниже состояния питания устройства в элементе DeviceWakeструктуры WDF_DEVICE_POWER_CAPABILITIES водителя шины. (Другими словами, если значение DeviceWake драйвера шины равно PowerDeviceD2, значение DxState драйвера функции не может быть PowerDeviceD3.)
В операционных системах, предшествующих Windows 8, состояние питания D3 означает, что устройство находится в состоянии низкого энергопотребления, но некоторая мощность шины по-прежнему сохраняется. Начиная с Windows 8, прежнее состояние питания D3 называется D3hot, и доступно новое состояние питания (D3cold). Устройство может перейти в состояние D3cold, когда система находится в рабочем (S0) состоянии или в состоянии с низким энергопотреблением. Когда устройство находится в состоянии питания D3cold, шина неактивна и устройство должно активировать собственный сигнал пробуждения, когда внешнее действие (например, подключение сетевого кабеля) вызывает событие оборудования.

Начиная с KMDF 1.11 и UMDF 2.0, устройство, поддерживающее выключение в режиме простоя , может использовать член ExcludeD3Cold этой структуры, чтобы указать, должно ли состояние питания D3cold быть допустимым выбором для состояния с низким энергопотреблением устройства , которое будет введено устройством после истечения периода ожидания простоя.

Сведения о записях реестра, которые управляют бездействующими возможностями устройства, см. в разделах Управление пользователем бездействия устройства и поведением пробуждения.

Чтобы инициализировать структуру WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS , драйвер должен вызвать WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_INIT.

Требования

Требование Значение
Минимальная версия KMDF 1,0
Минимальная версия UMDF 2,0
Верхняя часть wdfdevice.h (включая Wdf.h)