Funzione StorPortSetSystemGroupAffinityThread (storport.h)

StorPortSetSystemGroupAffinityThread modifica il numero di gruppo e la maschera di affinità del thread chiamante.

Sintassi

ULONG StorPortSetSystemGroupAffinityThread(
  [in]           PVOID                HwDeviceExtension,
  [in/optional]  PVOID                ThreadContext,
  [in]           PSTOR_GROUP_AFFINITY Affinity,
  [out/optional] PSTOR_GROUP_AFFINITY PreviousAffinity
);

Parametri

[in] HwDeviceExtension

Puntatore all'estensione del dispositivo hardware del miniport.

[in/optional] ThreadContext

Puntatore al contesto del thread ricevuto in una chiamata precedente a StorPortCreateSystemThread.

[in] Affinity

Puntatore a una struttura STOR_GROUP_AFFINITY allocata dal chiamante che specifica il nuovo numero di gruppo e la maschera di affinità relativa al gruppo per il thread chiamante.

[out/optional] PreviousAffinity

Puntatore a una struttura STOR_GROUP_AFFINITY in cui questa routine scrive il numero di gruppo e la maschera di affinità per il thread chiamante prima della chiamata. Questo parametro è facoltativo e può essere NULL.

Valore restituito

StorPortSetSystemGroupAffinityThread restituisce uno dei valori seguenti:

Codice restituito Descrizione
STOR_STATUS_SUCCESS L'affinità di gruppo specificata è stata impostata correttamente.
STOR_STATUS_INVALID_PARAMETER Uno o più parametri forniti non sono validi.
STOR_STATUS_UNSUCCESSFUL Restituito per altri motivi di sistema interni.

Commenti

Un miniport può chiamare StorPortSetSystemGroupAffinityThread per modificare il numero di gruppo e la maschera di affinità a livello di gruppo del thread chiamante.

Il numero di gruppo e la maschera di affinità nella struttura STOR_GROUP_AFFINITY a cui punta Affinità identificano un set di processori in cui è possibile eseguire il thread. In caso di esito positivo, StorPortSetSystemGroupAffinityThread pianifica l'esecuzione del thread in un processore in questo set.

Se il parametro PreviousAffinity è diverso da NULL, StorPortSetSystemGroupAffinityThread salva le informazioni sull'affinità di gruppo precedente, applicata all'inizio della chiamata, nella struttura STOR_GROUP_AFFINITY a cui punta PreviousAffinity . Per ripristinare l'affinità del thread precedente, il chiamante può fornire il puntatore a questa struttura come parametro di input alla routine StorPortRevertToUserGroupAffinityThread .

Se un miniport chiama questa funzione per modificare temporaneamente l'affinità di gruppo del thread, deve chiamare StorPortRevertToUserGroupAffinityThread per ripristinare l'affinità del thread con il valore originale prima che il thread venga chiuso.

Un thread può essere assegnato a una sola affinità di gruppo in qualsiasi momento. Tale gruppo è sempre nell'affinità del processo del thread. Un thread può modificare il gruppo a cui è assegnato chiamando questa routine.

StorPortSetSystemGroupAffinityThread modifica il numero di gruppo e la maschera di affinità ai valori specificati in Affinity solo se i valori seguenti sono true:

  • Il numero di gruppo è valido.
  • La maschera di affinità è valida, ovvero vengono impostati solo i bit mask che corrispondono ai processori logici nel gruppo.
  • Almeno uno dei processori specificati nella maschera di affinità è attivo.

Se una di queste condizioni non viene soddisfatta, il numero di gruppo e la maschera di affinità del thread rimangono invariati. Se PreviousAffinity è diverso da NULL, la routine scrive zero sia nel numero di gruppo che nella maschera di affinità in PreviousAffinity.

Prima che la nuova maschera di affinità in Affinity abbia effetto, StorPortSetSystemGroupAffinityThread rimuove (imposta su zero) tutti i bit affinity mask che corrispondono ai processori che non sono attualmente attivi. In una successiva chiamata StorPortSetSystemGroupAffinityThread , il valore che la routine scrive in PreviousAffinity potrebbe contenere una maschera di affinità modificata in questo modo.

Se StorPortSetSystemGroupAffinityThread viene chiamato in IRQL <= APC_LEVEL e la chiamata ha esito positivo, la nuova affinità di gruppo diventa effettiva immediatamente. Al termine della chiamata, il thread chiamante è già in esecuzione in un processore specificato nella nuova affinità di gruppo. Se StorPortSetSystemGroupAffinityThread 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
Server minimo supportato Windows Server 2022
Intestazione storport.h
IRQL <= DISPATCH_LEVEL

Vedi anche

**KeSetSystemGroupAffinityThread **

STOR_GROUP_AFFINITY

StorPortCreateSystemThread

StorPortGetCurrentIrql

StorPortRevertToUserGroupAffinityThread