Funzione KeRevertToUserAffinityThreadEx (wdm.h)
La routine KeRevertToUserAffinityThreadEx ripristina l'affinità precedente del thread corrente.
Sintassi
void KeRevertToUserAffinityThreadEx(
[in] KAFFINITY Affinity
);
Parametri
[in] Affinity
Oggetto KAFFINITYvariabile tipizzata che specifica la nuova affinità di sistema del thread corrente. Impostare questo parametro sul valore restituito da una chiamata precedente alla routine KeSetSystemAffinityThreadEx.
Valore restituito
Nessuno
Osservazioni
KeRevertToUserAffinityThreadEx modifica l'affinità del thread corrente. Il valore di affinità è una maschera che identifica un set di processori in cui il thread può essere eseguito. In caso di esito positivo, la routine pianifica l'esecuzione del thread in un processore in questo set.
Se il valore affinity è diverso da zero, KeRevertToUserAffinityThreadEx imposta la maschera di affinità del thread sul valore affinity. Se il valore di affinità è zero, KeRevertToUserAffinityThreadEx ripristina la maschera di affinità utente originale del thread. Questa maschera di affinità utente originale è stata salvata nell'oggetto thread da una chiamata precedente a KeSetSystemAffinityThreadEx. Una chiamata a KeRevertToUserAffinityThreadEx non ha alcun effetto a meno che non sia preceduta da una chiamata a KeSetSystemAffinityThreadEx.
Se il valore di affinità è diverso da zero, la routine modifica la maschera di affinità del thread corrente impostando il valore affinity solo se sono soddisfatte entrambe le condizioni seguenti:
- Il valore affinity è valido, ovvero vengono impostati solo bit mask che corrispondono ai processori logici.
- Almeno uno dei processori specificati nel valore affinity è attivo.
Windows 7 e versioni successive di Windows supportano i gruppi di processori. I driver progettati per gestire le informazioni sui gruppi di processori devono usare la routine KeRevertToUserGroupAffinityThread, che specifica un gruppo di processori, anziché KeRevertToUserAffinityThreadEx, che non lo fa. Tuttavia, l'implementazione di KeRevertToUserAffinityThreadEx in Windows 7 e versioni successive di Windows offre compatibilità per i driver scritti per le versioni precedenti di Windows, che non supportano i gruppi di processori. In questa implementazione, un valore di affinità diverso da zero è una maschera di affinità che specifica un set di processori logici nel gruppo 0 in cui il thread può essere eseguito. Se affinity è zero, il thread torna al numero di gruppo originale in modalità utente e alla maschera di affinità.
Se KeRevertToUserAffinityThreadEx viene chiamato in IRQL <= APC_LEVEL e la chiamata ha esito positivo, la nuova maschera di affinità (ripristinata) diventa effettiva immediatamente. Al termine della chiamata, il thread chiamante è già in esecuzione in un processore specificato nella nuova maschera di affinità. Se viene chiamato il KeRevertToUserAffinityThreadEx in IRQL = DISPATCH_LEVEL e la chiamata ha esito positivo, la modifica del processore in sospeso viene posticipata fino a quando il chiamante non riduce il valore irQL seguente DISPATCH_LEVEL.
Fabbisogno
Requisito | Valore |
---|---|
client minimo supportato | Disponibile in Windows Vista e versioni successive di Windows. |
piattaforma di destinazione | Universale |
intestazione | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
libreria | NtosKrnl.lib |
dll | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL (vedere la sezione Osservazioni). |
regole di conformità DDI | HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm) |