Fonction KeRevertToUserAffinityThreadEx (wdm.h)
La routine KeRevertToUserAffinityThreadEx restaure l’affinité précédente du thread actuel.
Syntaxe
void KeRevertToUserAffinityThreadEx(
[in] KAFFINITY Affinity
);
Paramètres
[in] Affinity
Variable de type KAFFINITY 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 .
Valeur de retour
None
Remarques
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. En cas de réussite, la routine planifie l’exécution du thread sur un processeur de cet ensemble.
Si la valeur Affinity est différente de zéro, KeRevertToUserAffinityThreadEx définit le masque d’affinité du thread sur la valeur Affinity . Si la valeur affinity 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 Affinity est différente de zéro, la routine remplace le masque d’affinité du thread actif par la valeur Affinity uniquement si les deux éléments suivants sont vrais :
- La valeur Affinity 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 actif.
Windows 7 et versions ultérieures de Windows prennent en charge les groupes de processeurs. 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 n’est pas le cas. Toutefois, l’implémentation de KeRevertToUserAffinityThreadEx dans Windows 7 et les versions ultérieures de Windows fournit la compatibilité pour les pilotes qui ont été é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é différente de zéro 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 l’affinité est égale à zéro, le thread revient à son numéro de groupe en mode utilisateur d’origine et à son masque d’affinité.
Si KeRevertToUserAffinityThreadEx est appelé à 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é au niveau IRQL = DISPATCH_LEVEL et que l’appel réussit, le changement de processeur en attente est différé jusqu’à ce que l’appelant abaisse l’IRQL sous DISPATCH_LEVEL.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Disponible dans Windows Vista et les versions plus récentes de Windows. |
Plateforme cible | Universal |
En-tête | wdm.h (inclure 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) |