KeRevertToUserGroupAffinityThread, fonction (wdm.h)
La routine KeRevertToUserGroupAffinityThread restaure l’affinité de groupe du thread appelant sur sa valeur d’origine au moment où le thread a été créé.
void KeRevertToUserGroupAffinityThread(
[in] PGROUP_AFFINITY PreviousAffinity
);
[in] PreviousAffinity
Pointeur vers l’affinité de groupe à restaurer. Ce paramètre pointe vers une structure GROUP_AFFINITY qui contient un numéro de groupe et un masque d’affinité. Le masque d’affinité spécifie l’ensemble de processeurs logiques sur utilisant le thread utilisateur.
Aucun
Cette routine modifie le numéro de groupe et le masque d’affinité relative de groupe du thread appelant. Le numéro de groupe et le masque d’affinité identifient un ensemble de processeurs sur lesquels le thread peut s’exécuter. Si elle réussit, la routine planifie l’exécution du thread sur un processeur dans cet ensemble.
Le paramètre PreviousAffinity pointe vers une structure GROUP_AFFINITY qui spécifie le nouveau numéro de groupe (membre groupe) et le masque d’affinité (Masque membre) pour le thread. Si PreviousAffinity ->Mask n’est pas zéro, KeRevertToUserGroupAffinityThread définit le numéro de groupe et le masque d’affinité du thread appelant sur les valeurs de la structure. Si PreviousAffinity->Masque est égal à zéro, la routine restaure le numéro de groupe et le masque d’affinité sur leurs valeurs d’origine au moment où le thread a été initialisé.
Un processus peut avoir une affinité pour plusieurs groupes à la fois. Toutefois, un thread peut être affecté à un seul groupe à tout moment et ce groupe est toujours dans l’affinité du processus du thread.
Un thread peut modifier le groupe auquel il est affecté en appelant la routine KeSetSystemGroupAffinityThread. Après un ou plusieurs appels à KeSetSystemGroupAffinityThread, le thread peut restaurer l’affinité de groupe d’origine qu’il avait lors de la création du thread en appelant KeRevertToUserGroupAffinityThread.
Une fois le thread créé, un appel à KeRevertToUserGroupAffinityThread n’a aucun effet (autrement dit, le numéro de groupe et le masque d’affinité du thread restent inchangés), sauf si le thread appelle d’abord KeSetSystemGroupAffinityThread. Après un appel à KeRevertToUserGroupAffinityThread, un deuxième appel à KeRevertToUserGroupAffinityThread n’a aucun effet, sauf si le thread appelle KeSetSystemGroupAffinityThread.
La routine remplace le numéro de groupe et le masque d’affinité par les valeurs spécifiées dans *PreviousAffinity uniquement si les valeurs suivantes sont vraies :
- Le numéro de groupe est valide.
- Le masque d’affinité est valide (autrement dit, seuls les bits de masque qui correspondent aux processeurs logiques dans le groupe sont définis).
- Au moins un des processeurs spécifiés dans le masque d’affinité est actif.
Une routine associée, KeRevertToUserAffinityThreadEx, modifie le masque d’affinité du thread appelant, mais cette routine, contrairement à KeRevertToUserGroupAffinityThread, n’accepte pas de numéro de groupe comme paramètre d’entrée. Dans Windows 7 et versions ultérieures du système d’exploitation Windows, KeRevertToUserAffinityThreadEx suppose que le masque d’affinité fait référence aux processeurs du groupe 0, qui est compatible avec le comportement de cette routine dans les versions antérieures de Windows qui ne prennent pas en charge les groupes. Ce comportement garantit que les pilotes existants qui appellent KeRevertToUserAffinityThreadEx et qui n’utilisent aucune fonctionnalité orientée groupe ne s’exécutent correctement dans les systèmes multiprocesseurs qui ont deux groupes ou plus. Toutefois, les pilotes qui utilisent toutes les fonctionnalités orientées groupe dans Windows 7 et versions ultérieures du système d’exploitation Windows doivent appeler KeRevertToUserGroupAffinityThread au lieu de KeRevertToUserAffinityThreadEx.
Si KeRevertToUserGroupAffinityThread est appelé au <IRQL = APC_LEVEL et que l’appel réussit, la nouvelle affinité de groupe (rétablie) prend effet immédiatement. Lorsque l’appel est retourné, le thread appelant est déjà en cours d’exécution sur un processeur spécifié dans la nouvelle affinité de groupe. Si KeRevertToUserGroupAffinityThread est appelé à IRQL = DISPATCH_LEVEL et que l’appel réussit, la modification du processeur en attente est différée jusqu’à ce que l’appelant réduise le runtime d’intégration inférieur à DISPATCH_LEVEL.
Exigence | Valeur |
---|---|
client minimum pris en charge | Disponible dans Windows 7 et versions ultérieures de Windows. |
plateforme cible | Universel |
d’en-tête | wdm.h (include Ntddk.h, Wdm.h, Ntddk.h) |
bibliothèque | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL (voir la section Remarques). |