PO_FX_COMPONENT_V2-Struktur (wdm.h)

Die PO_FX_COMPONENT-Struktur beschreibt die Energiezustandsattribute einer Komponente in einem Gerät.

Syntax

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;

Member

Id

Eine Komponenten-ID, die diese Komponente in Bezug auf die anderen Komponenten im Gerät eindeutig identifiziert. Der Treiber sollte einen Wert ungleich Null für dieses Element angeben, wenn das Power Management Framework (PoFx) eine Komponenten-ID erfordert, um diese Komponente von anderen ähnlichen Komponenten auf demselben Gerät zu unterscheiden. Dieses Member ist optional. Wenn dieser Member nicht verwendet wird, muss er auf alle Nullen festgelegt werden.

Flags

Dieses Element kann auf das folgende Flagbit festgelegt werden: PO_FX_COMPONENT_FLAG_F0_ON_DX. Weitere Informationen finden Sie in den Hinweisen.

DeepestWakeableIdleState

Der Index des tiefsten Fx-Zustands, aus dem die Komponente reaktivieren kann. Geben Sie 0 für F0, 1 für F1 usw. an. Dieser Index muss kleiner als IdleStateCount sein.

IdleStateCount

Die Anzahl der Elemente im Array, auf die vom IdleStates-Member verwiesen wird. Darüber hinaus gibt dieser Member die Anzahl von Fx-Energiezuständen an, die von der Komponente unterstützt werden. Eine Komponente muss mindestens einen Fx-Zustand (F0) unterstützen.

IdleStates

Ein Zeiger auf ein PO_FX_COMPONENT_IDLE_STATE Array. Die Länge dieses Arrays wird vom IdleStateCount-Element angegeben. Jedes Arrayelement gibt die Attribute eines Fx-Energiezustands an, der von der Komponente unterstützt wird. Element 0 beschreibt F0, Element 1 beschreibt F1 usw.

ProviderCount

Ein -Wert, der die Anzahl der Komponenten angibt, von denen diese Komponente abhängt. Weitere Informationen finden Sie unter Komponentenabhängigkeiten unter Hinweise.

Providers

Ein Zeiger auf ein Array von Komponentenindizes, von dem diese Komponente abhängt. Weitere Informationen finden Sie unter Komponentenabhängigkeiten unter Hinweise.

Hinweise

Wenn ein Gerätetreiber ein Gerät bei PoFx registriert, stellt der Treiber eine PO_FX_DEVICE-Struktur bereit, die die Registrierungsinformationen enthält. Diese Struktur enthält ein Array von PO_FX_COMPONENT Strukturen. Die Elemente in diesem Array beschreiben die Leistungsattribute der einzelnen Komponenten im Gerät. PoFx verwendet die Informationen in diesem Array, um die Energieeinstellungen dieser Komponenten zu verwalten.

Das Id-Element enthält eine Komponenten-ID, die PoFx verwenden kann, um eine Komponente eindeutig zu identifizieren. Verwechseln Sie die Komponenten-ID nicht mit dem Komponentenindex, den eine Routine wie PoFxActivateComponent verwendet, um eine Komponente in einem registrierten Gerät zu identifizieren. Ein Komponentenindex ist ein Index im Komponentenarray in der PO_FX_DEVICE Struktur, die der Gerätetreiber zum Registrieren des Geräts bei PoFx verwendet hat. Wenn das Komponentenarray N-Elemente enthält, sind Komponentenindizes ganzzahlige Werte im Bereich von 0 bis N–1. Im Gegensatz dazu ist eine Komponenten-ID ein GUID-Wert.

Das Flags-Element kann auf den PO_FX_COMPONENT_FLAG_F0_ON_DX-Wert festgelegt werden, wenn der Treiber unterstützung für PO_FX_VERSION_V2 während der Registrierung bei PoFx angegeben hat (d. a. während des Aufrufs der PoFxRegisterDevice-Routine hat der Treiber den Wert angegeben, der PO_FX_VERSION_V2 für das Versionselement der PO_FX_DEVICE-Struktur , die an den Device-Parameter übergeben wurde). Wenn das flag PO_FX_COMPONENT_FLAG_F0_ON_DX angegeben ist, versetzt PoFx die Komponente während dx-Übergängen und für Wait/Wake-IRPs in den Energiezustand F0. Vor dem Senden einer Dx IRP oder einer Warte-/Aktivierungs-IRP an den Gerätestapel (je nachdem, welches Ereignis zuerst eintritt) übergibt der Power Manager die Komponente in den F0-Zustand. Die Komponente wird in F0 beibehalten, bis die Aktivierungs-/Warte-IRP abgebrochen oder abgeschlossen ist, oder das Dx-IRP abgeschlossen ist und der Treiber die PoFxReportDevicePoweredOn-Routine aufgerufen hat (je nachdem, welches Ereignis zuletzt eintritt).

Komponentenabhängigkeiten

PoFx unterstützt logische Komponentenabhängigkeiten innerhalb eines Geräts (jedoch nicht für verschiedene Geräte). Während der Geräteregistrierung für jede Komponente kann der Treiber eine Zahl ( providerCount-Mitglied ) und ein Array von Komponentenindizes (das Providers-Element ) angeben, von dem diese Komponente abhängt. diese werden als Anbieter bezeichnet. PoFx garantiert, dass die Komponente erst aktiv wird, wenn alle anbieter aktiv sind.

Komponentenabhängigkeiten bilden einen gerichteten Graphen, bei dem ein Rand von einer abhängigen Komponente auf einen Anbieter zeigt und eine Abhängigkeit darstellt. Während der Geräteregistrierung überprüft PoFx die Abhängigkeitsdiagramm: Zyklen und wiederholte Kanten sind nicht zulässig, und die Tiefe des Graphen für den tiefen-ersten Suchdurchlauf darf vier nicht überschreiten. PoFx legt auch die Anzahl der aktiven Verweise der Komponenten entsprechend der Abhängigkeitsdiagramm fest. Das heißt, die Anzahl der aktiven Verweise jedes Anbieters wird für jede Komponente, die davon abhängt, einmal erhöht.

Während der Komponentenaktivierung aktiviert PoFx zunächst asynchron alle Anbieter. Nachdem eine Komponente aktiv ist, überprüft PoFx jede abhängige Komponente und setzt ihre Aktivierung bei Bedarf fort.

Wenn die Komponente in den Leerlaufzustand wechselt, setzt PoFx zunächst die abhängigen Komponenten in den Leerlauf. Nachdem der Treiber componentIdleConditionCallback abgeschlossen hat und das Plattformerweiterungs-Plug-In (PEP) benachrichtigt wird, dass sich die Komponente im Leerlauf befindet, durchläuft PoFx die Abhängigkeitsdiagramm rekursiv im ersten Durchlauf und führt jeden Anbieter asynchron im Leerlauf durch.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Unterstützt ab Windows 8.
Kopfzeile wdm.h (include Wudfwdm.h)

Weitere Informationen

Energieverwaltung auf Komponentenebene

PO_FX_COMPONENT_IDLE_STATE

PO_FX_DEVICE