Usando o WDF para desenvolver um driver

Este tópico fornece uma visão geral de alto nível dos objetos de estrutura que você usará para desenvolver um driver KMDF (Kernel-Mode Driver Framework). Exceto quando indicado, você usará os mesmos objetos para desenvolver um driver umDF (User-Mode Driver Framework) começando na UMDF versão 2.

Os drivers do WDF (Windows Driver Frameworks) consistem em uma rotina DriverEntry e um conjunto de funções de retorno de chamada de evento definidas pelos objetos da Estrutura do Driver do Windows que os drivers baseados em estrutura usam. As funções de retorno de chamada chamam métodos de objeto exportados pela estrutura. O WDK (Kit de Driver do Windows) contém drivers WDF de exemplo que demonstram como implementar as funções de retorno de chamada de evento de um driver. Você pode baixar esses exemplos no Centro de Desenvolvimento do Windows – Hardware. Para obter informações sobre quais exemplos estão disponíveis, consulte Drivers KMDF de exemplo e Drivers UMDF de exemplo.

Ao criar um driver WDF, você normalmente fará o seguinte:

  • Use um objeto de driver de estrutura para representar o driver.

    A rotina DriverEntry do driver deve chamar WdfDriverCreate para criar um objeto de driver de estrutura que represente o driver. O método WdfDriverCreate também registra a função de retorno de chamada EvtDriverDeviceAdd do driver, que a estrutura chama sempre que o gerenciador de Plug and Play (PnP) relata a existência de um dispositivo compatível com o driver.

  • Use objetos de dispositivo de estrutura para dar suporte ao PnP e ao gerenciamento de energia em seu driver.

    Todos os drivers devem chamar WdfDeviceCreate para criar um objeto de dispositivo de estrutura para cada dispositivo compatível com um driver. Um dispositivo pode ser um hardware conectado ao computador ou pode ser um dispositivo somente software. Os objetos de dispositivo framework dão suporte a operações de gerenciamento de energia e PnP, e os drivers podem registrar funções de retorno de chamada de evento que notificam o driver quando um dispositivo entra ou deixa seu estado de trabalho.

    Para obter mais informações sobre objetos de dispositivo de estrutura, consulte Suporte a PnP e gerenciamento de energia em seu driver.

  • Use objetos de fila de estrutura e objetos de solicitação de estrutura para dar suporte a operações de E/S em seu driver.

    Todos os drivers que recebem solicitações de controle de E/S de dispositivo ou leitura ou gravação de aplicativos ou outros drivers devem chamar WdfIoQueueCreate para criar objetos de fila de estrutura que representam filas de E/S. Normalmente, os drivers registram um ou mais manipuladores de solicitação para cada fila de E/S. Quando o gerente de E/S envia uma solicitação de E/S para o driver, a estrutura cria um objeto de solicitação de estrutura para a solicitação, coloca o objeto de solicitação em uma fila de E/S e chama um dos manipuladores de solicitação do driver para informar ao driver que uma solicitação está disponível. O driver obtém a solicitação de E/S e pode redirecionar, concluir, cancelar ou encaminhar a solicitação.

    Para obter mais informações sobre como usar objetos de fila da estrutura e objetos de solicitação, consulte Objetos de Fila da Estrutura e Objetos de Solicitação de Estrutura.

  • Use objetos de interrupção de estrutura para lidar com interrupções de dispositivo.

    Os drivers que lidam com interrupções de dispositivo devem chamar WdfInterruptCreate para criar um objeto de interrupção de estrutura para cada interrupção e registrar funções de retorno de chamada. Essas funções de retorno de chamada habilitam e desabilitam a interrupção e servem como isr (rotina de serviço de interrupção) e DPC (chamada de procedimento adiado) para a interrupção.

    Para obter mais informações sobre objetos de interrupção de estrutura, consulte Manipulando interrupções de hardware.

  • Os drivers KMDF podem usar objetos de habilitador DMA da estrutura e objetos de transação DMA para lidar com as operações de DMA (acesso direto à memória) de um dispositivo.

    Se o dispositivo do driver KMDF der suporte a operações de DMA, o driver deverá chamar WdfDmaEnablerCreate para criar um objeto de habilitador de DMA e WdfDmaTransactionCreate para criar um ou mais objetos de transação DMA. O objeto de transação DMA define uma função de retorno de chamada EvtProgramDma que programa o hardware do dispositivo para executar uma operação de DMA.

    Para obter mais informações sobre como dar suporte a operações de DMA, consulte Manipulando operações de DMA em drivers baseados em estrutura.

  • Use os objetos de destino de E/S da estrutura para enviar solicitações de E/S para outros drivers.

    Para passar solicitações de E/S para outros drivers (normalmente o próximo driver inferior na pilha de driver), o driver envia a solicitação para um objeto de destino de E/S.

    Para obter mais informações sobre objetos de destino de E/S, consulte Usando destinos de E/S.

  • Um driver KMDF pode usar objetos do provedor WMI da estrutura e objetos de instância WMI para dar suporte a recursos de WMI (Instrumentação de Gerenciamento do Windows).

    A maioria dos drivers KMDF deve dar suporte ao WMI e deve chamar WdfWmiInstanceCreate para registrar funções de retorno de chamada que enviam ou recebem dados WMI.

    Para obter mais informações sobre wmi, consulte Supporting WMI in Framework-based Drivers.

  • Use os recursos de sincronização da estrutura.

    Todos os drivers devem estar cientes dos problemas de sincronização de vários processadores e devem usar técnicas de sincronização que a estrutura fornece.

  • Use objetos e recursos adicionais que a estrutura fornece.

    A estrutura fornece objetos adicionais que o driver pode usar. Para obter mais informações sobre esses objetos, consulte Objetos de suporte do WDF.