Conversión de un controlador KMDF a un controlador UMDF 2 (y viceversa)
En este tema se describe cómo convertir un controlador de Kernel-Mode Driver Framework (KMDF) en un controlador de User-Mode Driver Framework (UMDF) versión 2 y viceversa.
Conversión de controladores mediante Visual Studio
Al cambiar de KMDF a UMDF, cree un proyecto UMDF vacío en Visual Studio mediante la plantilla de proyecto Controlador en modo de usuario, Vacío (UMDF V2). Al cambiar de UMDF a KMDF, cree un proyecto KMDF vacío en Visual Studio mediante la plantilla de proyecto Controlador en modo kernel, Vacío (KMDF).
Visual Studio crea un proyecto de controlador vacío con la configuración adecuada, junto con un archivo INF destinado al marco especificado.
Copie el código fuente y los archivos de encabezado del controlador anterior en el nuevo proyecto.
Actualice los archivos de encabezado. Para UMDF, incluya Windows.h. Para KMDF, incluya Ntddk.h. Wdf.h es común tanto para KMDF como para UMDF, por lo que puede incluirlo en ambos tipos de controladores.
Opcionalmente, use la macro de preprocesador _KERNEL_MODE para agregar el encabezado del sistema correcto de forma condicional:
#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>
Actualice el código fuente para quitar o compilar condicionalmente (mediante la macro _KERNEL_MODE ) cualquier funcionalidad que no se admita en el modelo de controlador de destino. Por ejemplo:
Si el controlador usa el seguimiento de WPP, actualice la macro WPP_INIT_TRACING . Esta macro toma parámetros diferentes en modo de usuario y modo kernel.
WPP_INIT_TRACING ( DriverObject, RegistryPath ); // KMDF and UMDF 2 WPP_INIT_TRACING ( “<MyDriverNameString>” ); // UMDF 1
Tenga en cuenta que, para UMDF 2, también debe agregar
WPP_MACRO_USE_KM_VERSION_FOR_UM=1
, como se describe en Habilitación de la grabadora de seguimiento en La luz en Visual Studio.Si va a convertir un controlador KMDF que llama a rutinas de WDM como ExAllocatePoolWithTag, reemplácelas por los métodos WDF correspondientes, como WdfMemoryCreate. De forma similar, si va a convertir un controlador UMDF que llama a funciones en modo usuario, reemplácelos por rutinas equivalentes en modo kernel.
Algunos métodos solo se admiten en KMDF, mientras que otros solo se admiten en UMDF. Para obtener una lista de todos los métodos de Windows Driver Framework (WDF) y su aplicabilidad del marco, consulta Resumen de devoluciones de llamada y métodos de WDF.