Função WdfInterruptQueueDpcForIsr (wdfinterrupt.h)
[Aplica-se a KMDF e UMDF]
O método WdfInterruptQueueDpcForIsr enfileira uma função de retorno de chamada EvtInterruptDpc do objeto de interrupção da estrutura para execução.
Sintaxe
BOOLEAN WdfInterruptQueueDpcForIsr(
[in] WDFINTERRUPT Interrupt
);
Parâmetros
[in] Interrupt
Um identificador para um objeto de interrupção de estrutura.
Valor de retorno
WdfInterruptQueueDpcForIsr retornará verdadeiro se ele enfileirar com êxito a função de retorno de chamada EvtInterruptDpc do objeto de interrupção. O método retornará FALSE se a função de retorno de chamada tiver sido previamente enfileirada e não tiver sido executada.
Uma verificação de bug ocorre se o driver fornece um identificador de objeto inválido.
Observações
Os drivers normalmente chamam WdfInterruptQueueDpcForIsr de dentro de uma função de retorno de chamada EvtInterruptIsr.
A função de retorno de chamada EvtInterruptDpc de um objeto de interrupção só pode ser enfileirada uma vez antes de ser executada. Portanto, se uma chamada para WdfInterruptQueueDpcForIsr for bem-sucedida, as chamadas subsequentes retornarão FALSE até que a estrutura desque a função de retorno de chamada EvtInterruptDpc.
O retorno de chamada EvtInterruptDpc será executado no processador que o enfileira. Se o driver chamar função de retorno de chamada WdfInterruptQueueDpcForIsr para enfileirar outro DPC enquanto uma função de retorno de chamada EvtInterruptDpc já estiver desativada ou em execução, o segundo EvtInterruptDpc retorno de chamada poderá até mesmo ser executado antes da conclusão da primeira.
Para obter mais informações sobre como lidar com interrupções em drivers baseados em estrutura, consulte Tratando interrupções de hardware.
No KMDF 1.11 e posterior, um driver pode chamar WdfInterruptQueueDpcForIsr de um ISR de nível passivo. Observe que um driver pode registrar um item de trabalho ou um DPC, mas não ambos.
Exemplos
O exemplo de código a seguir mostra como uma função de retorno de chamada EvtInterruptIsr deve enfileirar uma função de retorno de chamada EvtInterruptDpc.
BOOLEAN
MyEvtInterruptIsr(
IN WDFINTERRUPT Interrupt,
IN ULONG MessageID
)
{
BOOLEAN queueDpcSuccess;
//
// Save interrupt information for the
// EvtInterruptDpc function.
//
...
//
// Queue the EvtInterruptDpc function.
//
queueDpcSuccess = WdfInterruptQueueDpcForIsr(Interrupt);
...
}