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


Управление пользователем режимом простоя и пробуждения устройства в 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.

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

Драйвер на основе UMDF может использовать метод IWDFDevice2::AssignS0IdleSettings , чтобы указать, могут ли пользователи с доступом к реестру включать или отключать возможность отключения бездействующего питания устройства.

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

Оба этих метода позволяют драйверу включить эту возможность, отключить ее или предоставить пользователям контроль над возможностями:

  • Когда драйвер вызывает метод AssignS0IdleSettings , он может предоставить пользователям управление возможностями простоя устройства, задав для параметра UserControlOfIdleSettings значение IdleAllowUserControl , а для параметра Enabledзначение WdfTrue или WdfUseDefault.

  • Когда драйвер вызывает метод AssignSxWakeSettings , он может предоставить пользователям контроль над возможностями пробуждения устройства, задав для параметра UserControlOfWakeSettings значение WakeAllowUserControl , а для параметра EnabledWdfTrue или WdfUseDefault.

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

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

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

Таким образом, версии 1.9 и более поздние версии платформы предоставляют два определяемых драйверами значения реестра с именами WdfDefaultIdleInWorkingState и WdfDefaultWakeFromSleepState, которые хранятся в подразделе Device Parameters\WDF устройства в аппаратном ключе устройства. Значения REG_DWORD типа: "0" означает, что возможность отключена, а "1" указывает, что эта возможность включена.

INF-файл драйвера может использовать директиву INF AddReg для создания и задания значений реестра WdfDefaultIdleInWorkingState и WdfDefaultWakeFromSleepState . Например, если драйвер включает возможность выключения бездействующего питания устройства, но если эта возможность должна быть отключена при установке устройства, INF-файл драйвера может задать для WdfDefaultIdleInWorkingState значение "0".

Платформа проверяет значение реестра WdfDefaultIdleInWorkingState , только если драйвер задает для параметра UserControlOfIdleSettings значение IdleAllowUserControl , а для параметра EnabledWdfTrue или WdfUseDefault , когда драйвер вызывает метод IWDFDevice2::AssignS0IdleSettings .

Платформа проверяет значения реестра WdfDefaultWakeFromSleepState , только если драйвер задает для параметра UserControlOfWakeSettings значение IWakeAllowUserControl , а для параметра EnabledWdfTrue или WdfUseDefault , когда драйвер вызывает метод IWDFDevice2::AssignSxWakeSettings .