SetProcessAffinityMask-Funktion (winbase.h)

Legt eine Prozessoraffinitätsmaske für die Threads des angegebenen Prozesses fest.

Syntax

BOOL SetProcessAffinityMask(
  [in] HANDLE    hProcess,
  [in] DWORD_PTR dwProcessAffinityMask
);

Parameter

[in] hProcess

Ein Handle für den Prozess, dessen Affinitätsmaske festgelegt werden soll. Dieses Handle muss über das zugriffsrecht PROCESS_SET_INFORMATION verfügen. Weitere Informationen finden Sie unter Prozesssicherheit und Zugriffsrechte.

[in] dwProcessAffinityMask

Die Affinitätsmaske für die Threads des Prozesses.

Auf einem System mit mehr als 64 Prozessoren muss die Affinitätsmaske Prozessoren in einer einzelnen Prozessorgruppe angeben.

Rückgabewert

Wenn die Funktion erfolgreich ist, ist der Rückgabewert ungleich Null.

Wenn die Funktion fehlerhaft ist, ist der Rückgabewert null. Um erweiterte Fehlerinformationen zu erhalten, rufen Sie GetLastError auf.

Wenn die Prozessaffinitätsmaske einen Prozessor anfordert, der nicht im System konfiguriert ist, wird der letzte Fehlercode ERROR_INVALID_PARAMETER.

Wenn der aufrufende Prozess auf einem System mit mehr als 64 Prozessoren Threads in mehr als einer Prozessorgruppe enthält, wird der letzte Fehlercode ERROR_INVALID_PARAMETER.

Hinweise

Eine Prozessaffinitätsmaske ist ein Bitvektor, in dem jedes Bit einen logischen Prozessor darstellt, auf dem die Threads des Prozesses ausgeführt werden dürfen. Der Wert der Prozessaffinitätsmaske muss eine Teilmenge der Werte der Systemaffinitätsmaske sein, die von der GetProcessAffinityMask-Funktion abgerufen werden. Ein Prozess darf nur auf den Prozessoren ausgeführt werden, die in einem System konfiguriert sind. Daher kann die Prozessaffinitätsmaske kein 1 Bit für einen Prozessor angeben, wenn die Systemaffinitätsmaske ein 0 Bit für diesen Prozessor angibt.

Die Prozessaffinität wird von jedem untergeordneten Prozess oder neu instanziierten lokalen Prozess geerbt.

Rufen Sie SetProcessAffinityMask nicht in einer DLL auf, die möglicherweise von anderen Prozessen als Ihrem eigenen aufgerufen wird.

Auf einem System mit mehr als 64 Prozessoren kann die SetProcessAffinityMask-Funktion verwendet werden, um die Prozessaffinitätsmaske nur für Prozesse mit Threads in einer einzelnen Prozessorgruppe festzulegen. Verwenden Sie die SetThreadAffinityMask-Funktion , um die Affinitätsmaske für einzelne Threads in mehreren Gruppen festzulegen. Dadurch wird die Gruppenzuweisung des Prozesses effektiv geändert.

Ab Windows 11 und Windows Server 2022 umfassen auf einem System mit mehr als 64 Prozessoren standardmäßig Prozess- und Threadaffinitäten alle Prozessoren im System, und das über alle Prozessorgruppen hinweg. Anstatt immer fehlschlagen zu müssen, wenn der aufrufende Prozess Threads in mehr als einer Prozessorgruppe enthält, schlägt die SetProcessAffinityMask-Funktion fehl (gibt null mit ERROR_INVALID_PARAMETER letzten Fehlercode zurück), wenn der Prozess explizit die Affinität eines oder mehrerer seiner Threads außerhalb der primären Gruppe des Prozesses festgelegt hatte.

Anforderungen

   
Unterstützte Mindestversion (Client) Windows XP [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile winbase.h (einschließlich Windows.h)
Bibliothek Kernel32.lib
DLL Kernel32.dll

Siehe auch

CreateProcess

GetProcessAffinityMask

Mehrere Prozessoren

Prozess- und Threadfunktionen

Prozesse

Prozessorgruppen

SetThreadAffinityMask