显示驱动程序 INF 文件必须将与软件相关的所有注册表设置添加到即插即用 (PnP) 软件密钥。 PnP 软件密钥(也称为驱动程序密钥)存储跨系统重启保留的特定于驱动程序的配置数据。
对于显示适配器,软件密钥是在显示适配器设备类 GUID {4d36e968-e325-11ce-bfc1-08002be10318}下创建的。
有关详细信息,请参阅 即插即用注册表例程。
基本 INF 结构
显示驱动程序 INF 文件通常非常大且复杂,包含适用于不同体系结构、设备模型、文件复制、服务安装等的许多部分。 以下示例仅显示与将软件设置添加到 PnP 软件密钥相关的注册表相关部分。
显示驱动程序 INF 文件必须包含用于定义要添加的注册表设置的部分。 下面是显示基本结构的简化片段:
[Xxx.Mfg]
"RADEON 8500/RADEON 8500LE (R200 LDDM)" = R200_R200, PCI\VEN_1002&DEV_514c&SUBSYS_003a1002
[R200_R200]
Include=msdv.inf
CopyFiles=R200.Miniport, R200.Display
AddReg = R200_SoftwareDeviceSettings
AddReg = R200_R200_SoftwareDeviceSettings
DelReg = R200_RemoveDeviceSettings
; ... many other directives omitted ...
此片段显示:
- [Xxx.Mq]:将硬件 ID 映射到安装部分的制造商/型号部分
- [R200_R200]:DDInstall 节描述要为该设备安装的具体内容。
- AddReg 指令:用于定义要添加哪一个注册表值的节
- DelReg 指令:引用用于定义要删除的注册表值的部分(对于升级方案)
定义注册表设置
指令 AddReg 引用包含实际注册表值的节。 下面是一个示例,其中显示了所引用部分的内容。
注意:完整的显示驱动程序 INF 将包含许多其他注册表值;这些示例仅显示最常见的软件密钥设置:
[R200_SoftwareDeviceSettings]
HKR,, InstalledDisplayDrivers, %REG_MULTI_SZ%, R200umd
HKR,, UserModeDriverName, %REG_SZ%, %13%\R200umd.dll
HKR,, VgaCompatible, %REG_DWORD%, 0
HKR,, Acceleration.Level, %REG_DWORD%, 0
HKR,, CapabilityOverride, %REG_DWORD%, 0x8
[R200_R200_SoftwareDeviceSettings]
HKR,, VideoDebugLevel, %REG_DWORD%, 0
; ... device-specific settings ...
注册表值格式
每个注册表项都遵循以下格式:
HKR, [subkey], value-name, flags, value
Where:
- HKR:表示硬件/软件密钥根(PnP 软件密钥)
- 子项:可选子项路径(在大多数情况下为空)
- value-name:注册表值的名称
- 标志:数据类型常量(如 %REG_DWORD%、%REG_SZ%、%REG_MULTI_SZ%)
- 值:要存储的实际数据
通用注册表设置
显示驱动程序通常设置以下注册表值:
| 值名称 | 类型 | 目的 |
|---|---|---|
| 已安装的显示驱动程序 | REG_MULTI_SZ | 用户模式驱动程序 DLL 名称列表(没有 .dll 扩展) |
| UserModeDriverName | REG_SZ | 主要用户模式驱动程序 DLL 的路径 |
| VgaCompatible | REG_DWORD | 指示 VGA 兼容性(0 = 不兼容,1 = 兼容) |
| 加速度水平 | REG_DWORD | 图形加速级别(0 = 完整,5 = 无) |
| CapabilityOverride | REG_DWORD | 用于替代硬件功能的位掩码 |
字符串常量
在 INF 文件的 [字符串] 节中定义注册表类型常量:
[Strings]
REG_SZ = 0x00000000
REG_MULTI_SZ = 0x00010000
REG_DWORD = 0x00010001
多个设备示例
如果驱动程序包支持多个设备模型,请使用特定于设备的 AddReg 部分:
[Manufacturer]
%Contoso%=Contoso.Mfg, NTamd64
[Contoso.Mfg.NTamd64]
%Device1.DeviceDesc% = Device1_Install, PCI\VEN_1234&DEV_0001
%Device2.DeviceDesc% = Device2_Install, PCI\VEN_1234&DEV_0002
[Device1_Install]
CopyFiles = Miniport.Files, UMD.Files
AddReg = Common_Settings, Device1_Settings
[Device2_Install]
CopyFiles = Miniport.Files, UMD.Files
AddReg = Common_Settings, Device2_Settings
[Common_Settings]
HKR,, InstalledDisplayDrivers, %REG_MULTI_SZ%, ContosoUMD
HKR,, VgaCompatible, %REG_DWORD%, 0
[Device1_Settings]
HKR,, DeviceSpecificValue, %REG_DWORD%, 1
[Device2_Settings]
HKR,, DeviceSpecificValue, %REG_DWORD%, 2
最佳做法
- 将 HKR 用于软件设置:始终使用 HKR(非绝对路径),以确保设置转到正确的 PnP 软件密钥
- 组合通用设置:对所有设备型号的通用设置使用共享的 AddReg 部分。
- 使用特定于设备的分区:为不同设备模型之间的设置创建单独的 AddReg 节
- 升级时清理:升级驱动程序时,使用 DelReg 节删除过时的注册表值
- 文档自定义值:在 INF 文件中添加注释,说明任何特定于供应商或非标准注册表值