Freigeben über


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;

Angehörige

Id

Eine Komponenten-ID, die diese Komponente eindeutig in Bezug auf die anderen Komponenten des Geräts 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 Element ist optional. Wenn dieses Element nicht verwendet wird, muss es 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, von dem die Komponente reaktiv werden kann. Geben Sie 0 für F0, 1 für F1 usw. an. Dieser Index muss kleiner als IdleStateCountsein.

IdleStateCount

Die Anzahl der Elemente im Array, auf die durch das IdleStates Member verwiesen wird. Darüber hinaus gibt dieses Mitglied die Anzahl der Fx-Machtzustände an, die die Komponente unterstützt. 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 durch das IdleStateCount Member 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 hängt von dieser Komponente ab. Weitere Informationen finden Sie unter Komponentenabhängigkeiten unter "Hinweise".

Bemerkungen

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 Member enthält eine Komponenten-ID, die PoFx verwenden kann, um eine Komponente eindeutig zu identifizieren. Verwechseln Sie die Komponenten-ID nicht mit dem Komponentenindex, die eine Routine wie PoFxActivateComponent verwendet, um eine Komponente in einem registrierten Gerät zu identifizieren. Ein Komponentenindex ist ein Index im Components Array in der PO_FX_DEVICE Struktur, mit der der Gerätetreiber das Gerät bei PoFx registriert hat. Wenn das Components Array N-Elemente enthält, sind Komponentenindizes ganzzahlige Werte im Bereich 0 bis N-1. Im Gegensatz dazu ist eine Komponenten-ID ein GUID-Wert.

Die Flags Member können auf den PO_FX_COMPONENT_FLAG_F0_ON_DX Wert festgelegt werden, wenn der Treiber während der Registrierung bei PoFx unterstützung für PO_FX_VERSION_V2 angegeben hat (d. a. während des Aufrufs der PoFxRegisterDevice Routine, der Treiber den Wert PO_FX_VERSION_V2 für das Version Member der übergebenen PO_FX_DEVICE Struktur angegeben hat. zum parameter Device). Wenn das PO_FX_COMPONENT_FLAG_F0_ON_DX-Flag angegeben ist, platziert PoFx die Komponente während dx-Übergängen in den F0-Energiezustand und für Wait/Wake IRPs. Vor dem Verteilen eines DX-IRP oder des Wait/Wake-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 das IRP zum Aufwachen/Warten 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 über verschiedene Geräte). Während der Geräteregistrierung für jede Komponente kann der Treiber eine Zahl (das ProviderCount Member) und ein Array von Komponentenindizes (dem Provider Member) angeben, von dem diese Komponente abhängt; diese werden als Anbieterbezeichnet. PoFx garantiert, dass die Komponente erst aktiv wird, wenn alle anbieter aktiv sind.

Komponentenabhängigkeiten bilden ein gerichtetes Diagramm, bei dem ein Rand von einer abhängigen Komponente auf einen Anbieter verweist und eine Abhängigkeit darstellt. Während der Geräteregistrierung überprüft PoFx das Abhängigkeitsdiagramm: Zyklen und wiederholte Ränder sind nicht zulässig, und die Tiefe des Diagramms für den Tiefen-First-Suchdurchlauf darf nicht mehr als vier überschreiten. PoFx legt außerdem die aktive Referenzanzahl der Komponenten gemäß dem Abhängigkeitsdiagramm fest; d. h. die aktive Referenzanzahl jedes Anbieters wird einmal für jede Komponente erhöht, die davon abhängt.

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

Wenn die Komponente in den Leerlaufzustand wechselt, macht PoFx zunächst die abhängigen Komponenten im Leerlauf. Nachdem der Treiber die ComponentIdleConditionCallback abgeschlossen hat und das Plattformerweiterungs-Plug-In (PEP) benachrichtigt wird, dass die Komponente im Leerlauf ist, durchläuft PoFx das Abhängigkeitsdiagramm rekursiv in breadth-first traversal und asynchron im Leerlauf jedes Anbieters.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Wird ab Windows 8 unterstützt.
Header- wdm.h (include Wudfwdm.h)

Siehe auch

Component-Level Power Management-

PO_FX_COMPONENT_IDLE_STATE

PO_FX_DEVICE