Função KeAcquireInterruptSpinLock (wdm.h)
A rotina KeAcquireInterruptSpinLock adquire o bloqueio de rotação associado a um objeto de interrupção.
Sintaxe
KIRQL KeAcquireInterruptSpinLock(
PKINTERRUPT Interrupt
);
Parâmetros
Interrupt
[in, out] Especifica um ponteiro para um objeto de interrupção. Esse valor deve ser fornecido por IoConnectInterrupt ou IoConnectInterruptEx.
Retornar valor
KeAcquireInterruptSpinLock retorna o IRQL atual no momento em que a rotina é chamada. Esse valor é passado para KeReleaseInterruptSpinLock quando o bloqueio de rotação é liberado.
Comentários
Os drivers usam o bloqueio de rotação de interrupção para sincronizar o acesso à memória compartilhada com o ISR da interrupção. O driver pode liberar o bloqueio de rotação chamando KeReleaseInterruptSpinLock.
Qualquer código executado enquanto o bloqueio de rotação de interrupção é mantido faz isso em IRQL = DIRQL para a Interrupção especificada, portanto, ele deve ser executado muito rapidamente. Para obter mais informações, consulte Usando seções críticas.
A maneira preferencial de sincronizar uma rotina de driver com um ISR é usar a rotina KeSynchronizeExecution .
Começando com Windows 8, um driver pode usar IoConnectInterruptEx para registrar uma rotina de serviço de interrupção executada em IRQL = PASSIVE_LEVEL e que não usa um bloqueio de rotação para sincronização de interrupção. Se Interrupt apontar para um objeto de interrupção que se conecta a um ISR de nível passivo, KeAcquireInterruptSpinLock causará um bug marcar. Para obter mais informações, consulte Usando Passive-Level rotinas de serviço de interrupção.
Os chamadores devem estar em execução em IRQL <= DIRQL para Interrupção. (Esse é o valor que o driver passou como o parâmetro SynchronizeIrql de IoConnectInterrupt quando Interrupt é criado.)
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows XP |
Cabeçalho | wdm.h |
IRQL | <= DIRQL |
Regras de conformidade da DDI | HwStorPortProhibitedDDIs(storport) |