Compartilhar via


Como converter um driver KMDF em um driver UMDF 2 (e vice-versa)

Este tópico descreve como converter um driver KMDF (Kernel-Mode Driver Framework) em um driver do User-Mode Driver Framework (UMDF) versão 2 e vice-versa.

Conversão de driver usando o Visual Studio

  1. Ao alternar de KMDF para UMDF, crie um projeto UMDF vazio no Visual Studio usando o modelo de projeto Driver do Modo de Usuário, Vazio (UMDF V2 ). Ao alternar de UMDF para KMDF, crie um projeto KMDF vazio no Visual Studio usando o modelo de projeto Driver do Modo Kernel, Vazio (KMDF ).

    O Visual Studio cria um projeto de driver vazio com as configurações apropriadas, juntamente com um arquivo INF direcionado para a estrutura especificada.

  2. Copie o código-fonte e os arquivos de cabeçalho do driver anterior para o novo projeto.

  3. Atualize seus arquivos de cabeçalho. Para UMDF, inclua Windows.h. Para KMDF, inclua Ntddk.h. O Wdf.h é comum ao KMDF e ao UMDF, portanto, inclua-o em ambos os tipos de drivers.

    Opcionalmente, use a macro do pré-processador _KERNEL_MODE para adicionar o cabeçalho correto do sistema condicionalmente:

    #ifndef _KERNEL_MODE
    // This is a user-mode driver
    #include <windows.h>
    
    #else
    // This is a kernel-mode driver
    #include <ntddk.h>
    #define NTSTRSAFE_LIB
    #include <ntstrsafe.h>
    #endif
    
    // This is a common WDF header (for both KMDF and UMDF)
    #include <wdf.h> 
    
  4. Atualize o código-fonte para remover ou compilar condicionalmente (usando a macro _KERNEL_MODE ) qualquer funcionalidade que não tenha suporte no modelo de driver de destino. Por exemplo:

    • Se o driver usar o rastreamento WPP, atualize a macro WPP_INIT_TRACING . Essa macro usa parâmetros diferentes no modo de usuário e no modo kernel.

      WPP_INIT_TRACING ( DriverObject, RegistryPath ); // KMDF and UMDF 2
      WPP_INIT_TRACING ( “<MyDriverNameString>” ); // UMDF 1
      

      Observe que, para o UMDF 2, você também precisa adicionar WPP_MACRO_USE_KM_VERSION_FOR_UM=1, conforme descrito em Como habilitar o Gravador de Rastreamento de Simulação no Visual Studio.

    • Se você estiver convertendo um driver KMDF que chama rotinas WDM, como ExAllocatePoolWithTag, substitua-as pelos métodos WDF correspondentes, como WdfMemoryCreate. Da mesma forma, se você estiver convertendo um driver UMDF que chama funções de modo de usuário, substitua-as por rotinas equivalentes do modo kernel.

    • Alguns métodos têm suporte apenas no KMDF, enquanto outros têm suporte apenas no UMDF. Para obter uma lista de todos os métodos do WDF (Windows Driver Frameworks) e sua aplicabilidade de estrutura, consulte Resumo dos métodos e retornos de chamada do WDF.