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.
[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
Geräteleistungsstatusverwaltung