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.
Si l’une de ces conditions n’est pas remplie, l’appel à KeRevertToUserAffinityThreadEx n’a aucun effet.

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)

Voir aussi

KAFFINITY

KeRevertToUserGroupAffinityThread

KeSetSystemAffinityThreadEx