Владение политикой Питания в UMDF
Предупреждение
UMDF 2 является последней версией UMDF и заменяет UMDF 1. Все новые драйверы UMDF должны быть написаны с помощью UMDF 2. Новые функции не добавляются в UMDF 1, а поддержка UMDF 1 в более новых версиях Windows 10 ограничена. Универсальные драйверы Windows должны использовать UMDF 2.
Архивные примеры UMDF 1 можно найти в windows 11 версии 22H2 — обновление примеров драйверов за май 2022 г.
Дополнительные сведения см. в статье "Начало работы с UMDF".
Для каждого устройства один (и только один) драйверов устройства должен быть владельцем политики питания устройства. Владелец политики питания определяет соответствующее состояние питания устройства для устройства и отправляет запросы в стек драйверов устройства всякий раз, когда состояние питания устройства должно измениться.
Драйверы на основе платформы не содержат код, который запрашивает изменения в состоянии питания устройства, так как платформа предоставляет этот код. По умолчанию, когда система входит в состояние спящего состояния системы, платформа просит водителя шины устройства снизить состояние питания устройства до D3. (Драйвер может изменить поведение по умолчанию, чтобы платформа установила состояние спящего режима устройства на D1 или D2, если устройство предоставляет возможности пробуждения.) Когда питание системы возвращается в рабочее состояние (S0), платформа запрашивает драйвер шины для восстановления устройства в его рабочем состоянии (D0).
Владелец политики питания также отвечает за включение и отключение следующих функций устройства:
Способность устройства входить в состояние низкой мощности (спящего) при простое, и система остается в рабочем состоянии (S0)
Возможность пробуждения устройства от спящего состояния при обнаружении внешнего события
Способность устройства проснуть всю систему из состояния спящего состояния системы при обнаружении внешнего события
Если устройство поддерживает эти возможности простоя питания и системного пробуждения, владелец политики питания также может поддерживать интерфейсы IPowerPolicyCallbackWakeFromS0 и IPowerPolicyCallbackWakeFallbackWakeFromSx , которые определяют набор функций обратного вызова событий политики питания.
По умолчанию драйверы на основе UMDF не являются владельцами политик питания. Драйвер функции режима ядра устройства является владельцем политики питания по умолчанию. (Если драйвер функции в режиме ядра отсутствует и драйвер шины вызвал WdfPdoInitAssignRawDevice, водитель шины является владельцем политики питания). Если вы хотите, чтобы драйвер на основе UMDF был владельцем политики питания для стека драйверов, драйвер должен вызвать IWDFDeviceInitialize::SetPowerPolicyOwnership, а владелец политики питания по умолчанию по умолчанию должен вызвать WdfDeviceInitSetPowerPolicyOwnership, чтобы отключить владение.
Кроме того, если вы предоставляете драйвер на основе UMDF для USB-устройства, и если вы хотите, чтобы драйвер был владельцем политики питания, INF-файл драйвера должен содержать директиву INF AddReg, которая задает значение WinUsbPowerPolicyOwnershipDisabled в реестре. Если для этого значения REG_DWORD задано любое ненулевое число, он отключает возможность драйвера WinUSB быть владельцем политики питания устройства. Директива AddReg должна находиться в разделе INF DDInstall.HW, как показано в следующем примере.
[MyDriver_Install.NT.hw]
AddReg=MyDriver_AddReg
[MyDriver_AddReg]
HKR,,"WinUsbPowerPolicyOwnershipDisabled",0x00010001,1
Платформа выполняет следующую работу для владельца политики питания:
Он обрабатывает все связи с политикой питания между драйвером и остальной частью стека драйверов. Например, драйверу не нужно запрашивать драйвер шины для изменения состояния питания устройства, так как платформа выполняет запрос.
Если драйвер регистрирует функции обратного вызова событий политики питания, платформа вызывает их, когда пришло время включить или отключить возможность устройства пробуждения от состояния низкой мощности.
Если драйвер позволяет пользователям изменять параметры простоя и пробуждения, платформа предоставляет пользовательский интерфейс в виде страницы листа свойств, которая диспетчер устройств отображается.
Дополнительные сведения о обязанностях владельца политики питания см. в следующих разделах: