![“HKLM” 是“HKEY_LOCAL_MACHINE” 的别名吗?](https://linux22.com/image/1426011/%E2%80%9CHKLM%E2%80%9D%20%E6%98%AF%E2%80%9CHKEY_LOCAL_MACHINE%E2%80%9D%20%E7%9A%84%E5%88%AB%E5%90%8D%E5%90%97%EF%BC%9F.png)
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,例如定义策略:
适用以下条件:
- 注册表路径必须用百分号 (%) 括起来。
- 注册表设置必须是 REG_SZ 或 REG_EXPAND_SZ 类型。如果注册表值包含环境变量,则在评估策略时将扩展这些变量。
- 请勿使用 HKLM 作为 HKEY_LOCAL_MACHINE 的缩写,或使用 HKCU 作为 HKEY_CURRENT_USER 的缩写。
- 注册表路径规则还可以包括后缀路径。
(来自软件限制策略(其中粗体部分是我加的。)
答案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 页面)。他们还在那里列出了缩写,与上面的一致。
然而,这些页面都没有讨论缩写是否可以在编程中使用,这使我相信这在任何地方都没有明确说明 - 但更像是一个未说明的规则(如果您不确定它们是否有效,请不要使用缩写)。