Partilhar via


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 do driver oferece 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.

Valor de retorno

A função de retorno de chamada EvtInterruptIsr deverá retornar VERDADEIRO se a função atender à interrupção do hardware. Caso contrário, essa função deverá retornar FALSE .

Observações

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 de WDF_INTERRUPT_CONFIG antes de chamar WdfInterruptCreate.

A função de retorno de chamada EvtInterruptIsr é uma ISR (rotina de serviço de interrupção) baseada em estrutura, que é chamada quando ocorre uma interrupção de hardware.

Se a interrupção não for do hardware que este serviços de função de retorno de chamada do EvtInterruptIsr, 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 o EvtInterruptIsr função de retorno de chamada, a estrutura elevará o IRQL do processador para o DIRQL (IRQL) do dispositivo e adquirirá 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 da estrutura ou rotinas do sistema. Além disso, essa função de retorno de chamada não pode acessar código de 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 que ocorram 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 umde 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 o EvtInterruptIsr da interrupção função de retorno de chamada em IRQL = PASSIVE_LEVEL, a estrutura adquirirá 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 ocorre com o tratamento de interrupções 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 ao tratamento de interrupção de nível passivo podem fornecer uma EvtInterruptWorkItem ou um EvtInterruptDpc função de retorno de chamada para processar as informações salvas.

Para obter mais informações sobre como lidar com interrupções em drivers baseados em estrutura, consulte Tratando interrupções de hardware.

Requisitos

Requisito Valor
da 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 Comentários.)

Consulte também

EvtDpcFunc

EvtInterruptDpc

WDF_INTERRUPT_CONFIG

WdfInterruptCreate

WdfInterruptGetDevice

WdfInterruptGetInfo

WdfInterruptWdmGetInterrupt