PoFxIssueComponentPerfStateChange-Funktion (wdm.h)

Die PoFxIssueComponentPerfStateChange-Routine sendet eine Anforderung, um eine Gerätekomponente in einen bestimmten Leistungszustand zu versetzen.

Syntax

void PoFxIssueComponentPerfStateChange(
  [in] POHANDLE                 Handle,
  [in] ULONG                    Flags,
  [in] ULONG                    Component,
  [in] PPO_FX_PERF_STATE_CHANGE PerfChange,
  [in] PVOID                    Context
);

Parameter

[in] Handle

Ein Handle, das die Registrierung des Geräts bei PoFx darstellt. Der Gerätetreiber hat dieses Handle zuvor von der PoFxRegisterDevice-Routine erhalten.

[in] Flags

Die Flags, die das Verhalten des Leistungszustandsänderungsvorgangs ändern. Legen Sie dieses Element auf null oder auf eines der folgenden Flags PO_FX_FLAG_XXX-Bits fest:

Diese beiden Flagbits schließen sich gegenseitig aus. Weitere Informationen finden Sie in den Hinweisen.

Wert Bedeutung
PO_FX_FLAG_BLOCKING
0x1
Legen Sie die Bedingungsänderung synchron fest. Wenn dieses Flag festgelegt ist, gibt die Routine, die die Bedingungsänderung anfordert, die Kontrolle an den aufrufenden Treiber zurück, bis die Komponentenhardware den Übergang zur neuen Bedingung abgeschlossen hat. Dieses Flag kann nur verwendet werden, wenn der Aufrufer unter IRQL < DISPATCH_LEVEL ausgeführt wird.
PO_FX_FLAG_ASYNC_ONLY
0x2
Führen Sie die Bedingungsänderung vollständig asynchron aus. Wenn dieses Flag festgelegt ist, wird die Rückrufroutine des aufrufenden Treibers von einem anderen Thread als dem Thread aufgerufen, in dem die Routine aufgerufen wird, die die Bedingungsänderung anfordert. Daher gibt die Routine, die die Bedingungsänderung anfordert, immer asynchron zurück, ohne auf den Abschluss des Rückrufs zu warten.

[in] Component

Der Index, der die Komponente identifiziert. Dieser Parameter 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, reichen die Komponentenindizes von 0 bis N–1.

[in] PerfChange

Ein Zeiger auf eine PO_FX_PERF_STATE_CHANGE-Struktur , die den neuen Leistungszustand der Komponente darstellt.

[in] Context

Ein Zeiger auf den Kontext für die Rückrufroutine ComponentPerfStateCallback . Dieser Parameter ist optional. Sie wird bereitgestellt, damit ein Treiber- oder Gerätekontext an die Rückrufroutine übergeben werden kann. Wenn dieser Parameter nicht verwendet wird, muss er auf NULL festgelegt werden.

Rückgabewert

Keine

Bemerkungen

Wenn ein Treiber PoFxIssueComponentPerfStateChange aufruft, fordert das Power Management Framework (PoFx) das Plattformerweiterungs-Plug-In (PEP) an, den Leistungszustand der Komponente in den angegebenen Leistungszustand zu versetzen. Diese Routine kann sowohl mit diskreten als auch mit bereichsbasierten Typen von Leistungszustandssätzen verwendet werden. Weitere Informationen zu diskreten und bereichsbasierten Leistungszustandssätzen finden Sie unter PO_FX_PERF_STATE_TYPE.

Wenn Flags = PO_FX_FLAG_BLOCKING, ist der PoFxIssueComponentPerfStateChange-Aufruf synchron. In diesem Fall wartet PoFxIssueComponentPerfStateChange auf die Rückgabe, bis die Komponente den Leistungszustandsübergang abgeschlossen hat. Die ComponentPerfStateCallback-Routine des Treibers wird aufgerufen, um den Treiber darüber zu informieren, dass die Leistungszustandsänderung der Komponente abgeschlossen ist. Dieser Rückruf erfolgt im selben Thread wie der Aufruf von PoFxIssueComponentPerfStateChange, und PoFxIssueComponentPerfStateChange gibt erst zurück, nachdem der ComponentPerfStateCallback-Rückruf zurückgegeben wurde.

Wenn Flags = PO_FX_FLAG_ASYNC_ONLY, ist der PoFxIssueComponentPerfStateChange-Aufruf asynchron. In diesem Fall plant PoFxIssueComponentPerfStateChange das Auftreten der ComponentPerfStateCallback-Routine in einem anderen Thread und gibt dann zurück, ohne auf den Rückruf zu warten. Der Rückruf kann vor oder nach der Rückgabe von PoFxIssueComponentPerfStateChange erfolgen. Der Treiber sollte sich auf die ComponentPerfStateCallback-Routine verlassen, um zu bestimmen, wann die Komponente den Übergang zum neuen Leistungszustand abgeschlossen hat.

Der Treiber kann Flags = 0 festlegen, um anzugeben, dass es nicht wichtig ist, ob der PoFxIssueComponentPerfStateChange-Aufruf synchron oder asynchron ist. In diesem Fall entscheidet PoFx die Synchronität des Aufrufs basierend darauf, ob pep eine synchrone oder asynchrone Anforderung verwendet, um die Leistungszustandsänderung an die Komponente auszusprechen.

Wenn Flags = PO_FX_FLAG_ASYNC_ONLY oder keine Flags übergeben werden, erfordert diese Routine eine IRQL von <= DISPATCH_LEVEL. Wenn Flags = PO_FX_FLAG_BLOCKING, erfordert diese Routine einen IRQL von <= APC_LEVEL.

Diese Funktion führt immer zu einem Aufruf der ComponentPerfStateCallback-Routine , unabhängig von der Synchronität des Aufrufs. Da pep die Anforderung zum Ändern des Leistungszustands ablehnen kann, muss der Treiber warten, bis der Rückruf empfangen wird, bevor er den Leistungszustand an die Hardware committen kann.

Nur ein einzelner Aufruf der PoFxIssueComponentPerfStateChange-Routine ist zu einem Zeitpunkt pro Komponente zulässig, unabhängig davon, ob der Aufruf synchron oder asynchron ist. Nach dem Ausgeben einer Leistungszustandsänderungsanforderung muss der Treiber warten, bis componentPerfStateCallback empfangen wird, bevor er diese Routine erneut aufruft, auch wenn die Anforderung einen anderen Leistungszustandssatz umfasst. Wenn diese Routine erneut aufgerufen wird, bevor gewartet wird, bis das ComponentPerfStateCallback empfangen wird, wird eine Fehlerüberprüfung durchgeführt.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Ab Windows 10 verfügbar.
Zielplattform Universell
Header wdm.h
Bibliothek Ntoskrnl.lib
DLL Ntoskrnl.exe
IRQL <= APC_LEVEL oder <= DISPATCH_LEVEL (siehe Abschnitt "Hinweise")

Weitere Informationen

ComponentPerfStateCallback

Geräteleistungsstatusverwaltung

PO_FX_PERF_STATE_TYPE

PoFxIssueComponentPerfStateChangeMultiple

PoFxRegisterComponentPerfStates