Função WdfInterruptQueueDpcForIsr (wdfinterrupt.h)
[Aplica-se a KMDF e UMDF]
O método WdfInterruptQueueDpcForIsr enfileira a função de retorno de chamada EvtInterruptDpc de um objeto de interrupção de estrutura para execução.
Sintaxe
BOOLEAN WdfInterruptQueueDpcForIsr(
[in] WDFINTERRUPT Interrupt
);
Parâmetros
[in] Interrupt
Um identificador para um objeto de interrupção de estrutura.
Retornar valor
WdfInterruptQueueDpcForIsr retornará TRUE 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 enfileirada anteriormente e não tiver sido executada.
Um bug marcar ocorrerá se o driver fornecer um identificador de objeto inválido.
Comentários
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 remova a função de retorno de chamada EvtInterruptDpc .
O retorno de chamada EvtInterruptDpc será executado no processador que o enfileiraram. Se o driver chamar WdfInterruptQueueDpcForIsr para enfileirar outro DPC enquanto uma função de retorno de chamada EvtInterruptDpc já estiver desativada ou em execução, o segundo retorno de chamada EvtInterruptDpc poderá até mesmo ser executado antes da conclusão do primeiro.
Para obter mais informações sobre como lidar com interrupções em drivers baseados em estrutura, consulte Tratamento de 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);
...
}
Requisitos
Requisito | Valor |
---|---|
Plataforma de Destino | Universal |
Versão mínima do KMDF | 1.0 |
Versão mínima do UMDF | 2,0 |
Cabeçalho | wdfinterrupt.h (inclua Wdf.h) |
Biblioteca | Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF) |
IRQL | <=DIRQL |
Regras de conformidade de DDI | DriverCreate(kmdf) |