Funzione KeAcquireInStackQueuedSpinLock (wdm.h)
La routine KeAcquireInStackQueuedSpinLock acquisisce un blocco spin in coda.
Sintassi
void KeAcquireInStackQueuedSpinLock(
PKSPIN_LOCK SpinLock,
PKLOCK_QUEUE_HANDLE LockHandle
);
Parametri
SpinLock
[in, out] Specifica il blocco di selezione da acquisire. Questo parametro deve essere stato inizializzato con KeInitializeSpinLock.
LockHandle
[out] Puntatore a una variabile fornita dal chiamante KLOCK_QUEUE_HANDLE variabile che la routine può usare per restituire l'handle della coda di blocco di selezione. Il chiamante passa questo valore a KeReleaseInStackQueuedSpinLock durante il rilascio del blocco. I driver devono normalmente allocare la struttura nello stack ogni volta che acquisiscono il blocco. Un driver non deve usare lo stesso KLOCK_QUEUE_HANDLE da più siti chiamante.
Valore restituito
Nessuno
Osservazioni
KeAcquireInStackQueuedSpinLock acquisisce un blocco spin come blocco spin accodato. Per altre informazioni, vedere blocchi spin accodati. Il chiamante rilascia il blocco spin chiamando la routine KeReleaseInStackQueuedSpinLock.
Come i normali blocchi di rotazione, i blocchi di rotazione in coda devono essere usati solo in circostanze molto speciali. Per una descrizione di quando usare i blocchi di selezione, vedere KeAcquireSpinLock.
Questa routine genera il livello IRQL per DISPATCH_LEVEL durante l'acquisizione del blocco di selezione. Se il chiamante è già in esecuzione in DISPATCH_LEVEL, è più efficiente chiamare KeAcquireInStackQueuedSpinLockAtDpcLevel.
La chiamata a KeReleaseInStackQueuedSpinLock che rilascia il blocco di selezione deve verificarsi in IRQL = DISPATCH_LEVEL. Questa chiamata ripristina il runtime di integrazione originale salvato dal sistema operativo all'inizio della chiamata KeAcquireInStackQueuedSpinLock. Se un driver acquisisce più blocchi di rotazione in coda in serie, deve rilasciarli in ordine inverso per ripristinare correttamente l'IRQL originale.
I driver non devono combinare chiamate a KeAcquireSpinLock e KeAcquireInStackQueuedSpinLock nello stesso blocco di selezione. Un blocco spin deve essere sempre acquisito o rilasciato come blocco di rotazione in coda o come blocco di rotazione ordinario.
Fabbisogno
Requisito | Valore |
---|---|
intestazione |
wdm.h (include Wdm.h) |
IRQL | IRQL <= DISPATCH_LEVEL |
regole di conformità DDI |