Condividi tramite


Funzione SetProcessAffinityMask (winbase.h)

Imposta una maschera di affinità del processore per i thread del processo specificato.

Sintassi

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

Parametri

[in] hProcess

Handle per il processo la cui maschera di affinità deve essere impostata. Questo handle deve avere il diritto di accesso PROCESS_SET_INFORMATION . Per altre informazioni, vedere Elaborare diritti di sicurezza e accesso.

[in] dwProcessAffinityMask

Maschera di affinità per i thread del processo.

In un sistema con più di 64 processori, la maschera di affinità deve specificare processori in un singolo gruppo di processori.

Valore restituito

Se la funzione ha esito positivo, il valore restituito è diverso da zero.

Se la funzione ha esito negativo, il valore restituito è zero. Per informazioni dettagliate sull'errore, chiamare GetLastError.

Se l'affinità di processo richiede un processore non configurato nel sistema, l'ultimo codice di errore è ERROR_INVALID_PARAMETER.

In un sistema con più di 64 processori, se il processo chiamante contiene thread in più gruppi di processori, l'ultimo codice di errore è ERROR_INVALID_PARAMETER.

Commenti

Una maschera di affinità di processo è un vettore di bit in cui ogni bit rappresenta un processore logico in cui i thread del processo possono essere eseguiti. Il valore della maschera di affinità del processo deve essere un subset dei valori di maschera di affinità di sistema ottenuti dalla funzione GetProcessAffinityMask . Un processo è consentito solo per l'esecuzione nei processori configurati in un sistema. Pertanto, la maschera di affinità di processo non può specificare un bit per un processore quando la maschera di affinità di sistema specifica un bit 0 per tale processore.

L'affinità del processo viene ereditata da qualsiasi processo figlio o da un processo locale appena creato.

Non chiamare SetProcessAffinityMask in una DLL che può essere chiamata da processi diversi da quelli personalizzati.

In un sistema con più di 64 processori, la funzione SetProcessAffinityMask può essere usata per impostare la maschera di affinità di processo solo per i processi con thread in un singolo gruppo di processori. Usare la funzione SetThreadAffinityMask per impostare la maschera di affinità per singoli thread in più gruppi. Ciò modifica in modo efficace l'assegnazione del gruppo del processo.

A partire da Windows 11 e Windows Server 2022, in un sistema con più di 64 processori, processi e affinità di thread si estendono su tutti i processori nel sistema, in tutti i gruppi di processori, per impostazione predefinita. Invece di avere sempre esito negativo nel caso in cui il processo di chiamata contenga thread in più di un gruppo di processori, la funzione SetProcessAffinityMask ha esito negativo (restituendo zero con ERROR_INVALID_PARAMETER ultimo codice di errore) se il processo aveva impostato in modo esplicito l'affinità di uno o più thread all'esterno del gruppo primario del processo.

Requisiti

   
Client minimo supportato Windows XP [app desktop | App UWP]
Server minimo supportato Windows Server 2003 [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione winbase.h (include Windows.h)
Libreria Kernel32.lib
DLL Kernel32.dll

Vedere anche

CreateProcess

GetProcessAffinityMask

Processori multipli

Funzioni di processi e thread

Processi

Gruppi di processori

SetThreadAffinityMask