Método IWDFInterrupt::AcquireInterruptLock (wudfddi.h)

[Aviso: UMDF 2 é a versão mais recente do UMDF e substitui UMDF 1. Todos os novos drivers UMDF devem ser gravados usando UMDF 2. Nenhum novo recurso está sendo adicionado ao UMDF 1 e há suporte limitado para UMDF 1 em versões mais recentes do Windows 10. Os drivers universais do Windows devem usar o UMDF 2. Para obter mais informações, consulte Introdução com UMDF.]

O método AcquireInterruptLock inicia uma sequência de código que é executada enquanto mantém o bloqueio de um objeto de interrupção.

Sintaxe

void AcquireInterruptLock();

Retornar valor

Nenhum

Comentários

Quando um driver chama AcquireInterruptLock, o sistema adquire o bloqueio de interrupção da estrutura.

Quando o driver chama ReleaseInterruptLock, o sistema libera o bloqueio de interrupção.

Você pode usar AcquireInterruptLock e ReleaseInterruptLock se o driver precisar executar algumas linhas de código sem ser preemptado e com a manutenção de interrupção desabilitada.

Seu driver não pode chamar AcquireInterruptLock antes que a estrutura tenha chamado a função de retorno de chamada OnInterruptEnable do driver ou depois que a estrutura tiver chamado a função de retorno de chamada OnInterruptDisable do driver.

Depois que o driver chama AcquireInterruptLock, ele não deve chamar o método novamente para o mesmo objeto de interrupção antes de chamar ReleaseInterruptLock.

Ao executar em um thread arbitrário, como um método de retorno de chamada de fila de E/S, os drivers devem chamar IWDFInterrupt::TryToAcquireInterruptLock em vez de IWDFInterrupt::AcquireInterruptLock. Por exemplo, o driver chama IWDFInterrupt::TryToAcquireInterruptLock de IQueueCallbackRead::OnRead.

Isso evita a possibilidade de deadlock, conforme descrito no cenário a seguir.

  1. Para determinar se seu dispositivo foi interrompido, um UMDF envia E/S para seu barramento de dentro de seu ISR, com o bloqueio de interrupção mantido.
  2. O motorista do ônibus conclui uma segunda solicitação no mesmo thread no qual recebeu a solicitação acima.
  3. A rotina de conclusão da segunda solicitação envia uma solicitação para o driver UMDF.
  4. A rotina de expedição de E/S do driver UMDF chama IWDFInterrupt::AcquireInterruptLock, que, em seguida, bloqueia a tentativa de adquirir o bloqueio de interrupção.
O driver não deve tentar adquirir o bloqueio recursivamente. Se estiver conectada ao depurador, a estrutura introduzirá um ponto de interrupção nesse cenário.

Para obter mais informações sobre o bloqueio manual de interrupção, consulte Sincronizando o código de interrupção.

Para obter mais informações sobre como lidar com interrupções em drivers UMDF, consulte Acessando interrupções de hardware e tratamento.

Requisitos

Requisito Valor
Fim do suporte Indisponível no UMDF 2.0 e posterior.
Plataforma de Destino Área de Trabalho
Versão mínima do UMDF 1.11
Cabeçalho wudfddi.h
DLL WUDFx.dll

Confira também

IWDFInterrupt

IWDFInterrupt::ReleaseInterruptLock

WdfInterruptAcquireLock