structure WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS (wdfdevice.h)

[S’applique à KMDF et UMDF]

La structure WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS contient des informations fournies par le pilote que l’infrastructure utilise lorsqu’un appareil est inactif et que le système est à l’état de fonctionnement du système (S0).

Syntaxe

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;

Membres

Size

Taille, en octets, de cette structure.

IdleCaps

Énumérateur de type WDF_POWER_POLICY_S0_IDLE_CAPABILITIES qui identifie la capacité de l’appareil à se réveiller après avoir été configuré à un état d’alimentation faible, tandis que le système reste dans son état de fonctionnement (S0).

DxState

Énumérateur de type DEVICE_POWER_STATE qui identifie l’état d’alimentation faible de l’appareil que l’appareil entrera après la fin du délai d’inactivité. DEVICE_POWER_STATE valeurs sont définies dans wdm.h.

IdleTimeout

Durée pendant laquelle l’appareil reste inactif, en millisecondes, avant que l’infrastructure ne le place dans l’état de faible consommation d’énergie fourni par DxState. Pour utiliser la valeur de délai d’inactivité par défaut de l’infrastructure, spécifiez IdleTimeoutDefaultValue. Pour plus d’informations sur le moment où l’infrastructure considère l’appareil comme inactif, consultez Prise en charge de l’arrêt inactif.

UserControlOfIdleSettings

Énumérateur WDF_POWER_POLICY_S0_IDLE_USER_CONTROL qui indique si les utilisateurs peuvent modifier les paramètres d’inactivité de l’appareil.

Enabled

Énumérateur de type WDF_TRI_STATE qui indique si l’appareil sera mis hors tension s’il reste inactif et pendant que l’alimentation du système est à S0. Ce membre peut avoir l’une des valeurs suivantes :

WdfTrue : la mise sous tension est activée.

WdfFalse : la mise hors tension est désactivée.

WdfUseDefault : la mise hors tension est initialement activée par défaut ; mais si le membre UserControlOfIdleSettings est défini sur IdleAllowUserControl, le paramètre ou le fichier INF du pilote de l’utilisateur remplace la valeur initiale.

Si la mise hors tension est activée, l’appareil dispose d’une fonctionnalité de mise en éveil et que la valeur du délai d’inactivité expire, l’infrastructure appelle la fonction de rappel EvtDeviceArmWakeFromS0 du pilote avant que l’appareil ne passe à un état de faible consommation.

PowerUpIdleDeviceOnSystemWake

Énumérateur de type WDF_TRI_STATE qui indique si l’appareil retourne à son état de fonctionnement (D0) lorsque le système revient à son état de fonctionnement (S0). Ce membre est valide uniquement si le pilote définit le membre IdleCaps sur IdleCannotWakeFromS0. Le membre PowerUpIdleDeviceOnSystemWake peut avoir l’une des valeurs suivantes :

WdfTrue : si l’appareil et le système sont à faible consommation d’énergie, l’appareil revient à son état de fonctionnement lorsque le système revient à son état de fonctionnement.

WdfFalse : si l’appareil et le système sont à faible consommation d’énergie, l’appareil reste à l’état de faible consommation lorsque le système revient à son état de fonctionnement.

WdfUseDefault : valeur par défaut que le framework utilise si le pilote ne définit pas une autre valeur. Cette valeur a la même signification que WdfFalse.

Si le membre PowerUpIdleDeviceOnSystemWake est défini sur WdfFalse ou WdfUseDefault, l’appareil ne retourne à son état de fonctionnement que lorsque le logiciel accède à l’appareil, par exemple lorsqu’une application envoie une demande d’E/S à l’appareil. Pour plus d’informations, consultez Un appareil retourne à son état de fonctionnement.

Le membre PowerUpIdleDeviceOnSystemWake est disponible dans les versions 1.9 et ultérieures de KMDF, et à partir de la version 2.0 d’UMDF.

IdleTimeoutType

Énumérateur de type WDF_POWER_POLICY_IDLE_TIMEOUT_TYPE qui indique comment le membre IdleTimeout est utilisé.

Le membre IdleTimeoutType est disponible dans la version 1.11 et les versions ultérieures de KMDF, et à partir de la version 2.0 d’UMDF. Pour plus d’informations, consultez Remarques.

ExcludeD3Cold

Énumérateur WDF_TRI_STATE qui indique si l’état d’alimentation D3cold doit être un choix autorisé pour l’état de faible consommation que l’appareil entrera à l’expiration du délai d’inactivité. Le membre ExcludeD3Cold peut avoir l’une des valeurs suivantes :

WdfTrue : l’infrastructure déplace un appareil vers un état D de faible consommation à l’expiration du délai d’inactivité. Si cet état D est D3, l’appareil sera déplacé vers D3hot. Si ExcludeD3Cold est défini sur WdfTrue, aucune autre transition de D3hot vers D3cold ne sera autorisée.

WdfFalse : l’appareil peut entrer dans l’état d’alimentation D3cold à l’expiration du délai d’inactivité, si tous les critères suivants sont remplis :

  • Le membre DxState de cette structure spécifie PowerDeviceD3 ou PowerDeviceMaximum.
  • Le microprogramme ACPI indique que l’appareil prend en charge l’état d’alimentation D3cold.
  • Si le pilote a spécifié IdleCanWakeFromS0 ou IdleUsbSelectiveSuspend dans le membre IdleCaps de cette structure, l’appareil peut répondre à un événement de mise en éveil externe alors qu’il est dans l’état d’alimentation D3cold. Sinon, cette exigence ne s’applique pas.
WdfUseDefault : l’infrastructure examine DDInstall. Section HW du fichier INF du pilote. Si les lignes suivantes sont présentes, cette valeur a la même signification que WdfFalse :
Include = machine.inf
Needs = PciD3ColdSupported
Sinon, cette valeur a la même signification que WdfTrue.

Le membre ExcludeD3Cold est disponible à partir de KMDF version 1.11, ainsi qu’à partir de la version 2.0 d’UMDF, et est ignoré dans les systèmes d’exploitation antérieurs à Windows 8. Pour plus d’informations, consultez Remarques.

Remarques

La structure WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS est utilisée comme entrée dans WdfDeviceAssignS0IdleSettings.

La première fois qu’un pilote appelle WdfDeviceAssignS0IdleSettings, les actions suivantes se produisent :

  • L’infrastructure stocke les valeurs de tous les membres de WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS structure.
  • Si le membre UserControlOfIdleSettings est défini sur IdleAllowUserControl et si le membre Enabled a la valeur WdfUseDefault, l’infrastructure lit le Registre pour savoir si l’utilisateur a activé la mise hors tension de l’appareil lorsqu’il est inactif.
Lors des appels suivants à WdfDeviceAssignS0IdleSettings, l’infrastructure stocke uniquement les valeurs des membres DxState, IdleTimeout et Enabled . En outre, dans KMDF 1.9 et les versions antérieures, l’infrastructure stocke la valeur du membre IdleCaps, sauf si la valeur est IdleUsbSelectiveSuspend. Par conséquent, le pilote doit utiliser les règles suivantes :
  • Si le pilote spécifie IdleUsbSelectiveSuspend pour la valeur du membre IdleCaps , il doit le faire la première fois qu’il appelle WdfDeviceAssignS0IdleSettings.
  • Si le pilote spécifie IdleCanWakeFromS0 ou IdleCannotWakeFromS0 la première fois qu’il appelle WdfDeviceAssignS0IdleSettings, il peut ensuite appeler WdfDeviceAssignS0IdleSettings à nouveau pour modifier cette valeur (mais il ne peut pas modifier la valeur en IdleUsbSelectiveSuspend).

À partir de KMDF 1.11 et UMDF 2.0, un pilote KMDF peut basculer entre IdleUsbSelectiveSuspend et IdleCannotWakeFromS0 à tout moment.

À partir de Windows 8, la définition du membre IdleTimeoutType sur SystemManagedIdleTimeout ou SystemManagedIdleTimeoutWithHint entraîne l’inscription de l’infrastructure auprès de l’infrastructure de gestion de l’alimentation (PoFx).

Si le pilote implémente la prise en charge de l’état d’alimentation fonctionnel pour un appareil à plusieurs composants, le pilote doit définir IdleTimeout surDriverManagedIdleTimeout ou ne pas appeler WdfDeviceAssignS0IdleSettings du tout.

Pour plus d’informations, consultez Prise en charge des états d’alimentation fonctionnels et Vue d’ensemble de l’infrastructure de gestion de l’alimentation.

Les règles suivantes s’appliquent à la valeur que vous spécifiez pour le membre DxState :

  • La valeur ne peut pas être PowerDeviceD0.
  • Pour les périphériques USB, la valeur ne peut pas être PowerDeviceD0 ou PowerDeviceD3.
  • Si vous spécifiez PowerDeviceMaximum, l’infrastructure utilise la valeur du pilote du bus de l’appareil fourni dans le membre DeviceWake de sa structure WDF_DEVICE_POWER_CAPABILITIES .
  • Si la valeur du membre IdleCaps est IdleCanWakeFromS0, vous ne pouvez pas spécifier un état d’alimentation de l’appareil inférieur à l’état d’alimentation de l’appareil dans le membre DeviceWake de la structure WDF_DEVICE_POWER_CAPABILITIES du pilote de bus. (En d’autres termes, si la valeur DeviceWake du pilote de bus est PowerDeviceD2, la valeur DxState de votre pilote de fonction ne peut pas être PowerDeviceD3.)
Dans les systèmes d’exploitation antérieurs à Windows 8, l’état d’alimentation D3 signifie que l’appareil est à faible consommation d’énergie, mais qu’une partie de l’alimentation du bus est toujours maintenue. À partir de Windows 8, l’ancien état d’alimentation D3 est appelé D3hot, et un nouvel état d’alimentation (D3cold) est disponible. Un appareil peut entrer dans l’état D3cold lorsque le système est dans son état de fonctionnement (S0) ou dans un état de faible consommation. Lorsqu’un appareil est à l’état d’alimentation D3cold, le bus est inactif et l’appareil doit déclencher son propre signal de veille lorsqu’une action externe (par exemple, le branchement d’un câble réseau) provoque un événement matériel.

À compter de KMDF 1.11 et UMDF 2.0, un appareil qui prend en charge l’arrêt inactif peut utiliser le membre ExcludeD3Cold de cette structure pour spécifier si l’état d’alimentation D3cold doit être un choix autorisé pour l’état d’alimentation faible de l’appareil que l’appareil entrera après la fin du délai d’inactivité.

Pour plus d’informations sur les entrées de Registre qui contrôlent les capacités d’inactivité d’un appareil, consultez Contrôle utilisateur du comportement d’inactivité et de veille des appareils.

Pour initialiser sa structure WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS , votre pilote doit appeler WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_INIT.

Configuration requise

Condition requise Valeur
Version KMDF minimale 1.0
Version UMDF minimale 2.0
En-tête wdfdevice.h (include Wdf.h)