KeRevertToUserAffinityThreadEx, fonction (wdm.h)
La routine KeRevertToUserAffinityThreadEx restaure l’affinité précédente du thread actuel.
void KeRevertToUserAffinityThreadEx(
[in] KAFFINITY Affinity
);
[in] Affinity
Variable KAFFINITY-typée qui spécifie la nouvelle affinité système du thread actuel. Définissez ce paramètre sur la valeur retournée par un appel précédent à la routine KeSetSystemAffinityThreadEx.
Aucun
KeRevertToUserAffinityThreadEx modifie l’affinité du thread actuel. La valeur d’affinité est un masque qui identifie 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.
Si la valeur d’affinité n’est pas nulle, KeRevertToUserAffinityThreadEx définit le masque d’affinité du thread sur la valeur Affinity. Si la valeur affinité est égale à zéro, KeRevertToUserAffinityThreadEx restaure le masque d’affinité utilisateur d’origine du thread. Ce masque d’affinité utilisateur d’origine a été enregistré dans l’objet thread par un appel précédent à KeSetSystemAffinityThreadEx. Un appel à KeRevertToUserAffinityThreadEx n’a aucun effet, sauf s’il est précédé d’un appel à KeSetSystemAffinityThreadEx.
Si la valeur d’affinité est différente de zéro, la routine remplace le masque d’affinité du thread actuel par la valeur Affinity uniquement si les deux valeurs suivantes sont vraies :
- La valeur Affinité est valide (autrement dit, seuls les bits de masque correspondant aux processeurs logiques sont définis).
- Au moins un des processeurs spécifiés dans la valeur Affinity est active.
Windows 7 et versions ultérieures de groupes de processeurs de prise en charge de Windows. Les pilotes conçus pour gérer des informations sur les groupes de processeurs doivent utiliser la routine KeRevertToUserGroupAffinityThread, qui spécifie un groupe de processeurs, au lieu de KeRevertToUserAffinityThreadEx, ce qui ne le fait pas. Toutefois, l’implémentation de KeRevertToUserAffinityThreadEx dans Windows 7 et versions ultérieures de Windows fournit la compatibilité pour les pilotes écrits pour les versions antérieures de Windows, qui ne prennent pas en charge les groupes de processeurs. Dans cette implémentation, une valeur d’affinité non nulle est un masque d’affinité qui spécifie un ensemble de processeurs logiques dans le groupe 0 sur lequel le thread peut s’exécuter. Si d’affinité est égal à zéro, le thread revient à son numéro de groupe en mode utilisateur d’origine et à son masque d’affinité.
Si KeRevertToUserAffinityThreadEx est appelé au <IRQL = APC_LEVEL et que l’appel réussit, le nouveau masque d’affinité (rétabli) 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 le nouveau masque d’affinité. Si KeRevertToUserAffinityThreadEx 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 diminue l’IRQL inférieur à DISPATCH_LEVEL.
Exigence | Valeur |
---|---|
client minimum pris en charge | Disponible dans Windows Vista et versions ultérieures de Windows. |
plateforme cible | Universel |
d’en-tête | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
bibliothèque | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL (voir la section Remarques). |
règles de conformité DDI | HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm) |