不得直接打开设备 的软件密钥。 与任何注册表项一样,这些密钥的位置或格式可能会在不同版本的 Windows 之间更改。
注释
只有在找到相应的设备后,才应打开设备的软件密钥。 有关此过程的详细信息,请参阅 枚举已安装的设备。
若要打开或创建设备的软件密钥,请遵循以下准则:
注释
您必须在设置参数时提供所请求的安全访问权限并确保符合所需的最低访问权限规定。 不能将此参数设置为KEY_ALL_ACCESS。 有关如何指定注册表访问权限的详细信息,请参阅 “安全地访问注册表项”。
若要打开现有软件密钥,请结合包含CM_REGISTRY_SOFTWARE的 RegDisposition_OpenExisting 和 ulFlags 的处置使用CM_Open_DevNode_Key,或使用 DIREG_DRV的 SetupDiOpenDevRegKey 和 KeyType 参数。
若要创建软件密钥,请使用CM_Open_DevNode_Key以及包含CM_REGISTRY_SOFTWARE的 RegDisposition_OpenAlways 和 ulFlags 的处置,或使用 DIREG_DRV的 SetupDiCreateDevRegKey 和 KeyType 参数。
内核模式调用方应使用 IoOpenDeviceRegistryKey 并将 DevInstKeyType 参数设置为PLUGPLAY_REGKEY_DRIVER。
修改设备软件密钥中的注册表值
不得修改设备软件密钥中以下注册表项(设备属性)的值:
- DriverDate
- DriverDateData
- DriverDesc
- 驱动版本
- InfPath
- InfSection
- InfSectionExt
- MatchingDeviceId
- 供应商名称
- EnumPropPages32
这些设备属性表示设备的安装状态。 直接修改这些属性可能会使设备的安装状态失效。 例如,更改与 INF 文件 相关的信息会使与设备和驱动程序签名信息等属性关联的驱动程序文件的信息失效。 更改驱动程序版本或驱动程序日期可能会中断 Windows 更新功能。
注释
从 Windows Vista 开始,作系统对这些属性施加“仅安装时间”访问限制。 可以为兼容性复制值,在设备安装过程中直接修改值不会影响内部状态。