Partilhar via


Função KeAcquireInStackQueuedSpinLock (wdm.h)

A rotina KeAcquireInStackQueuedSpinLock adquire um bloqueio de rotação na fila.

Sintaxe

void KeAcquireInStackQueuedSpinLock(
  PKSPIN_LOCK         SpinLock,
  PKLOCK_QUEUE_HANDLE LockHandle
);

Parâmetros

SpinLock

[dentro, fora] Especifica o bloqueio de rotação a ser adquirido. Esse parâmetro deve ter sido inicializado com KeInitializeSpinLock.

LockHandle

[out] Um ponteiro para uma variável de KLOCK_QUEUE_HANDLE fornecida pelo chamador que a rotina pode usar para retornar o identificador da fila de bloqueio de rotação. O chamador passa esse valor para KeReleaseInStackQueuedSpinLock ao liberar o bloqueio. Normalmente, os drivers devem alocar a estrutura na pilha sempre que adquirirem o bloqueio. Um driver não deve usar o mesmo KLOCK_QUEUE_HANDLE de vários sites de chamada.

Valor de retorno

Nenhum

Observações

KeAcquireInStackQueuedSpinLock adquire um bloqueio de rotação como um de bloqueio de rotação enfileirado. Para obter mais informações, consulte bloqueios de rotação na fila. O chamador libera o bloqueio de rotação chamando a rotina KeReleaseInStackQueuedSpinLock .

Assim como os bloqueios de rotação comuns, os bloqueios de rotação enfileirados só devem ser usados em circunstâncias muito especiais. Para obter uma descrição de quando usar bloqueios de rotação, consulte KeAcquireSpinLock .

Essa rotina eleva o nível do IRQL para DISPATCH_LEVEL ao adquirir o bloqueio de rotação. Se o chamador já estiver em execução no DISPATCH_LEVEL, será mais eficiente chamar KeAcquireInStackQueuedSpinLockAtDpcLevel.

A chamada para KeReleaseInStackQueuedSpinLock que libera o bloqueio de rotação deve ocorrer em IRQL = DISPATCH_LEVEL. Essa chamada restaura o IRQL original salvo pelo sistema operacional no início da chamada KeAcquireInStackQueuedSpinLock . Se um driver adquirir vários bloqueios de rotação na fila na série, ele deverá liberá-los na ordem inversa para restaurar corretamente o IRQL original.

Os drivers não devem combinar chamadas para KeAcquireSpinLock e KeAcquireInStackQueuedSpinLock no mesmo bloqueio de rotação. Um bloqueio de rotação sempre deve ser adquirido ou liberado como um bloqueio de rotação na fila ou como um bloqueio de rotação comum.

Requisitos

Requisito Valor
cabeçalho wdm.h (inclua Wdm.h)
IRQL IRQL <= DISPATCH_LEVEL
regras de conformidade de DDI HwStorPortProhibitedDIs(storport), MarkingQueuedIrps(wdm), QueuedSpinLock(storport), queuedSpinLock(wdm), QueuedSpinLockRelease(storport), QueuedSpinLockRelease(wdm)

Consulte também

KLOCK_QUEUE_HANDLE

KeAcquireInStackQueuedSpinLockAtDpcLevel

KeAcquireSpinLock

KeInitializeSpinLock

KeReleaseInStackQueuedSpinLock