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
[dentro, fora] Especifica um ponteiro para um objeto de interrupção. Esse valor deve ser fornecido por IoConnectInterrupt ou IoConnectInterruptEx.
Valor de retorno
KeAcquireInterruptSpinLock retorna o IRQL atual no momento em que a rotina é chamada. Esse valor é passado para KeReleaseInterruptSpinLock quando o bloqueio de rotação é liberado.
Observações
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 o de interrupção deespecificado, portanto, ele deve ser executado muito rapidamente. Para obter mais informações, consulte Usando seções críticas.
A maneira preferida de sincronizar uma rotina de driver com um ISR é usar a rotina KeSynchronizeExecution.
A partir do 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 Interromper apontar para um objeto de interrupção que se conecta a um ISR de nível passivo, KeAcquireInterruptSpinLock causará uma verificação de bug. Para obter mais informações, consulte Usando rotinas de serviço de interrupção de Passive-Level.
Os chamadores devem estar em execução no IRQL <= DIRQL para de interrupção. (Esse é o valor que o driver passou como o parâmetro SynchronizeIrql de IoConnectInterrupt quando de Interrupção é criado.)
Requisitos
Requisito | Valor |
---|---|
de cliente com suporte mínimo | Windows XP |
cabeçalho | wdm.h |
IRQL | <= DIRQL |
regras de conformidade de DDI | HwStorPortProhibitedDIs(storport) |