Función KeAcquireInStackQueuedSpinLock (wdm.h)
La rutina KeAcquireInStackQueuedSpinLock adquiere un bloqueo de giro en cola.
Sintaxis
void KeAcquireInStackQueuedSpinLock(
PKSPIN_LOCK SpinLock,
PKLOCK_QUEUE_HANDLE LockHandle
);
Parámetros
SpinLock
[dentro, fuera] Especifica el bloqueo de número que se va a adquirir. Este parámetro debe haberse inicializado con KeInitializeSpinLock.
LockHandle
[out] Puntero a una variable de KLOCK_QUEUE_HANDLE proporcionada por el autor de la llamada que la rutina puede usar para devolver el identificador de cola de bloqueo de número. El autor de la llamada pasa este valor a KeReleaseInStackQueuedSpinLock al liberar el bloqueo. Normalmente, los controladores deben asignar la estructura en la pila cada vez que adquieren el bloqueo. Un controlador no debe usar la misma KLOCK_QUEUE_HANDLE desde varios sitios de llamada.
Valor devuelto
Ninguno
Observaciones
KeAcquireInStackQueuedSpinLock adquiere un bloqueo de giro como un bloqueo de giro en cola . Para obtener más información, consulte bloqueos de número en cola. El llamador libera el bloqueo de número llamando a la rutina KeReleaseInStackQueuedSpinLock.
Al igual que los bloqueos de giro normales, los bloqueos de giro en cola solo deben usarse en circunstancias muy especiales. Para obtener una descripción de cuándo usar bloqueos de número, consulte KeAcquireSpinLock.
Esta rutina eleva el nivel IRQL a DISPATCH_LEVEL al adquirir el bloqueo de número. Si se garantiza que el autor de la llamada ya se está ejecutando en DISPATCH_LEVEL, es más eficaz llamar a KeAcquireInStackQueuedSpinLockAtDpcLevel.
La llamada a KeReleaseInStackQueuedSpinLock que libera el bloqueo de giro debe producirse en IRQL = DISPATCH_LEVEL. Esta llamada restaura el IRQL original que guardó el sistema operativo al principio de la llamada KeAcquireInStackQueuedSpinLock. Si un controlador adquiere varios bloqueos de giro en cola en serie, debe liberarlos en orden inverso para restaurar correctamente el IRQL original.
Los controladores no deben combinar llamadas a keAcquireSpinLock y KeAcquireInStackQueuedSpinLock en el mismo bloqueo de giro. Un bloqueo de número siempre debe adquirirse o liberarse como un bloqueo de número en cola o como un bloqueo de giro normal.
Requisitos
Requisito | Valor |
---|---|
encabezado de |
wdm.h (incluya Wdm.h) |
irQL | IRQL <= DISPATCH_LEVEL |
reglas de cumplimiento de DDI | HwStorPortProhibitedDIs(storport), MarkingQueuedIrps(wdm), QueuedSpinLock(storport), QueuedSpinLock(wdm), QueuedSpinLockRelease(storport), QueuedSpinLockRelease(wdm) |