Condividi tramite


Funzione KeSetSystemAffinityThreadEx (wdm.h)

La routine KeSetSystemAffinityThreadEx imposta l'affinità di sistema del thread corrente.

Sintassi

KAFFINITY KeSetSystemAffinityThreadEx(
  [in] KAFFINITY Affinity
);

Parametri

[in] Affinity

Variabile tipizzata KAFFINITY che specifica la nuova affinità di sistema del thread corrente.

Valore restituito

KeSetSystemAffinityThreadEx restituisce l'affinità di sistema precedente del thread corrente oppure zero per indicare che non esiste alcuna affinità di sistema precedente.

Commenti

KeSetSystemAffinityThreadEx modifica la maschera di affinità del thread corrente. La maschera di affinità 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.

I chiamanti di KeSetSystemAffinityThreadEx devono salvare il valore restituito e successivamente passare questo valore alla routine KeRevertToUserAffinityThreadEx per ripristinare la maschera di affinità precedente.

In un sistema multiprocessore, una routine driver in modalità kernel eseguita nel contesto di un thread in modalità utente potrebbe dover chiamare KeSetSystemAffinityThreadEx per modificare temporaneamente la maschera di affinità del thread. Prima dell'uscita dalla routine, deve chiamare KeRevertToUserAffinityThreadEx per ripristinare la maschera di affinità del thread al valore originale.

Il termine affinità utente fa riferimento all'affinità originale del thread in modalità utente. L'affinità impostata dal driver in modalità kernel viene definita affinità di sistema. Se una chiamata a KeSetSystemAffinityThreadEx sostituisce l'affinità utente di un thread con un'affinità di sistema, la chiamata restituisce zero. Successivamente, il driver ripristina l'affinità utente chiamando KeRevertToUserAffinityThreadEx e passando questo valore restituito (zero) come valore affinity .

Inoltre, una routine driver in modalità kernel che richiede una maschera di affinità specifica potrebbe chiamare un'altra routine in modalità kernel che richiede una maschera di affinità diversa. Ogni routine può chiamare KeSetSystemAffinityThreadEx per impostare una nuova maschera di affinità e quindi chiamare KeRevertToUserAffinityThreadEx per ripristinare la maschera di affinità precedente prima di restituire.

La routine KeSetSystemAffinityThreadEx modifica la maschera di affinità del thread corrente sul valore affinity solo se entrambe le condizioni seguenti sono vere:

  • Il valore affinity è valido, ovvero vengono impostati solo i bit mask che corrispondono ai processori logici.
  • Almeno uno dei processori specificati nel valore Affinity è attivo.
Se una di queste condizioni non viene soddisfatta, la chiamata a KeSetSystemAffinityThreadEx non ha alcun effetto.

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 KeSetSystemGroupAffinityThread , che specifica un gruppo di processori, anziché KeSetSystemAffinityThreadEx, che non lo fa. Tuttavia, l'implementazione di KeSetSystemAffinityThreadEx in Windows 7 e versioni successive di Windows offre la compatibilità per i driver scritti per le versioni precedenti di Windows, che non supportano i gruppi di processori. In questa implementazione KeSetSystemAffinityThreadEx assegna il thread al gruppo 0 e usa la maschera di affinità per specificare un set di processori logici in questo gruppo in cui il thread può essere eseguito. La routine restituisce la maschera di affinità relativa al gruppo precedente, ma non il gruppo precedente.

Se KeSetSystemAffinityThreadEx viene chiamato in IRQL <= APC_LEVEL e la chiamata ha esito positivo, la nuova maschera di affinità diventa effettiva immediatamente. Al termine della chiamata, il thread chiamante è già in esecuzione in un processore specificato nella nuova maschera di affinità. Se KeSetSystemAffinityThreadEx viene chiamato in IRQL = DISPATCH_LEVEL e la chiamata ha esito positivo, la modifica del processore in sospeso viene posticipata fino a quando il chiamante non abbassa irQL sotto DISPATCH_LEVEL.

Requisiti

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).

Vedi anche

KAFFINITY

KeRevertToUserAffinityThreadEx

KeSetSystemAffinityThread

KeSetSystemGroupAffinityThread