estructura WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS (wdfdevice.h)

[Se aplica a KMDF y UMDF]

La estructura WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS contiene información proporcionada por el controlador que usa el marco cuando un dispositivo está inactivo y el sistema está en estado de trabajo del sistema (S0).

Sintaxis

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;

Miembros

Size

Tamaño, en bytes, de esta estructura.

IdleCaps

Enumerador de tipo WDF_POWER_POLICY_S0_IDLE_CAPABILITIES que identifica la capacidad del dispositivo de reactivarse después de establecerse en un estado de bajo consumo, mientras que el sistema permanece en estado de funcionamiento (S0).

DxState

Enumerador con tipo DEVICE_POWER_STATE que identifica el estado de energía de dispositivo bajo que el dispositivo entrará después de que finalice el período de tiempo de espera de inactividad. DEVICE_POWER_STATE valores se definen en wdm.h.

IdleTimeout

La cantidad de tiempo, en milisegundos, que el dispositivo permanecerá inactivo antes de que el marco lo coloque en el estado de baja potencia proporcionado por DxState. Para usar el valor de tiempo de espera de inactividad predeterminado del marco, especifique IdleTimeoutDefaultValue. Para obtener más información sobre cuándo el marco considera que el dispositivo está inactivo, consulte Compatibilidad con el apagado inactivo.

UserControlOfIdleSettings

Enumerador con tipo WDF_POWER_POLICY_S0_IDLE_USER_CONTROL que indica si los usuarios tienen la capacidad de modificar la configuración inactiva del dispositivo.

Enabled

Enumerador de tipo WDF_TRI_STATE que indica si el dispositivo se apagará si permanece inactivo y mientras la alimentación del sistema está en S0. Este miembro puede tener uno de los siguientes valores:

WdfTrue : el apagado está habilitado.

WdfFalse : el apagado está deshabilitado.

WdfUseDefault : el apagado se habilita inicialmente de forma predeterminada; pero si el miembro UserControlOfIdleSettings está establecido en IdleAllowUserControl, la configuración del usuario o el archivo INF del controlador invalida el valor inicial.

Si el apagado está habilitado, el dispositivo tiene una funcionalidad de reactivación y el valor de tiempo de espera de inactividad expira, el marco llama a la función de devolución de llamada EvtDeviceArmWakeFromS0 del controlador antes de que el dispositivo entre en un estado de bajo consumo.

PowerUpIdleDeviceOnSystemWake

Enumerador con tipo WDF_TRI_STATE que indica si el dispositivo volverá a su estado de trabajo (D0) cuando el sistema vuelva a su estado de funcionamiento (S0). Este miembro solo es válido si el controlador establece el miembro IdleCaps en IdleCannotWakeFromS0. El miembro PowerUpIdleDeviceOnSystemWake puede tener uno de los siguientes valores:

WdfTrue : si el dispositivo y el sistema están en estado de bajo consumo, el dispositivo vuelve a su estado de trabajo cuando el sistema vuelve a su estado de trabajo.

WdfFalse : si el dispositivo y el sistema están en estado de bajo consumo, el dispositivo permanece en estado de bajo consumo cuando el sistema vuelve a su estado de trabajo.

WdfUseDefault : el valor predeterminado que usa el marco si el controlador no establece un valor diferente. Este valor tiene el mismo significado que WdfFalse.

Si el miembro PowerUpIdleDeviceOnSystemWake se establece en WdfFalse o WdfUseDefault, el dispositivo vuelve a su estado de trabajo solo cuando el software accede al dispositivo, como cuando una aplicación envía una solicitud de E/S al dispositivo. Para obtener más información, consulte Un dispositivo vuelve a su estado de trabajo.

El miembro PowerUpIdleDeviceOnSystemWake está disponible en la versión 1.9 y versiones posteriores de KMDF, y a partir de la versión 2.0 de UMDF.

IdleTimeoutType

Enumerador con tipo WDF_POWER_POLICY_IDLE_TIMEOUT_TYPE que indica cómo se usa el miembro IdleTimeout .

El miembro IdleTimeoutType está disponible en la versión 1.11 y versiones posteriores de KMDF, y a partir de la versión 2.0 de UMDF. Vea información adicional en Comentarios.

ExcludeD3Cold

Enumerador con tipo WDF_TRI_STATE que indica si el estado de energía D3cold debe ser una opción permitida para el estado de baja potencia que el dispositivo entrará cuando expire el período de tiempo de espera de inactividad. El miembro ExcludeD3Cold puede tener uno de los siguientes valores:

WdfTrue : el marco moverá un dispositivo a un estado D de bajo consumo cuando expire el período de tiempo de espera de inactividad. Si ese estado D es D3, el dispositivo se moverá a D3hot. Si ExcludeD3Cold está establecido en WdfTrue, no se permitirá ninguna transición posterior de D3hot a D3cold.

WdfFalse : el dispositivo puede entrar en el estado de alimentación D3cold cuando expira el período de tiempo de espera de inactividad, si se cumplen todos los criterios siguientes:

  • El miembro DxState de esta estructura especifica PowerDeviceD3 o PowerDeviceMaximum.
  • El firmware ACPI indica que el dispositivo admite el estado de alimentación D3cold.
  • Si el controlador especificó IdleCanWakeFromS0 o IdleUsbSelectiveSuspend en el miembro IdleCaps de esta estructura, el dispositivo puede responder a un evento de reactivación externo mientras se encuentra en estado de alimentación D3cold. De lo contrario, este requisito no se aplica.
WdfUseDefault : el marco examina el DDInstall. Sección HW del archivo INF del controlador. Si están presentes las líneas siguientes, este valor tiene el mismo significado que WdfFalse:
Include = machine.inf
Needs = PciD3ColdSupported
De lo contrario, este valor tiene el mismo significado que WdfTrue.

El miembro ExcludeD3Cold está disponible a partir de la versión 1.11 de KMDF, así como a partir de la versión 2.0 de UMDF, y se omite en sistemas operativos anteriores a Windows 8. Vea información adicional en Comentarios.

Comentarios

La estructura WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS se usa como entrada para WdfDeviceAssignS0IdleSettings.

La primera vez que un controlador llama a WdfDeviceAssignS0IdleSettings, se producen las siguientes acciones:

  • El marco almacena los valores de todos los miembros de estructura WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS .
  • Si el miembro UserControlOfIdleSettings se establece en IdleAllowUserControl y si el miembro Enabled está establecido en WdfUseDefault, el marco lee el registro para averiguar si el usuario ha habilitado el encendido del dispositivo cuando está inactivo.
Durante las llamadas posteriores a WdfDeviceAssignS0IdleSettings, el marco solo almacena los valores de los miembros DxState, IdleTimeout y Enabled . Además, en KMDF 1.9 y versiones anteriores, el marco almacena el valor del miembro IdleCapsa menos que el valor sea IdleUsbSelectiveSuspend. Por lo tanto, el controlador debe usar las reglas siguientes:
  • Si el controlador especifica IdleUsbSelectiveSuspend para el valor del miembro IdleCaps , debe hacerlo la primera vez que llama a WdfDeviceAssignS0IdleSettings y posteriormente no puede cambiar ese valor.
  • Si el controlador especifica IdleCanWakeFromS0 o IdleCannotWakeFromS0 la primera vez que llama a WdfDeviceAssignS0IdleSettings, puede llamar posteriormente a WdfDeviceAssignS0IdleSettings para cambiar ese valor (pero no puede cambiar el valor a IdleUsbSelectiveSuspend).

A partir de KMDF 1.11 y UMDF 2.0, un controlador KMDF puede cambiar entre IdleUsbSelectiveSuspend e IdleCannotWakeFromS0 en cualquier momento.

A partir de Windows 8, establecer el miembro IdleTimeoutType en SystemManagedIdleTimeout o SystemManagedIdleTimeoutWithHint hace que el marco se registre con el marco de administración de energía (PoFx).

Si el controlador está implementando compatibilidad con el estado de energía funcional para un dispositivo de varios componentes, el controlador debe establecer IdleTimeoutType en DriverManagedIdleTimeout o no llamar a WdfDeviceAssignS0IdleSettings en absoluto.

Para obtener más información, consulte Compatibilidad con estados de energía funcionales e información general de Power Management Framework.

Las reglas siguientes se aplican al valor especificado para el miembro DxState :

  • El valor no puede ser PowerDeviceD0.
  • En el caso de los dispositivos USB, el valor no puede ser PowerDeviceD0 o PowerDeviceD3.
  • Si especifica PowerDeviceMaximum, el marco usa el valor que el controlador del bus del dispositivo proporciona en el miembro DeviceWake de su estructura WDF_DEVICE_POWER_CAPABILITIES .
  • Si el valor del miembro IdleCaps es IdleCanWakeFromS0, no puede especificar un estado de alimentación del dispositivo inferior al estado de alimentación del dispositivo en el miembro DeviceWake de la estructura WDF_DEVICE_POWER_CAPABILITIES del controlador de bus. (En otras palabras, si el valor deviceWake del controlador de bus es PowerDeviceD2, el valor dxState del controlador de función no puede ser PowerDeviceD3).
En los sistemas operativos anteriores a Windows 8, el estado de alimentación D3 indica que el dispositivo está en un estado de bajo consumo, pero que todavía se mantiene cierta potencia en el bus. A partir de Windows 8, el estado de energía D3 anterior se denomina D3hot y está disponible un nuevo estado de alimentación (D3cold). Un dispositivo puede entrar en el estado D3cold mientras el sistema está en su estado de funcionamiento (S0) o en un estado de bajo consumo. Cuando un dispositivo está en estado de alimentación D3cold, el bus está inactivo y el dispositivo debe desencadenar su propia señal de reactivación cuando una acción externa (por ejemplo, conectar un cable de red) provoca un evento de hardware.

A partir de KMDF 1.11 y UMDF 2.0, un dispositivo que admita el apagado inactivo puede usar el miembro ExcludeD3Cold de esta estructura para especificar si el estado de alimentación D3cold debe ser una opción permitida para el estado de baja potencia del dispositivo que el dispositivo entrará después de que finalice el período de tiempo de espera de inactividad.

Para obtener información sobre las entradas del Registro que controlan las funcionalidades inactivas de un dispositivo, consulte User Control of Device Idle and Wake Behavior (Control de usuario del comportamiento inactivo y de reactivación del dispositivo).

Para inicializar su estructura de WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS , el controlador debe llamar a WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_INIT.

Requisitos

Requisito Value
Versión mínima de KMDF 1.0
Versión mínima de UMDF 2.0
Encabezado wdfdevice.h (incluir Wdf.h)