PoFxIssueComponentPerfStateChangeMultiple-Funktion (wdm.h)

Die PoFxIssueComponentPerfStateChangeMultiple-Routine sendet eine Anforderung, um die Leistungszustände in mehreren Leistungsstatussätzen gleichzeitig für eine Gerätekomponente zu ändern.

Syntax

void PoFxIssueComponentPerfStateChangeMultiple(
  [in] POHANDLE                   Handle,
  [in] ULONG                      Flags,
  [in] ULONG                      Component,
  [in] ULONG                      PerfChangesCount,
  [in] PO_FX_PERF_STATE_CHANGE [] PerfChanges,
  [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 Vorgangs zur Änderung des Leistungszustands ändern. Legen Sie diesen Member 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
Stellen Sie die Bedingungsänderung synchron fest. Wenn dieses Flag festgelegt ist, gibt die Routine, die die Bedingungsänderung anfordert, die Steuerung 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 bei IRQL < DISPATCH_LEVEL ausgeführt wird.
PO_FX_FLAG_ASYNC_ONLY
0x2
Machen Sie die Bedingungsänderung vollständig asynchron. 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 anfordet, 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 in das Array Components 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] PerfChangesCount

Die Anzahl der Leistungsstatusänderungsanforderungen, die im PerfChanges-Array enthalten sind.

[in] PerfChanges

Das erste Element in einem Array von PO_FX_PERF_STATE_CHANGE Strukturen, die die Leistungszustände darstellen, zu denen der Treiber wechseln möchte. Jedes Arrayelement stellt eine einzelne Anforderung zur Änderung des Leistungszustands dar.

[in] Context

Ein Zeiger auf den Kontext für die Rückrufroutine "ComponentPerfStateCallback ". Dieser Parameter ist optional. Es 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

Ein Treiber ruft PoFxIssueComponentPerfStateChangeMultiple auf. Das Power Management Framework (PoFx) fordert das Plattformerweiterungs-Plug-In (PEP) an, um die Leistungsstatussätze der Komponente in den angegebenen Leistungszuständen zu platzieren. Diese Routine kann sowohl mit diskreten als auch mit bereichsbasierten Typen von Leistungszustandssätzen verwendet werden. Weitere Informationen zu diskreten und bereichsbasierten Leistungsstatussätzen finden Sie unter PO_FX_PERF_STATE_TYPE.

Wenn Flags = PO_FX_FLAG_BLOCKING, ist der PoFxIssueComponentPerfStateChangeMultiple-Aufruf synchron. In diesem Fall wartet PoFxIssueComponentPerfStateChangeMultiple 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 Leistungsstatusänderung der Komponente abgeschlossen ist. Dieser Rückruf erfolgt im selben Thread wie der Aufruf von PoFxIssueComponentPerfStateChangeMultiple, und PoFxIssueComponentPerfStateChangeMultiple gibt nur zurück, nachdem der ComponentPerfStateCallback-Rückruf zurückgegeben wurde.

Wenn Flags = PO_FX_FLAG_ASYNC_ONLY, ist der PoFxIssueComponentPerfStateChangeMultiple-Aufruf asynchron. In diesem Fall plant PoFxIssueComponentPerfStateChangeMultiple , dass die ComponentPerfStateCallback-Routine in einem anderen Thread auftritt, und gibt dann zurück, ohne auf den Rückruf zu warten. Der Rückruf kann vor oder nach der Rückgabe von PoFxIssueComponentPerfStateChangeMultiple 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 PoFxIssueComponentPerfStateChangeMultiple-Aufruf synchron oder asynchron ist. In diesem Fall entscheidet PoFx die Synchronisierung des Aufrufs basierend darauf, ob pep eine synchrone oder asynchrone Anforderung verwendet, um die Leistungszustandsänderung an der Komponente auszustellen.

Wenn Flags = PO_FX_FLAG_ASYNC_ONLY oder keine Flags übergeben werden, erfordert diese Routine einen 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 Synchronisierung des Aufrufs. Da der PEP möglicherweise die Anforderung zum Ändern der Leistungszustände verweigert, muss der Treiber warten, bis er den Rückruf empfängt, bevor er die Leistungszustände auf die Hardware übergibt.

Nur ein einzelner Aufruf der PoFxIssueComponentPerfStateChangeMultiple-Routine ist gleichzeitig pro Komponente zulässig, unabhängig davon, ob der Aufruf synchron oder asynchron ist. Nach dem Ausgeben einer Anforderung zur Änderung des Leistungszustands muss der Treiber warten, bis der ComponentPerfStateCallback empfangen wird, bevor er diese Routine erneut aufruft, auch wenn die Anforderung einen anderen Leistungsstatussatz umfasst. Wenn diese Routine erneut aufgerufen wird, bevor sie wartet, bis der ComponentPerfStateCallback empfangen wird, wird eine Fehlerüberprüfung durchgeführt.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Verfügbar ab Windows 10.
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

PoFxIssueComponentPerfStateChange

PoFxRegisterComponentPerfStates