Freigeben über


KeRevertToUserAffinityThreadEx-Funktion (wdm.h)

Die KeRevertToUserAffinityThreadEx-Routine stellt die vorherige Affinität des aktuellen Threads wieder her.

Syntax

void KeRevertToUserAffinityThreadEx(
  [in] KAFFINITY Affinity
);

Parameter

[in] Affinity

Eine Variable vom Typ KAFFINITY, die die neue Systemaffinität des aktuellen Threads angibt. Legen Sie diesen Parameter auf den Wert fest, der von einem vorherigen Aufruf der KeSetSystemAffinityThreadEx-Routine zurückgegeben wurde.

Rückgabewert

Keine

Bemerkungen

KeRevertToUserAffinityThreadEx ändert die Affinität des aktuellen Threads. Der Affinitätswert ist eine Maske, die eine Gruppe von Prozessoren identifiziert, auf denen der Thread ausgeführt werden kann. Bei erfolgreicher Ausführung plant die Routine die Ausführung des Threads auf einem Prozessor in diesem Satz.

Wenn der Affinity-Wert ungleich null ist, legt KeRevertToUserAffinityThreadEx die Affinitätsmaske des Threads auf den Affinitätswert fest. Wenn der Affinity-Wert null ist, stellt KeRevertToUserAffinityThreadEx die ursprüngliche Benutzeraffinitätsmaske des Threads wieder her. Diese ursprüngliche Benutzeraffinitätsmaske wurde durch einen vorherigen Aufruf von KeSetSystemAffinityThreadEx im Threadobjekt gespeichert. Ein Aufruf von KeRevertToUserAffinityThreadEx hat keine Auswirkung, es sei denn, ihm wird ein Aufruf von KeSetSystemAffinityThreadEx vorangestellt.

Wenn der Affinity-Wert ungleich null ist, ändert die Routine die Affinitätsmaske des aktuellen Threads nur dann in den Affinitätswert , wenn beide der folgenden Werte zutreffen:

  • Der Affinity-Wert ist gültig (d. a. es werden nur Maskbits festgelegt, die logischen Prozessoren entsprechen).
  • Mindestens einer der Prozessoren, der im Affinitätswert angegeben ist, ist aktiv.
Wenn eine dieser Bedingungen nicht erfüllt ist, hat der Aufruf von KeRevertToUserAffinityThreadEx keine Auswirkung.

Windows 7 und höhere Versionen von Windows unterstützen Prozessorgruppen. Treiber, die für die Verarbeitung von Informationen zu Prozessorgruppen konzipiert sind, sollten die KeRevertToUserGroupAffinityThread-Routine verwenden, die eine Prozessorgruppe angibt, anstelle von KeRevertToUserAffinityThreadEx, was nicht der Fall ist. Die Implementierung von KeRevertToUserAffinityThreadEx in Windows 7 und höheren Versionen von Windows bietet jedoch Kompatibilität für Treiber, die für frühere Versionen von Windows geschrieben wurden, die keine Prozessorgruppen unterstützen. In dieser Implementierung ist ein Affinitätswert ungleich null eine Affinitätsmaske, die einen Satz logischer Prozessoren in Gruppe 0 angibt, für die der Thread ausgeführt werden kann. Wenn Affinität null ist, wird der Thread auf seine ursprüngliche Benutzermodusgruppennummer und Affinitätsmaske zurückgesetzt.

Wenn KeRevertToUserAffinityThreadEx unter IRQL <= APC_LEVEL aufgerufen wird und der Aufruf erfolgreich ist, wird die neue (revertierte) Affinitätsmaske sofort wirksam. Wenn der Aufruf zurückgegeben wird, wird der aufrufende Thread bereits auf einem Prozessor ausgeführt, der in der neuen Affinitätsmaske angegeben ist. Wenn KeRevertToUserAffinityThreadEx unter IRQL = DISPATCH_LEVEL aufgerufen wird und der Aufruf erfolgreich ist, wird die ausstehende Prozessoränderung zurückgestellt, bis der Aufrufer die IRQL unter DISPATCH_LEVEL herabsenkt.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Verfügbar in Windows Vista und späteren Windows-Versionen.
Zielplattform Universell
Header wdm.h (einschließlich Wdm.h, Ntddk.h, Ntifs.h)
Bibliothek NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL (siehe Abschnitt "Hinweise").
DDI-Complianceregeln HwStorPortProhibitedDIs(storport), PowerIrpDDis(wdm)

Weitere Informationen

KAFFINITY

KeRevertToUserGroupAffinityThread

KeSetSystemAffinityThreadEx