EVT_WDF_INTERRUPT_ISR função de retorno de chamada (wdfinterrupt.h)
[Aplica-se a KMDF e UMDF]
A função de retorno de chamada de evento EvtInterruptIsr de um driver atende a uma interrupção de hardware.
Sintaxe
EVT_WDF_INTERRUPT_ISR EvtWdfInterruptIsr;
BOOLEAN EvtWdfInterruptIsr(
[in] WDFINTERRUPT Interrupt,
[in] ULONG MessageID
)
{...}
Parâmetros
[in] Interrupt
Um identificador para um objeto de interrupção de estrutura.
[in] MessageID
Se o dispositivo estiver usando MSIs (interrupções sinalizadas por mensagem), esse parâmetro será o número da mensagem que identifica a mensagem de interrupção de hardware do dispositivo. Caso contrário, esse valor será 0.
Retornar valor
A função de retorno de chamada EvtInterruptIsr deverá retornar TRUE se a função atender à interrupção de hardware. Caso contrário, essa função deverá retornar FALSE.
Comentários
Para registrar uma função de retorno de chamada EvtInterruptIsr , o driver deve colocar o endereço da função de retorno de chamada em uma estrutura WDF_INTERRUPT_CONFIG antes de chamar WdfInterruptCreate.
A função de retorno de chamada EvtInterruptIsr é uma ISR (rotina de serviço de interrupção) do driver baseado em estrutura, que é chamada quando ocorre uma interrupção de hardware.
Se a interrupção não for do hardware que essa função de retorno de chamada EvtInterruptIsr atende, o driver deverá retornar FALSE. Se o vetor de interrupção estiver sendo compartilhado, o sistema chamará outra rotina de serviço de interrupção.
Se o driver não solicitou tratamento de nível passivo para um objeto de interrupção, antes de chamar a função de retorno de chamada EvtInterruptIsr , a estrutura eleva o IRQL do processador para o IRQL (DIRQL) do dispositivo e adquire o bloqueio de rotação especificado pelo driver na estrutura WDF_INTERRUPT_CONFIG do objeto de interrupção.
Como a função de retorno de chamada EvtInterruptIsr é executada em um IRQL relativamente alto, ela pode chamar muito poucos métodos de objeto de estrutura ou rotinas do sistema. Além disso, essa função de retorno de chamada não pode acessar o código paginável .
Normalmente, a função de retorno de chamada EvtInterruptIsr limpa a interrupção de hardware e salva todas as informações que podem ser perdidas após o retorno da função de retorno de chamada e o sistema reduz o IRQL (porque a redução do IRQL permite a ocorrência de interrupções adicionais). Os drivers baseados em estrutura salvam informações sobre a interrupção no espaço de contexto do objeto de interrupção.
Os drivers normalmente fornecem uma função de retorno de chamada EvtInterruptDpc para processar as informações salvas em um IRQL inferior. (Alguns drivers fornecem uma ou mais funções de retorno de chamada EvtDpcFunc em vez de uma função de retorno de chamada EvtInterruptDpc .) Para obter informações sobre como agendar uma função de retorno de chamada EvtInterruptDpc para execução, consulte Manutenção de uma interrupção.
A função de retorno de chamada EvtInterruptIsr deve ser capaz de atender a várias interrupções antes que a função de retorno de chamada EvtInterruptDpc seja executada. Portanto, o driver pode ter que armazenar dados de interrupção de várias interrupções e as funções de retorno de chamada EvtInterruptIsr eEvtInterruptDpc podem ter que determinar quais dados de interrupção foram completamente processados pelo driver e quais não foram.
A partir da versão 1.11 do KMDF, o driver pode fornecer tratamento de interrupção de nível passivo. Se o driver solicitou tratamento de nível passivo para um objeto de interrupção, antes de chamar a função de retorno de chamada EvtInterruptIsr dessa interrupção em IRQL = PASSIVE_LEVEL, a estrutura adquire o bloqueio de interrupção de nível passivo que o driver configurou na estrutura WDF_INTERRUPT_CONFIG do objeto de interrupção. Assim como acontece com o tratamento de interrupção no DIRQL, a função EvtInterruptIsr do driver ainda deve salvar informações sobre a interrupção para processamento posterior.
Os drivers que dão suporte à manipulação de interrupção de nível passivo podem fornecer uma função de retorno de chamada EvtInterruptWorkItem ou EvtInterruptDpc para processar as informações salvas.
Para obter mais informações sobre como lidar com interrupções em drivers baseados em estrutura, consulte Tratamento de interrupções de hardware.
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) |
IRQL | (Consulte a seção Observações.) |