错误 MSB6006:运行时"link.exe"代码 1 退出 SDV(静态驱动程序验证程序)、Visual Studio 2019、SDK 10 内部版本 19041、Windows 10 内部版本



创建新的KMDF USB项目,打开visual studio 2019 v 16.11,进入File ->新→项目→选择内核模式驱动程序,USB (KMDF)。未经任何修改,本工程没有错误,施工时没有警告。当我们为这个项目运行SDV(静态驱动程序验证器)时,smvbuild.log显示这个错误。

C:Program Files (x86)Windows Kits10TOOLSSDVsmvbinlink.exe /ERRORREPORT:QUEUE /OUT:"C:UserstungpvtsourcereposUSB Driver2ReleaseUSBDriver2.sys" /VERSION:"10.0" /INCREMENTAL:NO /NOLOGO /WX /SECTION:"INIT,d" "C:Program Files (x86)Windows Kits10lib10.0.19041.0kmx86BufferOverflowFastFailK.lib" "C:Program Files (x86)Windows Kits10lib10.0.19041.0kmx86ntoskrnl.lib" "C:Program Files (x86)Windows Kits10lib10.0.19041.0kmx86hal.lib" "C:Program Files (x86)Windows Kits10lib10.0.19041.0kmx86wmilib.lib" "C:Program Files (x86)Windows Kits10libwdfkmdfx861.15WdfLdr.lib" "C:Program Files (x86)Windows Kits10libwdfkmdfx861.15WdfDriverEntry.lib" usbdex.lib ntstrsafe.lib "C:Program Files (x86)Windows Kits10lib10.0.19041.0kmx86wpprecorder.lib" /NODEFAULTLIB /MANIFEST:NO /DEBUG /PDB:"C:UserstungpvtsourcereposUSB Driver2ReleaseUSBDriver2.pdb" /SUBSYSTEM:NATIVE,"10.00" /Driver /OPT:REF /OPT:ICF /ENTRY:"FxDriverEntry@8" /RELEASE /IMPLIB:"C:UserstungpvtsourcereposUSB Driver2ReleaseUSBDriver2.lib" /MERGE:"_TEXT=.text;_PAGE=PAGE" /MACHINE:X86 /PROFILE /SAFESEH /guard:cf /kernel /IGNORE:4198,4010,4037,4039,4065,4070,4078,4087,4089,4221 /osversion:10.0 /pdbcompress /debugtype:pdata ReleaseDevice.obj
ReleaseDriver.obj
ReleaseQueue.obj

C:Program Files (x86)Microsoft Visual Studio2019EnterpriseMSBuildMicrosoftVCv160Microsoft.CppCommon.targets(1074,5): error MSB6006: "link.exe" exited with code 1. [C:UserstungpvtsourcereposUSB Driver2USB Driver2USB Driver2.vcxproj]
Done executing task "Link" -- FAILED.
Done building target "Link" in project "USB Driver2.vcxproj" -- FAILED.
Done Building Project "C:UserstungpvtsourcereposUSB Driver2USB Driver2USB Driver2.vcxproj" (rebuild target(s)) -- FAILED.

另外,当在命令行上运行link.exe时,Visual studio -> Tools -> Command Line -> Developer Command Prompt具有与上面相同的参数,它显示:

Failed to load Intercept.XML:
Could not find file 'c:program files (x86)windows kits10toolssdvsmvbin%BE%-Intercept.xml'.

我们已经在Windows系统环境中添加了BE和smv变量

variable name: BE , variable value: MSBuild
variable name: smv , variable value: C:Program Files (x86)Windows Kits10Toolssdvsmv

在项目属性中的链接器会话中,我们将Project properties -> Linker -> Input -> AdditionalDependency修改为

%(AdditionalDependencies);$(DDK_LIB_PATH)usbdex.lib;$(DDK_LIB_PATH)ntstrsafe.lib

然后我们可以传递命令行

C:Program Files (x86)Windows Kits10TOOLSSDVsmvbinlink.exe /ERRORREPORT:QUEUE /OUT:"C:UserstungpvtsourcereposUSB Driver2ReleaseUSBDriver2.sys" /VERSION:"10.0" /INCREMENTAL:NO /NOLOGO /WX /SECTION:"INIT,d" "C:Program Files (x86)Windows Kits10lib10.0.19041.0kmx86BufferOverflowFastFailK.lib" "C:Program Files (x86)Windows Kits10lib10.0.19041.0kmx86ntoskrnl.lib" "C:Program Files (x86)Windows Kits10lib10.0.19041.0kmx86hal.lib" "C:Program Files (x86)Windows Kits10lib10.0.19041.0kmx86wmilib.lib" "C:Program Files (x86)Windows Kits10libwdfkmdfx861.15WdfLdr.lib" "C:Program Files (x86)Windows Kits10libwdfkmdfx861.15WdfDriverEntry.lib" "C:Program Files (x86)Windows Kits10lib10.0.19041.0kmx86usbdex.lib" "C:Program Files (x86)Windows Kits10lib10.0.19041.0kmx86ntstrsafe.lib" "C:Program Files (x86)Windows Kits10lib10.0.19041.0kmx86wpprecorder.lib" /NODEFAULTLIB /MANIFEST:NO /DEBUG /PDB:"C:UserstungpvtsourcereposUSB Driver2ReleaseUSBDriver2.pdb" /SUBSYSTEM:NATIVE,"10.00" /Driver /OPT:REF /OPT:ICF /ENTRY:"FxDriverEntry@8" /RELEASE /IMPLIB:"C:UserstungpvtsourcereposUSB Driver2ReleaseUSBDriver2.lib" /MERGE:"_TEXT=.text;_PAGE=PAGE" /MACHINE:X86 /PROFILE /SAFESEH /guard:cf /kernel /IGNORE:4198,4010,4037,4039,4065,4070,4078,4087,4089,4221 /osversion:10.0 /pdbcompress /debugtype:pdata ReleaseDevice.obj
ReleaseDriver.obj
ReleaseQueue.obj

但是仍然运行SDV错误。

请帮我解决这个问题。谢谢。

===========================================================================

我更新到最新的SDK, WDK版本10.1.22000,更新visual studio 2019和模板驱动程序错误消失后,但我在我的项目中面临其他问题

sdv/smvcl.log 
c1 : fatal error C1252: Circular or missing dependency between plugins: 'PREfast Drivers Plugin' requires GUID '{EB170136-3433-4C16-AE1D-8998BA5CAB16}'.
有人能帮我吗?

嗨,我有这个问题(静态驱动程序验证器构建上的链接器错误)与WDK 10.0.22000(与visual studio 2019),这是我找到的解决方案:当宏NT_PROCESSOR_GROUPS在编译时定义时链接(必须重建所有),因此将此宏添加到预处理器定义中确实有效(至少对于我的设置)。

如果您现在或将来运行时遇到静态驱动程序验证器失败,这里有一个有用的提示:

在/debug打开的情况下运行SDV目标:so

msbuild /t:sdv /p:Inputs="/check:* /debug" pathtomyproject.vcxproj /p:Configuration=Release /p:Platform=x64 /maxCpuCount=8

将创建调试日志。链接器的输出在sdv子目录中找到命名为smvlink1.log。该目录中还有其他有用的日志文件(我花了很长时间才找到它们,但输出将我引导到上面提出的解决方案)。

你不是唯一一个在Visual Studio 2019中遇到SDV问题的人。在更新工具和重建之后,我用一个成熟的驱动程序遇到了这个问题。幸运的是,通常情况下,OSR的好人已经自己撞到了这堵墙,并找到了解决方案:

看起来,如果你试图在一个驱动程序项目上运行SDV,"在构建上启用代码分析"设置为YES, SDV将总是以你上面所示的方式失败。因此,修复方法是禁用Build上的代码分析,并确保将项目保存到磁盘上。然后运行SDV

我正在开发的驱动程序确实具有"在构建中启用代码分析"功能。打开。关闭它允许SDV成功构建它。