PO_FX_COMPONENT_V2 structure (wdm.h)

La structure PO_FX_COMPONENT décrit les attributs d’état d’alimentation d’un composant d’un appareil.

Syntaxe

typedef struct _PO_FX_COMPONENT_V2 {
  GUID                        Id;
  ULONGLONG                   Flags;
  ULONG                       DeepestWakeableIdleState;
  ULONG                       IdleStateCount;
  PPO_FX_COMPONENT_IDLE_STATE IdleStates;
  ULONG                       ProviderCount;
  PULONG                      Providers;
} PO_FX_COMPONENT_V2, *PPO_FX_COMPONENT_V2;

Membres

Id

ID de composant qui identifie de manière unique ce composant par rapport aux autres composants de l’appareil. Le pilote doit spécifier une valeur différente de zéro pour ce membre si l’infrastructure de gestion de l’alimentation (PoFx) nécessite un ID de composant pour distinguer ce composant d’autres composants similaires dans le même appareil. Ce membre est facultatif. Si ce membre n’est pas utilisé, il doit être défini sur tous les zéros.

Flags

Ce membre peut être défini sur le bit d’indicateur suivant : PO_FX_COMPONENT_FLAG_F0_ON_DX. Pour plus d'informations, consultez la section Notes.

DeepestWakeableIdleState

Index de l’état Fx le plus profond à partir duquel le composant peut sortir. Spécifiez 0 pour F0, 1 pour F1, etc. Cet index doit être inférieur à IdleStateCount.

IdleStateCount

Nombre d’éléments dans le tableau pointés par le membre IdleStates . En outre, ce membre spécifie le nombre d’états d’alimentation Fx pris en charge par le composant. Un composant doit prendre en charge au moins un état Fx (F0).

IdleStates

Pointeur vers un tableau PO_FX_COMPONENT_IDLE_STATE . La longueur de ce tableau est spécifiée par le membre IdleStateCount . Chaque élément de tableau spécifie les attributs d’un état d’alimentation Fx pris en charge par le composant. L’élément 0 décrit F0, l’élément 1 décrit F1, et ainsi de suite.

ProviderCount

Valeur qui spécifie le nombre de composants dont dépend ce composant. Pour plus d’informations, consultez Dépendances de composants sous Remarques .

Providers

Pointeur vers un tableau d’index de composants dont dépend ce composant. Pour plus d’informations, consultez Dépendances de composants sous Remarques .

Remarques

Lorsqu’un pilote de périphérique inscrit un appareil auprès de PoFx, il fournit une structure de PO_FX_DEVICE qui contient les informations d’inscription. Cette structure contient un tableau de structures PO_FX_COMPONENT . Les éléments de ce tableau décrivent les attributs de puissance des composants individuels de l’appareil. PoFx utilise les informations de ce tableau pour gérer les paramètres d’alimentation de ces composants.

Le membre Id contient un ID de composant que PoFx peut utiliser pour identifier un composant de manière unique. Ne confondez pas l’ID du composant avec l’index du composant, qu’une routine telle que PoFxActivateComponent utilise pour identifier un composant dans un appareil inscrit. Un index de composant est un index dans le tableau Components de la structure PO_FX_DEVICE que le pilote de périphérique a utilisé pour inscrire l’appareil auprès de PoFx. Si le tableau Components contient N éléments, les index de composant sont des valeurs entières comprises entre 0 et N-1. En revanche, un ID de composant est une valeur GUID.

Le membre Flags peut être défini sur la valeur PO_FX_COMPONENT_FLAG_F0_ON_DX si le pilote a spécifié la prise en charge de PO_FX_VERSION_V2 lors de l’inscription auprès de PoFx (autrement dit, pendant l’appel à la routine PoFxRegisterDevice , le pilote a spécifié la valeur PO_FX_VERSION_V2 pour le membre Version de la structure PO_FX_DEVICE qui a été passée au paramètre Device ). Si l’indicateur PO_FX_COMPONENT_FLAG_F0_ON_DX est spécifié, PoFx place le composant dans l’état d’alimentation F0 pendant les transitions Dx et pour les irps d’attente/éveil. Avant de distribuer un IRP Dx ou un IRP d’attente/veille à la pile des appareils (quel que soit l’événement qui se produit en premier), le gestionnaire d’alimentation fait passer le composant à l’état F0. Le composant est conservé en F0 jusqu’à ce que l’IRP de veille/attente soit annulé ou terminé, ou que l’IRP Dx soit terminé et que le pilote ait appelé la routine PoFxReportDevicePoweredOn (quel que soit l’événement qui se produit en dernier).

Dépendances de composants

PoFx prend en charge les dépendances de composants logiques au sein d’un appareil (mais pas sur différents appareils). Lors de l’inscription de l’appareil pour chaque composant, le pilote peut fournir un nombre (le membre ProviderCount ) et un tableau d’index de composant (le membre Providers ) dont dépend ce composant ; ces fournisseurs sont appelés fournisseurs. PoFx garantit que le composant ne sera pas actif tant que tous ses fournisseurs ne seront pas actifs.

Les dépendances de composant forment un graphique dirigé où une arête pointe d’un composant dépendant vers un fournisseur et représente une dépendance. Lors de l’inscription de l’appareil, PoFx valide les graphe des dépendances : les cycles et les arêtes répétées ne sont pas autorisés et la profondeur du graphique pour le parcours de recherche de profondeur d’abord ne peut pas dépasser quatre. PoFx définit également le nombre de références actives des composants en fonction de la graphe des dépendances ; autrement dit, le nombre de références actives de chaque fournisseur est incrémenté une fois pour chaque composant qui en dépend.

Pendant l’activation du composant, PoFx active d’abord tous les fournisseurs de manière asynchrone. Une fois qu’un composant est actif, PoFx vérifie chaque composant dépendant et poursuit son activation si nécessaire.

Lorsque le composant passe à l’état inactif, PoFx commence par rendre les composants dépendants inactifs. Une fois que le pilote a terminé l’opération ComponentIdleConditionCallback et que le plug-in d’extension de plateforme (PEP) est averti que le composant est inactif, PoFx traverse de manière récursive l’graphe des dépendances dans le parcours large d’abord et inactif de manière asynchrone chaque fournisseur.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Pris en charge à partir de Windows 8.
En-tête wdm.h (inclure Wudfwdm.h)

Voir aussi

Gestion de l’alimentation au niveau des composants

PO_FX_COMPONENT_IDLE_STATE

PO_FX_DEVICE