Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Um driver WDF (Windows Driver Frameworks) que gere as interrupções de hardware de um dispositivo deve criar um objeto de interrupção do framework para cada interrupção que o dispositivo pode suportar. Nas versões de estrutura 1.11 e posteriores em execução no Windows 8 ou versões posteriores do sistema operacional, os drivers Kernel-Mode Driver Framework (KMDF) e User-Mode Driver Framework (UMDF) podem criar objetos de interrupção que exigem manipulação de nível passivo. A menos que você esteja escrevendo um driver para uma plataforma System on a Chip (SoC), no entanto, seu driver deve usar objetos de interrupção DIRQL.
Um driver normalmente cria objetos de interrupção do framework na sua função de retorno de chamada EvtDriverDeviceAdd. Um driver também pode criar objetos de interrupção a partir da sua função de retorno de chamada EvtDevicePrepareHardware.
O framework executa a função de retorno de chamada EvtDriverDeviceAdd do driver antes do gerenciador Plug and Play (PnP) atribuir recursos do sistema, como vetores de interrupção, ao dispositivo. Depois que o gerenciador PnP atribui recursos, a estrutura armazena recursos de interrupção no objeto de interrupção do dispositivo. (Os drivers que não suportam Plug and Play não podem usar objetos de interrupção.)
Para criar um objeto de interrupção de framework, o driver deve inicializar uma estrutura WDF_INTERRUPT_CONFIG e passá-la para o método WdfInterruptCreate.
UMDF suporta os seguintes tipos de interrupções:
- Acionado por nível (compartilhado ou exclusivo)
- Acionado por borda (somente exclusivo)
- MSI (exclusivo por definição)
Observação O UMDF não suporta interrupções acionadas por borda compartilhadas .
A partir da versão 2.15 do UMDF, o UMDF suporta interrupções para dispositivos simples, como botões de hardware, geralmente apoiados por pinos GPIO, que você não pode habilitar ou desabilitar explicitamente usando registros de hardware. Para suportar esses dispositivos, um driver UMDF deve usar interrupções acionadas por borda exclusivas.
A partir da versão 1.15 do KMDF, o KMDF também suporta interrupções para esses dispositivos, sem precisar da solução alternativa descrita em Gestão de Interrupções Active-Both.
Além disso, WDF_INTERRUPT_CONFIG, o driver fornece ponteiros para as seguintes funções de retorno de chamada de evento fornecidas pelo driver:
EvtInterruptEnable
Permite uma interrupção de hardware.
EvtInterruptDisable
Desativa uma interrupção de hardware.
EvtInterruptIsr
Rotina de serviço de interrupção (ISR) para a interrupção.
EvtInterruptDpc
Chamada de procedimento diferida (DPC) para a interrupção.
EvtInterruptWorkItem
Item de trabalho para uma interrupção de nível passivo.
Para drivers que usam a versão 1.11 do framework ou posterior no Windows 8 ou em versões mais recentes do sistema operativo, o driver pode definir explicitamente o progenitor de um objeto de interrupção do framework (DIRQL ou passivo) como um objeto de dispositivo do framework ou um objeto de fila do framework. Se o driver especificar um pai, o driver deverá definir o membro AutomaticSerialization da estrutura WDF_INTERRUPT_CONFIG do objeto de interrupção como TRUE. (Lembre-se de que, se AutomaticSerialization for TRUE, a estrutura sincroniza a execução da função de retorno de chamada EvtInterruptDpc ou EvtInterruptWorkItem do objeto de interrupção com funções de retorno de chamada de outros objetos subordinados ao objeto pai da interrupção.)
Por exemplo, um driver pode especificar uma fila como o elemento pai de uma interrupção para sincronizar os retornos de chamada da fila com o retorno de chamada EvtInterruptDpc ou EvtInterruptWorkItem da interrupção. Na configuração apresentada, o framework elimina o objeto de fila ao eliminar o objeto de dispositivo.
Depois de chamar WdfInterruptCreate, o driver pode, opcionalmente, chamar WdfInterruptSetPolicy ou WdfInterruptSetExtendedPolicy para especificar parâmetros de interrupção adicionais. Normalmente, o driver chama esses métodos a partir da sua função de retorno de chamada EvtDriverDeviceAdd.
A estrutura exclui automaticamente a interrupção antes de excluir o pai da interrupção. Opcionalmente, um driver pode chamar WdfObjectDelete para excluir a interrupção em um momento anterior.
Suporte a interrupções sinalizadas por mensagem
O Windows Vista e versões posteriores oferecem suporte a interrupções sinalizadas por mensagem (MSIs). Para habilitar o sistema operacional para suportar MSIs para o seu dispositivo, o arquivo INF do driver deve definir alguns valores no registro. Para obter informações sobre como definir esses valores, consulte Habilitação de Interrupções Sinalizadas por Mensagem no Registo.
Seu driver deve criar um objeto de interrupção de estrutura para cada vetor de interrupção ou mensagem MSI que o dispositivo suporta. Se o gestor PnP não atribuir ao dispositivo todos os recursos de interrupção que o dispositivo suporta, o controlador não usará os objetos de interrupção extra e não invoca as suas funções de retorno.
No Windows 7, o sistema operacional não suporta solicitações de recursos para mais de 910 mensagens de interrupção por função de dispositivo. No Windows 8, o sistema operacional não suporta solicitações de recursos para mais de 2.048 interrupções por função do dispositivo.
Se o driver de dispositivo exceder esse limite, o dispositivo pode falhar ao iniciar. Para operar em um computador que contém muitos processadores lógicos, o driver não deve solicitar mais de uma interrupção por processador.
Um driver deve tolerar, sem falhas, o reequilíbrio de recursos de interrupção do sistema, no qual o gestor de PnP atribui ao dispositivo qualquer conjunto de recursos de interrupção alternativos da lista de requisitos de recursos. Por exemplo, o dispositivo pode receber um número menor de interrupções de mensagem do que o driver solicitou. Na pior das hipóteses, o condutor deve estar preparado para operar o dispositivo com apenas uma interrupção em linha.