如何解决Windows 11 24H2(26100)INF验证的1304非相对键错误
解决Windows HLK INF验证错误1304与驱动自动加载失败问题
问题场景
在Windows 11 24H2(版本26100)环境下执行Windows HLK INF验证测试,使用Windows工具包中的InfVerif.exe运行命令:
infverif.exe /u "绝对INF文件路径"
原INF的AddReg指令条目如下:
HKLM, %SmartCardName% HKLM, %SmartCardName%,"ValueName1",0x00000001,"ValueData1" HKLM, %SmartCardName%,"ValueName2",0x00000001,"ValueData2"
验证时触发错误代码1304:发现使用非相对键的旧式AddReg操作。将非相对键HKLM改为相对键HKR后,INF验证通过,但驱动自动加载失败,对应注册表项未创建。
错误原因
- HLK的InfVerif工具强制要求现代INF避免在核心安装节(如
[DDInstall])直接使用非相对根键(如HKLM),这类写法属于旧式INF规范,会触发1304错误。 - 直接替换为
HKR后,HKR默认指向驱动服务的注册表路径(HKLM\SYSTEM\CurrentControlSet\Services\<服务名>),而非原%SmartCardName%指定的路径,导致注册表项写入位置错误,驱动加载时无法找到所需配置,最终加载失败。
解决方案
通过重构INF结构,使用根键特定的AddReg节同时满足HLK验证要求和驱动正常加载需求,具体步骤如下:
1. 确认字符串常量定义
确保%SmartCardName%已在[Strings]节中定义(替换为实际注册表路径):
[Strings] SmartCardName="SOFTWARE\YourSmartCardDriver"
2. 重构AddReg指令到专用节
将原直接写在[DDInstall]节的HKLM条目,移到以[<DDInstall节名>.HKLM]命名的专用节中,并在核心安装节通过AddReg指令引用该节:
[SmartCard_Install] ; 替换为你实际的DDInstall节名 Include=mfplat.inf ; 根据驱动依赖调整 Needs=MFPLAT.Device AddReg=SmartCard_HKLM_AddReg ; 引用HKLM专用AddReg节 [SmartCard_HKLM_AddReg] HKLM, %SmartCardName%,,0x00000000 ; 创建目标注册表键 HKLM, %SmartCardName%,"ValueName1",0x00000001,"ValueData1" HKLM, %SmartCardName%,"ValueName2",0x00000001,"ValueData2"
3. 完善驱动服务配置
添加服务注册节,确保系统能正确识别并加载驱动:
[SmartCard_Install.Services] AddService=SmartCardSvc,0x00000002,SmartCardSvc_Inst ; 0x2表示服务与设备关联 [SmartCardSvc_Inst] DisplayName="Smart Card Driver Service" ServiceType=1 ; SERVICE_KERNEL_DRIVER StartType=3 ; SERVICE_DEMAND_START(按需启动,可改为2设置自动启动) ErrorControl=1 ; SERVICE_ERROR_NORMAL ServiceBinary=%12%\YourDriver.sys ; %12%对应系统system32\drivers目录
验证步骤
- 重新运行
infverif.exe /u "绝对INF文件路径",确认错误1304消失; - 安装驱动后,检查
HKLM\%SmartCardName%路径下是否存在目标注册表项; - 启动驱动服务,确认驱动正常加载。
内容的提问来源于stack exchange,提问作者Hanish Gopi
相关产品推荐
相关产品推荐

