Função KeAcquireInStackQueuedSpinLock (wdm.h)

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

Sintaxe

void KeAcquireInStackQueuedSpinLock(
  PKSPIN_LOCK         SpinLock,
  PKLOCK_QUEUE_HANDLE LockHandle
);

Parâmetros

SpinLock

[in, out] 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. Os drivers normalmente 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.

Retornar valor

Nenhum

Comentários

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

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 de 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 que o sistema operacional salvou no início da chamada KeAcquireInStackQueuedSpinLock .

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 enfileirado ou como um bloqueio de rotação comum.

Requisitos

Requisito Valor
Cabeçalho wdm.h (include Wdm.h)
IRQL IRQL <= DISPATCH_LEVEL
Regras de conformidade da DDI HwStorPortProhibitedDIs(storport), MarkingQueuedIrps(wdm), QueuedSpinLock(storport), QueuedSpinLock(wdm), QueuedSpinLockRelease(storport), QueuedSpinLockRelease(wdm)

Confira também

KLOCK_QUEUE_HANDLE

KeAcquireInStackQueuedSpinLockAtDpcLevel

KeAcquireSpinLock

KeInitializeSpinLock

KeReleaseInStackQueuedSpinLock