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 UMDF (User-Mode Driver Framework) 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 de Modo de Utilizador, Vazio (UMDF V2). Ao alternar de UMDF para KMDF, crie um projeto KMDF vazio no Visual Studio usando o Kernel Mode Driver, Empty (KMDF) modelo de projeto.

    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. Wdf.h é comum a KMDF e UMDF, portanto, inclua-o em ambos os tipos de drivers.

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

    #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 seja suportada no modelo de driver de destino. Por exemplo:

    • Se o seu driver usa rastreamento de WPP, atualize a macro WPP_INIT_TRACING. Esta macro usa diferentes parâmetros 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 UMDF 2, você também precisa adicionar WPP_MACRO_USE_KM_VERSION_FOR_UM=1, conforme descrito em Como habilitar o Inflight Trace Recorder 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 de modo kernel.

    • Alguns métodos são suportados apenas no KMDF, enquanto outros são suportados apenas no UMDF. Para obter uma lista de todos os métodos WDF (Windows Driver Frameworks) e sua aplicabilidade de estrutura, consulte Resumo de retornos de chamada e métodos WDF.