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
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.
Copie o código-fonte e os arquivos de cabeçalho do driver anterior para o novo projeto.
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>
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.