Partager via


Fonction SetProcessAffinityMask (winbase.h)

Définit un masque d’affinité processeur pour les threads du processus spécifié.

Syntaxe

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

Paramètres

[in] hProcess

Handle du processus dont le masque d’affinité doit être défini. Ce handle doit avoir le droit d’accès PROCESS_SET_INFORMATION . Pour plus d’informations, consultez Traiter les droits de sécurité et d’accès.

[in] dwProcessAffinityMask

Masque d’affinité pour les threads du processus.

Sur un système avec plus de 64 processeurs, le masque d’affinité doit spécifier les processeurs dans un seul groupe de processeurs.

Valeur retournée

Si la fonction réussit, la valeur de retour est différente de zéro.

Si la fonction échoue, la valeur de retour est égale à zéro. Pour obtenir des informations détaillées sur l’erreur, appelez GetLastError.

Si le masque d’affinité de processus demande un processeur qui n’est pas configuré dans le système, le dernier code d’erreur est ERROR_INVALID_PARAMETER.

Sur un système avec plus de 64 processeurs, si le processus appelant contient des threads dans plusieurs groupes de processeurs, le dernier code d’erreur est ERROR_INVALID_PARAMETER.

Remarques

Un masque d’affinité de processus est un vecteur de bits dans lequel chaque bit représente un processeur logique sur lequel les threads du processus sont autorisés à s’exécuter. La valeur du masque d’affinité de processus doit être un sous-ensemble des valeurs du masque d’affinité système obtenues par la fonction GetProcessAffinityMask . Un processus n’est autorisé à s’exécuter que sur les processeurs configurés dans un système. Par conséquent, le masque d’affinité de processus ne peut pas spécifier un 1 bit pour un processeur lorsque le masque d’affinité système spécifie un 0 bit pour ce processeur.

L’affinité de processus est héritée par tout processus enfant ou processus local nouvellement instancié.

N’appelez pas SetProcessAffinityMask dans une DLL qui peut être appelée par des processus autres que les vôtres.

Sur un système avec plus de 64 processeurs, la fonction SetProcessAffinityMask peut être utilisée pour définir le masque d’affinité de processus uniquement pour les processus avec des threads dans un seul groupe de processeurs. Utilisez la fonction SetThreadAffinityMask pour définir le masque d’affinité pour des threads individuels dans plusieurs groupes. Cela modifie efficacement l’attribution de groupe du processus.

À compter de Windows 11 et De Windows Server 2022, sur un système avec plus de 64 processeurs, les affinités de processus et de thread s’étendent par défaut à tous les processeurs du système, sur tous les groupes de processeurs. Au lieu de toujours échouer si le processus appelant contient des threads dans plusieurs groupes de processeurs, la fonction SetProcessAffinityMask échoue (renvoyant zéro avec ERROR_INVALID_PARAMETER dernier code d’erreur) si le processus avait explicitement défini l’affinité d’un ou plusieurs de ses threads en dehors du groupe principal du processus.

Configuration requise

   
Client minimal pris en charge Windows XP [applications de bureau | applications UWP]
Serveur minimal pris en charge Windows Server 2003 [applications de bureau | applications UWP]
Plateforme cible Windows
En-tête winbase.h (inclure Windows.h)
Bibliothèque Kernel32.lib
DLL Kernel32.dll

Voir aussi

CreateProcess

GetProcessAffinityMask

Plusieurs processeurs

Fonctions de processus et de thread

Processus

Groupes de processeurs

SetThreadAffinityMask