Compartilhar via


Manutenção de uma interrupção (UMDF 1)

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.

Os exemplos umdf 1 arquivados podem ser encontrados no Windows 11, versão 22H2 – Atualização de exemplos de driver de maio de 2022.

Para obter mais informações, consulte Introdução com UMDF.

A manutenção de uma interrupção consiste em duas etapas:

  1. Salvar informações voláteis (como registrar conteúdo) rapidamente, em uma rotina de serviço de interrupção.
  2. Processando as informações voláteis salvas em uma rotina de workitem.

Quando um dispositivo gera uma interrupção de hardware, a estrutura chama a ISR (rotina de serviço de interrupção) do driver, que os drivers baseados em estrutura implementam como uma função de retorno de chamada OnInterruptIsr .

A função de retorno de chamada OnInterruptIsr , que é executada em PASSIVE_LEVEL, deve salvar rapidamente informações de interrupção, como registrar conteúdo, enfileirar um workitem para processar ainda mais os dados e retornar do ISR para permitir a manutenção de outras interrupções se a linha de interrupção for compartilhada. Como o ISR do driver UMDF é executado em PASSIVE_LEVEL, não é recomendável lidar com interrupções baseadas em linha PCI. Essas interrupções normalmente são compartilhadas entre vários dispositivos, alguns dos quais podem não aceitar atrasos de ISR. No entanto, você pode lidar com interrupções de MSI PCI em um driver UMDF. Essas interrupções têm semântica de borda e não são compartilhadas.

Normalmente, a função de retorno de chamada OnInterruptIsr agenda um workitem para processar as informações salvas mais tarde. Os drivers baseados em estrutura implementam rotinas de workitem como funções de retorno de chamada OnInterruptWorkItem .

A maioria dos drivers usa uma única função de retorno de chamada OnInterruptWorkItem para cada tipo de interrupção. Para agendar a execução de uma função de retorno de chamada OnInterruptWorkItem , um driver deve chamar IWDFInterrupt::QueueWorkItemForIsr de dentro da função de retorno de chamada OnInterruptIsr .

Se o driver criar vários objetos de fila de estrutura para cada dispositivo, você poderá considerar o uso de um objeto workitem separado e uma função de retorno de chamada OnWorkItem para cada fila. Para agendar a execução de uma função de retorno de chamada OnWorkItem , o driver deve primeiro criar um ou mais objetos workitem chamando IWdfDevice3::CreateWorkItem, normalmente da função de retorno de chamada IDriverEntry::OnDeviceAdd do driver. Em seguida, a função de retorno de chamada OnInterruptIsr do driver pode chamar IWDFWorkItem::Enqueue.

Os drivers normalmente concluem solicitações de E/S em suas funções de retorno de chamada OnInterruptWorkItem ou OnWorkItem .

Para obter um exemplo de um driver UMDF que lida com interrupções, consulte o driver de exemplo SpbAccelerometer, disponível a partir do WDK do Windows 8.