Função KeAcquireInStackQueuedSpinLock (wdm.h)
A rotina
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
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) |