如何将 KMDF 驱动程序转换为 UMDF 2 驱动程序 (,反之亦然)

本主题介绍如何将 Kernel-Mode Driver Framework (KMDF) 驱动程序转换为 User-Mode Driver Framework (UMDF) 版本 2 驱动程序,反之亦然。

使用 Visual Studio 的驱动程序转换

  1. 从 KMDF 切换到 UMDF 时,请使用 用户模式驱动程序、空 (UMDF V2) 项目模板在 Visual Studio 中创建空的 UMDF 项目。 从 UMDF 切换到 KMDF 时,请使用 内核模式驱动程序、空 (KMDF) 项目模板在 Visual Studio 中创建空 KMDF 项目。

    Visual Studio 会创建一个具有相应设置的空驱动程序项目,以及一个面向指定框架的 INF 文件。

  2. 将以前的驱动程序中的源代码和头文件复制到新项目中。

  3. 更新头文件。 对于 UMDF,请包含 Windows.h。 对于 KMDF,包括 Ntddk.h。 Wdf.h 对 KMDF 和 UMDF 都是通用的,因此请将其包含在这两种类型的驱动程序中。

    (可选)使用 _KERNEL_MODE 预处理器宏按条件添加正确的系统标头:

    #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. 更新源代码,以使用 _KERNEL_MODE 宏) 目标驱动程序模型中不支持的任何功能删除或有条件地编译 ( 。 例如:

    • 如果驱动程序使用 WPP 跟踪,请更新 WPP_INIT_TRACING 宏。 此宏在用户模式和内核模式下采用不同的参数。

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

      请注意,对于 UMDF 2,还需要添加 WPP_MACRO_USE_KM_VERSION_FOR_UM=1,如 如何在 Visual Studio 中启用机上跟踪记录器中所述。

    • 如果要转换调用 WDM 例程(如 ExAllocatePoolWithTag)的 KMDF 驱动程序,请将这些驱动程序替换为相应的 WDF 方法,例如 WdfMemoryCreate。 同样,如果要转换调用用户模式函数的 UMDF 驱动程序,请将这些驱动程序替换为等效的内核模式例程。

    • 某些方法仅在 KMDF 中受支持,而其他方法仅在 UMDF 中受支持。 有关 (WDF) 方法及其框架适用性的所有 Windows 驱动程序框架的列表,请参阅 WDF 回调和方法摘要