“HKLM” 是“HKEY_LOCAL_MACHINE” 的别名吗?

“HKLM” 是“HKEY_LOCAL_MACHINE” 的别名吗?

HKLM通常用作 的缩写HKEY_LOCAL_MACHINE。出乎意料的是,当我要求一个值时,这也似乎是正确的reg

C:\>reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "CurrentVersion"

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
    CurrentVersion    REG_SZ    6.1


C:\>reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "CurrentVersion"

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
    CurrentVersion    REG_SZ    6.1

是否有参考文献声称它们是等价的,或者其中一个是另一个的别名?或者,事实上,是否存在它们不是同一回事的情况?

答案1

不是,虽然 HKLM 是 HKEY_LOCAL_MACHINE 的缩写,但微软官方并没有声明它们始终是等效的。事实上,它明确指出这些快捷方式的可用性取决于所使用的软件,并且它们通常被称为“常用缩写”。

在某些情况下,不允许将 HKEY_LOCAL_MACHINE 缩写为 HKLM,例如定义策略

适用以下条件:

  1. 注册表路径必须用百分号 (%) 括起来。
  2. 注册表设置必须是 REG_SZ 或 REG_EXPAND_SZ 类型。如果注册表值包含环境变量,则在评估策略时将扩展这些变量。
  3. 请勿使用 HKLM 作为 HKEY_LOCAL_MACHINE 的缩写,或使用 HKCU 作为 HKEY_CURRENT_USER 的缩写。
  4. 注册表路径规则还可以包括后缀路径。

(来自软件限制策略(其中粗体部分是我加的。)

答案2

是的。

HKLM 代表 HKEY_LOCAL_MACHINE 变量。

HKCU 代表 HKEY_CURRENT_USER。

他们是一样的东西。

根据维基百科

有七个预定义的根键,传统上根据 Win32 API 中定义的常量句柄命名,或者使用同义缩写(取决于应用程序):

  • HKEY_LOCAL_MACHINE 或 HKLM
  • HKEY_CURRENT_CONFIG 或 HKCC(仅在 Windows 9x 和 NT 中)
  • HKEY_CLASSES_ROOT 或 HKCR
  • HKEY_CURRENT_USER 或 HKCU
  • HKEY_USERS 或 HKU
  • HKEY_PERFORMANCE_DATA(仅在 Windows NT 中,但在 Windows 注册表编辑器中不可见)
  • HKEY_DYN_DATA(仅在 Windows 9x 中,并在 Windows 注册表编辑器中可见)

答案3

我想补充一点,在 PowerShell 中,HKLM 作为 HKEY_LOCAL_MACHINE 的挂载而存在,因此它是可变的。示例

PS > 获取项目 HKLM:
名称属性
---- --------
键值对

PS > 删除 PSDrive HKLM

PS > 获取项目 HKLM:
Get-Item:找不到驱动器。名为“HKLM”的驱动器不存在。

答案4

正如 Twinkles 所指出的,这是一个常用的缩写。我没有看到任何资料明确指出它不能使用,但我确实找到了一个表格,其中列出了 Windows 2000 注册表子树的常用缩写,这些缩写与当前集合(截至 Windows 7)大致相同。以下是我在那里发现的内容:

Windows 2000 注册表概述(已修改以适合本网站的格式):

Table 16.1 Registry Subtrees
HKEY_CLASSES_ROOT  HKCR
HKEY_CURRENT_USER HKCU
HKEY_LOCAL_MACHINE HKLM
HKEY_USERS HKU
HKEY_CURRENT_CONFIG HKCC
HKEY_PERFORMANCE_DATA No commonly used abbreviation

该列表以XP 支持文章同样,减去性能数据子树(我认为它现在已经消失了,并且 Pankaj/Wikipedia 支持这种想法)。

还有Windows 注册表参考,我将其链接到了预定义键页面,该页面列出了各种子树,每个子树都有指向其特定页面的链接(出于某种原因,大多数子树都指向 Windows Server 2003 页面)。他们还在那里列出了缩写,与上面的一致。

然而,这些页面都没有讨论缩写是否可以在编程中使用,这使我相信这在任何地方都没有明确说明 - 但更像是一个未说明的规则(如果您不确定它们是否有效,请不要使用缩写)。

相关内容