Freigeben über


KeSetSystemAffinityThreadEx-Funktion (wdm.h)

Die KeSetSystemAffinityThreadEx Routine legt die Systemaffinität des aktuellen Threads fest.

Syntax

KAFFINITY KeSetSystemAffinityThreadEx(
  [in] KAFFINITY Affinity
);

Parameter

[in] Affinity

Eine KAFFINITY-typd Variable, die die neue Systemaffinität des aktuellen Threads angibt.

Rückgabewert

KeSetSystemAffinityThreadEx gibt entweder die vorherige Systemaffinität des aktuellen Threads oder null zurück, um anzugeben, dass keine vorherige Systemaffinität vorhanden war.

Bemerkungen

KeSetSystemAffinityThreadEx ändert die Affinitätsmaske des aktuellen Threads. Die Affinitätsmaske identifiziert eine Reihe von Prozessoren, auf denen der Thread ausgeführt werden kann. Bei erfolgreicher Ausführung plant die Routine den Thread für einen Prozessor in diesem Satz.

Aufrufer von KeSetSystemAffinityThreadEx- sollten den Rückgabewert speichern und später diesen Wert an die KeRevertToUserAffinityThreadEx Routine übergeben, um das vorherige Affinitätsformat wiederherzustellen.

In einem Multiprozessorsystem muss eine Kernelmodustreiberroutine, die im Kontext eines Benutzermodusthreads ausgeführt wird, möglicherweise KeSetSystemAffinityThreadEx- aufrufen, um die Affinitätsmaske des Threads vorübergehend zu ändern. Vor dem Beenden der Routine sollte KeRevertToUserAffinityThreadEx- aufgerufen werden, um die Affinitätsmaske des Threads auf den ursprünglichen Wert wiederherzustellen.

Der Begriff Benutzeraffinität bezieht sich auf die ursprüngliche Affinität des Benutzermodusthreads. Die Affinität, die vom Kernelmodustreiber festgelegt wird, wird als Systemaffinitätbezeichnet. Wenn ein Aufruf von KeSetSystemAffinityThreadEx die Benutzeraffinität eines Threads durch eine Systemaffinität ersetzt, gibt der Aufruf Null zurück. Später stellt der Treiber die Benutzeraffinität wieder her, indem KeRevertToUserAffinityThreadEx- aufgerufen und dieser Rückgabewert (Null) als Affinity- Wert übergeben wird.

Darüber hinaus kann eine Kernelmodustreiberroutine, die eine bestimmte Affinitätsmaske erfordert, eine andere Kernelmodusroutine aufrufen, die eine andere Affinitätsmaske erfordert. Jede Routine kann KeSetSystemAffinityThreadEx- aufrufen, um ein neues Affinitätsformat festzulegen und dann KeRevertToUserAffinityThreadEx- aufzurufen, um das vorherige Affinitätsformat vor der Rückgabe wiederherzustellen.

Die KeSetSystemAffinityThreadEx Routine ändert die Affinitätsmaske des aktuellen Threads in den wert Affinity, wenn beides zutrifft:

  • Der Affinity- Wert ist gültig (d. a. es werden nur Maskenbits festgelegt, die logischen Prozessoren entsprechen).
  • Mindestens einer der Prozessoren, die im Affinity- Wert angegeben ist, ist aktiv.
Wenn eine dieser Bedingungen nicht erfüllt ist, hat der Aufruf von KeSetSystemAffinityThreadEx- 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 KeSetSystemGroupAffinityThread Routine verwenden, die eine Prozessorgruppe anstelle von KeSetSystemAffinityThreadEx-angibt. Die Implementierung von KeSetSystemAffinityThreadEx- 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 weist KeSetSystemAffinityThreadEx den Thread der Gruppe 0 zu und verwendet die Affinitätsmaske, um einen Satz logischer Prozessoren in dieser Gruppe anzugeben, auf dem der Thread ausgeführt werden kann. Die Routine gibt das vorherige gruppenrelative Affinitätsformat zurück, aber nicht die vorherige Gruppe.

Wenn KeSetSystemAffinityThreadEx- bei IRQL-<= APC_LEVEL aufgerufen wird und der Aufruf erfolgreich ist, wird die neue 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 KeSetSystemAffinityThreadEx- bei 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 verringert.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Verfügbar in Windows Vista und höheren Versionen von Windows.
Zielplattform- Universal
Header- wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Library NtosKrnl.lib
DLL- NtosKrnl.exe
IRQL- <= DISPATCH_LEVEL (siehe Abschnitt "Hinweise").

Siehe auch

KAFFINITY-

KeRevertToUserAffinityThreadEx-

KeSetSystemAffinityThread-

KeSetSystemGroupAffinityThread