Função KeAcquireInStackQueuedSpinLockAtDpcLevel (wdm.h)

A rotina KeAcquireInStackQueuedSpinLockAtDpcLevel adquire um bloqueio de rotação enfileirado quando o chamador já está em execução em IRQL >= DISPATCH_LEVEL.

Sintaxe

void KeAcquireInStackQueuedSpinLockAtDpcLevel(
  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 por uma chamada para a rotina KeInitializeSpinLock .

LockHandle

[out] Ponteiro para uma estrutura de KLOCK_QUEUE_HANDLE fornecida pelo chamador que a rotina pode usar para retornar o identificador da fila de bloqueio de rotação. Para liberar o bloqueio, o chamador passa esse valor para a rotina KeReleaseInStackQueuedSpinLockFromDpcLevel .

Retornar valor

Nenhum

Comentários

Para um driver em execução em IRQL >= DISPATCH_LEVEL, KeAcquireInStackQueuedSpinLockAtDpcLevel adquire um bloqueio de rotação como um bloqueio de rotação enfileirado. Para obter mais informações, consulte Bloqueios de rotação enfileirados. Para liberar o bloqueio de rotação, chame a rotina KeReleaseInStackQueuedSpinLockFromDpcLevel .

Os drivers que já estão em execução em um IRQL >= DISPATCH_LEVEL podem chamar essa rotina para adquirir o bloqueio de rotação na fila mais rapidamente. Caso contrário, use a rotina KeAcquireInStackQueuedSpinLock para adquirir o bloqueio de rotação.

Para um driver em execução no IRQL > DISPATCH_LEVEL, essa rotina adquire o bloqueio sem modificar o IRQL atual. Para um driver em execução em IRQL = DISPATCH_LEVEL, essa rotina melhora o desempenho adquirindo o bloqueio sem primeiro definir o IRQL como DISPATCH_LEVEL, o que, nesse caso, seria uma operação redundante.

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.

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
Cliente mínimo com suporte Windows XP
Cabeçalho wdm.h
IRQL IRQL >= DISPATCH_LEVEL
Regras de conformidade da DDI HwStorPortProhibitedDDIs(storport)

Confira também

KLOCK_QUEUE_HANDLE

KeAcquireSpinLock

KeAcquireInStackQueuedSpinLock

KeInitializeSpinLock

KeReleaseInStackQueuedSpinLockFromDpcLevel