Partager via


structure PO_FX_DEVICE_V3 (wdm.h)

La structure PO_FX_DEVICE_V3 décrit les attributs d’alimentation d’un appareil à l’infrastructure de gestion de l’alimentation (PoFx), DFx (Directed PoFx)

Syntaxe

typedef struct _PO_FX_DEVICE_V3 {
  ULONG                                      Version;
  ULONGLONG                                  Flags;
  PPO_FX_COMPONENT_ACTIVE_CONDITION_CALLBACK ComponentActiveConditionCallback;
  PPO_FX_COMPONENT_IDLE_CONDITION_CALLBACK   ComponentIdleConditionCallback;
  PPO_FX_COMPONENT_IDLE_STATE_CALLBACK       ComponentIdleStateCallback;
  PPO_FX_DEVICE_POWER_REQUIRED_CALLBACK      DevicePowerRequiredCallback;
  PPO_FX_DEVICE_POWER_NOT_REQUIRED_CALLBACK  DevicePowerNotRequiredCallback;
  PPO_FX_POWER_CONTROL_CALLBACK              PowerControlCallback;
  PPO_FX_DIRECTED_POWER_UP_CALLBACK          DirectedPowerUpCallback;
  PPO_FX_DIRECTED_POWER_DOWN_CALLBACK        DirectedPowerDownCallback;
  ULONG                                      DirectedFxTimeoutInSeconds;
  PVOID                                      DeviceContext;
  ULONG                                      ComponentCount;
  PO_FX_COMPONENT_V2                         Components[ANYSIZE_ARRAY];
} PO_FX_DEVICE_V3, *PPO_FX_DEVICE_V3;

Membres

Version

Numéro de version de cette structure. Si le pilote s’inscrit à la prise en charge de l’alimentation dirigée avec DFx, définissez ce membre sur PO_FX_VERSION_V3.

Flags

Contrôle si les appareils enfants directs et les appareils enfants d’alimentation peuvent refuser l’option Directed PoFx.

Les valeurs d’indicateur possibles sont les suivantes :

Indicateur Description
PO_FX_DEVICE_FLAG_DIRECT_CHILDREN_OPTIONAL Permet aux appareils enfants directs de cet appareil de prendre en charge éventuellement Les PoFx dirigés. S’il n’est pas défini, tous les enfants directs doivent prendre en charge Directed PoFx pour cet appareil afin de prendre entièrement en charge Le PoFx dirigé.
PO_FX_DEVICE_FLAG_POWER_CHILDREN_OPTIONAL Permet aux appareils enfants d’alimentation de cet appareil de prendre en charge éventuellement Directed PoFx. S’il n’est pas fourni, tous les enfants power doivent prendre en charge Directed PoFx pour que cet appareil prend entièrement en charge Directed PoFx.
PO_FX_DEVICE_FLAG_DFX_CHILDREN_OPTIONAL Définit les PO_FX_DEVICE_FLAG_DIRECT_CHILDREN_OPTIONAL et les PO_FX_DEVICE_FLAG_POWER_CHILDREN_OPTIONAL
PO_FX_DEVICE_FLAG_DISABLE_FAST_RESUME Force PoFx à empêcher le S0-IRP d’être terminé avant le D0-IRP à la reprise à partir d’un état système tel que Hibernate ou Veille. Mutuellement exclusif avec PO_FX_DEVICE_FLAG_ENABLE_FAST_RESUME.
PO_FX_DEVICE_FLAG_ENABLE_FAST_RESUME Force PoFx à autoriser le S0-IRP à se terminer avant le D0-IRP lors de la reprise à partir d’un état système tel que Hibernate ou Veille. Mutuellement exclusif avec PO_FX_DEVICE_FLAG_ENABLE_FAST_RESUME.

ComponentActiveConditionCallback

Pointeur vers la routine de rappel ComponentActiveConditionCallback implémentée par le pilote de périphérique.

ComponentIdleConditionCallback

Pointeur vers la routine de rappel ComponentIdleConditionCallback implémentée par le pilote de périphérique.

ComponentIdleStateCallback

Pointeur vers la routine de rappel ComponentIdleStateCallback implémentée par le pilote de périphérique.

DevicePowerRequiredCallback

Pointeur vers la routine de rappel DevicePowerRequiredCallback implémentée par le pilote de périphérique.

DevicePowerNotRequiredCallback

Pointeur vers la routine de rappel DevicePowerNotRequiredCallback implémentée par le pilote de périphérique.

PowerControlCallback

Pointeur vers la routine de rappel PowerControlCallback implémentée par le pilote de périphérique.

DirectedPowerUpCallback

Pointeur vers la PO_FX_DIRECTED_POWER_UP_CALLBACK routine de rappel implémentée par le pilote de périphérique. Un appareil peut fournir uniquement les rappels lors de l’inscription DirectedPower* à PoFx. Il n’a pas besoin d’implémenter le reste des rappels PoFx.

DirectedPowerDownCallback

Pointeur vers la PO_FX_DIRECTED_POWER_DOWN_CALLBACK routine de rappel implémentée par le pilote de périphérique.

DirectedFxTimeoutInSeconds

Fournit un indicateur pour l’infrastructure spécifiant un délai d’attente recommandé en secondes pendant lequel l’appareil doit être inactif après l’activité logicielle n’est plus présente. La valeur par défaut est deux minutes.

DeviceContext

Pointeur vers un contexte d’appareil alloué à l’appelant. Ce pointeur est passé en tant que paramètre à chaque fonction de rappel implémentée par le pilote pointée par cette structure. Le pilote de périphérique utilise ce contexte pour stocker des informations sur l’état d’alimentation actuel de l’appareil. Ce contexte est opaque pour PoFx.

ComponentCount

Nombre d’éléments dans le tableau Composants . En outre, ce membre spécifie le nombre de composants dans l’appareil.

Components[ANYSIZE_ARRAY]

Ce membre est le premier élément d’un tableau d’un ou plusieurs éléments PO_FX_COMPONENT_V2. Si le tableau contient plusieurs éléments, les éléments supplémentaires suivent immédiatement la structure PO_FX_DEVICE_V2 . Le tableau contient un élément pour chaque composant de l’appareil. L’état d’alimentation Fx de chaque composant peut être contrôlé indépendamment des états d’alimentation Fx des autres composants de l’appareil. La constante ANYSIZE_ARRAY est définie sur 1 dans le fichier d’en-tête Ntdef.h.

Remarques

Pour inscrire un appareil auprès de PoFx, un pilote appelle la routine PoFxRegisterDevice et fournit, en tant que paramètre, un pointeur vers une structure PO_FX_DEVICE qui décrit l’appareil. Pour utiliser PoFx mais pas DFx, inscrivez-vous auprès de PoFx en utilisant PO_FX_DEVICE_V2 structure ou PO_FX_DEVICE_V3 structure.

Chaque élément du tableau Composants décrit les attributs d’état d’alimentation d’un composant de l’appareil. Chaque composant de l’appareil est identifié par son index de tableau Composants . Les routines telles que PoFxActivateComponent et PoFxCompleteIdleCondition utilisent l’index de tableau d’un composant pour identifier le composant.

Un pilote de périphérique n’est pas nécessaire pour implémenter les huit routines de rappel. Le pilote peut définir un pointeur de fonction dans la structure PO_FX_DEVICE sur NULL si le pilote n’implémente pas la routine de rappel correspondante. Toutefois, certaines routines de rappel doivent être implémentées. Plus précisément, si un ou plusieurs composants d’un appareil ont plusieurs états Fx, le pilote doit implémenter les routines ComponentIdleStateCallback, ComponentActiveConditionCallback et ComponentIdleConditionCallback . Sinon, l’inscription de l’appareil échoue et PoFxRegisterDevice retourne STATUS_INVALID_PARAMETER.

Si un pilote ne fournit pas l’un des PO_FX_DEVICE_FLAG_DISABLE_FAST_RESUME ou PO_FX_DEVICE_FLAG_ENABLE_FAST_RESUME le système revient à la configuration par défaut de la plateforme. La configuration par défaut est PO_FX_DEVICE_FLAG_ENABLE_FAST_RESUME pour les plateformes x86/x64 et PO_FX_DEVICE_FLAG_DISABLE_FAST_RESUME pour les plateformes ARM32/ARM64. Ces indicateurs sont uniquement respectés pour Win11 22000+ et sont ignorés en mode silencieux pour les versions antérieures. Pour les pilotes WDF, ces indicateurs peuvent être fournis à l’aide du champ PoFxDeviceFlags de WDF_POWER_FRAMEWORK_SETTINGS.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 10 version 1903
En-tête wdm.h

Voir aussi

/windows-hardware/drivers/kernel/introduction-to-the-directed-power-management-framework

ComponentActiveConditionCallback

ComponentIdleConditionCallback

ComponentIdleStateCallback

DevicePowerNotRequiredCallback

DevicePowerRequiredCallback

PO_FX_COMPONENT

PoFxActivateComponent

PoFxCompleteIdleCondition

PoFxRegisterDevice

PowerControlCallback