WUDF_INTERRUPT_ISR função de retorno de chamada (wudfinterrupt.h)
Aviso
O UMDF 2 é a versão mais recente do UMDF e substitui o 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. Drivers universais do Windows devem usar UMDF 2. Para obter mais informações, consulte Introdução com UMDF.
A função de retorno de chamada de evento OnInterruptIsr de um driver atende a uma interrupção de hardware.
Sintaxe
typedef
BOOLEAN
_Function_class_(WUDF_INTERRUPT_ISR)
WUDF_INTERRUPT_ISR(
_In_
IWDFInterrupt* Interrupt,
_In_
ULONG MessageID,
_In_
ULONG Reserved
);
typedef WUDF_INTERRUPT_ISR *PFN_WUDF_INTERRUPT_ISR;
Parâmetros
[in] Interrupt
Um ponteiro para a interface IWDFInterrupt .
[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.
[in] Reserved
Reservado para uso do sistema.
Retornar valor
Nenhum
Comentários
Retornará TRUE se o driver reconhecer a propriedade da interrupção e tiver parado e confirmado a interrupção em seu dispositivo. Caso contrário, retornará FALSE.
Para registrar uma função de retorno de chamada OnInterruptIsr , o driver deve colocar o endereço da função de retorno de chamada em uma estrutura de WUDF_INTERRUPT_CONFIG antes de chamar IWDFDevice3::CreateInterrupt.
A função de retorno de chamada OnInterruptIsr é uma ISR (rotina de serviço de interrupção) do driver UMDF, que é chamada em PASSIVE_LEVEL quando ocorre uma interrupção de hardware.
Para uma interrupção disparada por borda ou msi (interrupção sinalizada por mensagem), a estrutura chama OnInterruptIsr fora do contexto de expedição de interrupção do sistema operacional. Isso ocorre porque o UMDF permite apenas interrupções não compartilhadas disparadas por borda ou MSI, e o driver não precisa interagir com seu hardware dentro desse contexto.
Para uma interrupção disparada por nível, a estrutura chama OnInterruptIsr no contexto da expedição de interrupção do sistema operacional. Como resultado, o thread de expedição de interrupção do sistema operacional é bloqueado no modo kernel aguardando uma resposta do driver.
Normalmente, OnInterruptIsr salva todas as informações voláteis que podem ser perdidas e limpa a interrupção do hardware. Para uma interrupção disparada por nível, o driver deve parar e reconhecer a interrupção no dispositivo e, em seguida, retornar TRUE se ele possuir a interrupção. O driver deve fazer qualquer processamento adicional em um retorno de chamada OnInterruptWorkItem . Para enfileirar um item de trabalho, o driver chama o método IWDFInterrupt::QueueWorkItemForIsr .
Para obter mais informações sobre como lidar com interrupções em drivers UMDF, consulte Acessando interrupções de hardware e manipulação.
Exemplos
O tipo de função é declarado em Wudfinterrupt.h, da seguinte maneira.
typedef
BOOLEAN
WUDF_INTERRUPT_ISR(
_In_
IWDFInterrupt* Interrupt,
_In_
ULONG MessageID,
_In_
ULONG Reserved
);
typedef WUDF_INTERRUPT_ISR *PFN_WUDF_INTERRUPT_ISR;
Para definir uma função de retorno de chamada OnInterruptIsr chamada MyInterruptIsr, primeiro você deve fornecer uma declaração de função que o SDV e outras ferramentas de verificação exigem, da seguinte maneira:
WUDF_INTERRUPT_NOTIFY MyInterruptIsr;
Em seguida, implemente a função de retorno de chamada da seguinte maneira:
BOOLEAN
MyInterruptIsr (
IN IWDFInterrupt* Interrupt,
IN ULONG MessageID,
IN ULONG Reserved
)
{…}
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 | wudfinterrupt.h |