You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VS2019开发KMDF驱动引入DMF库报错,求正确配置方法

KMDF驱动项目引入DMF编译错误的解决方法

问题背景

使用Visual Studio 2019开发Windows 10 KMDF驱动时,参考同类项目做法,已将DMF克隆到同目录并完成多架构编译,但自行配置包含目录、库目录后,编译原本正常的驱动出现200+错误(如重定义、语法错误等),仅在使用DMF API时触发。

自行配置的内容:

  • 包含目录(C/C++ -> 常规 -> 附加包含目录):
    • C:\Users\me\source\repos\KMDF\DMF\Dmf\Framework
    • C:\Users\me\source\repos\KMDF\DMF\Dmf\Modules.Library
    • C:\Users\me\source\repos\KMDF\DMF\Dmf\Modules.Library.Tests
    • C:\Users\me\source\repos\KMDF\DMF\Dmf\Modules.Template
  • 库目录(链接器 -> 常规 -> 附加库目录):
    • C:\Users\me\source\repos\KMDF\DMF\Release\x64\lib\DmfK
  • 附加依赖项(链接器 -> 输入 -> 附加依赖项):
    • DmfK.lib

部分错误示例:

Severity    Code    Description Project File    Line    Suppression State
Error (active)  E1389   redeclaration cannot add dllexport/dllimport to "WdmlibRtlInitUnicodeStringEx" (declared at line 417 of "C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\km\wdmsec.h")  KMDF    C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\km\ntifs.h  2417    
Error   C2371   'PEPROCESS': redefinition; different basic types    KMDF    C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\km\ntifs.h  85  
Error   C2371   'PETHREAD': redefinition; different basic types KMDF    C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\km\ntifs.h  86  
Error   C2375   'WdmlibRtlInitUnicodeStringEx': redefinition; different linkage KMDF    C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\km\ntifs.h  2417    
Error   C2061   syntax error: identifier 'BufferPool_SourceSettings'    KMDF    C:\Users\me\source\repos\KMDF\DMF\Dmf\Modules.Library\Dmf_BufferQueue.h 43  
Error   C2059   syntax error: '}'   KMDF    C:\Users\me\source\repos\KMDF\DMF\Dmf\Modules.Library\Dmf_BufferQueue.h 47  
Error   C2143   syntax error: missing ')' before '*'    KMDF    C:\Users\me\source\repos\KMDF\DMF\Dmf\Modules.Library\Dmf_BufferQueue.h 56  
Error   C2143   syntax error: missing '{' before '*'    KMDF    C:\Users\me\source\repos\KMDF\DMF\Dmf\Modules.Library\Dmf_BufferQueue.h 56  
Error   C2059   syntax error: ')'   KMDF    C:\Users\ME\source\repos\KMDF\DMF\Dmf\Modules.Library\Dmf_BufferQueue.h 57  

正确的DMF引入配置步骤

1. 精简并调整包含目录

删除Modules.Library.Tests和Modules.Template目录(测试、模板模块无需引入),仅保留必要目录:

  • C:\Users\me\source\repos\KMDF\DMF\Dmf\Framework
  • C:\Users\me\source\repos\KMDF\DMF\Dmf\Modules.Library

关键操作:在VS中将这两个目录的优先级调整为低于Windows SDK包含目录(通过上移/下移按钮调整),避免头文件加载顺序冲突导致重定义。

2. 添加预处理器定义

在项目属性 -> C/C++ -> 预处理器 -> 预处理器定义中添加:

  • DMF_IN_DRIVER
  • 确保与DMF编译时的预处理器定义一致(如_WIN64等平台宏)

3. 优化库目录与依赖项

  • 库目录避免硬编码路径,使用VS宏适配不同配置:
    • $(SolutionDir)..\DMF\$(Configuration)\$(Platform)\lib\DmfK
  • 附加依赖项保留DmfK.lib,但需确保当前项目的配置(Debug/Release)、平台(x64/Win32)与DMF编译产物完全匹配。

4. 规范头文件引入

不要单独引入DMF单个头文件,统一在驱动主头文件或源文件顶部引入:

#include <DmfModules.Library.h>

该头文件会自动加载所有必要的框架和库模块头文件,避免依赖缺失引发语法错误。

5. 验证版本一致性

确认DMF的DmfK项目编译时使用的Windows SDK版本、KMDF版本与当前驱动项目完全一致,版本不匹配会导致大量编译错误。


内容的提问来源于stack exchange,提问作者IgnoreExeption

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 06:05:28