对于系统策略而言,HKLM 注册表是否优先于 HKCU?

对于系统策略而言,HKLM 注册表是否优先于 HKCU?

我似乎找不到任何明确的依据,因为有些资料说:

HKLM\SOFTWARE\Classes如果和中都存在一个条目HKCU\SOFTWARE\Classes,则 中的条目的值HKCU\SOFTWARE\Classes优先。

但是,我无法判断这条规则是否适用于系统策略;具体来说,我关心的是DisableLockWorkstation

HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System
HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System

如果两者存在且相互冲突,那么哪一个应该优先,并且是否存在一般规则?

答案1

引自维基百科 Windows 注册表

HKEY_LOCAL_MACHINE(本地计算机特定配置数据)和 HKEY_CURRENT_USER(用户特定配置数据)节点具有相似的结构;用户应用程序通常首先在“HKEY_CURRENT_USER\Software\Vendor's name\Application's name\Version\Setting name”中查找其设置,如果未找到该设置,则在 HKEY_LOCAL_MACHINE 键下的同一位置查找。

但是,对于管理员强制执行的策略设置,情况可能相反,在这种情况下,HKLM 可能优先于 HKCU。Windows 徽标计划对存储不同类型用户数据的位置有具体要求,并且必须遵循最小特权的概念,以便使用应用程序时不需要管理员级别的访问权限。

不幸的是,我认为这个问题没有明确的答案,所以一切都取决于所讨论的程序。

看起来用户应用程序会优先使用 HKCU,而对于非用户特定的策略,Windows 会优先使用 HKLM。然而,规则并不是一成不变的,可能存在大量例外情况。

Windows 徽标计划的维基百科链接已过期,但我设法找到了 针对 Windows XP 应用程序规范设计 (存档文章),涉及上述“Windows 徽标计划”,其中包含以下规则,这些规则总体上支持上述内容:

使用注册表

应用程序还可以使用注册表来存储读/写应用程序数据和配置文件。

  • HKCU 注册表配置单元适合存储少量数据(约 64K)以及针对每个用户的策略设置。
  • 避免在运行时写入 HKLM,因为受限用户默认对整个 HKLM 树具有只读访问权限。此外,HKLM 不支持漫游。
  • 较大的基于文件的数据应放置在应用程序数据文件夹中。例如,Internet Explorer 的临时 Internet 缓存存储在用户配置文件中,而不是注册表中。
  • 在安装时,应用程序在 HKCU 和 HKLM 上存储的总空间不得超过 128K。请注意,HKEY_CLASSES_ROOT 不包含在内。

这是我能找到的最早的关于使用注册表的指南文档。我不知道这些指南的执行情况如何,也不知道现在的执行情况如何。

答案2

这里没有铁律。优先级完全取决于程序员的决定,因此不同系统之间会有所不同,有时甚至同一开发人员的不同程序之间也会有所不同。

根据经验,应用程序更喜欢 HKCU,因为它更具体。如果用户有具体设置,那么它可能比一般设置更适合他,这是合乎逻辑的。但是,例如。\Run 条目首先从 HKLM 读取,并且许多策略优先考虑 HKLM 设置而不是 HKCU。

考虑到这DisableLockWorkstation是一项政策,我认为在这种情况下 HKLM 将优先。但除了在实际系统上进行测试外,没有其他方法可以判断。

相关内容