Является ли «HKLM» псевдонимом «HKEY_LOCAL_MACHINE»?

61

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

Есть ли ссылка, утверждающая, что они эквивалентны, или что один является псевдонимом для другого? Или есть на самом деле случаи, когда они не одно и то же?

Джо Кирни
источник

Ответы:

79

Нет, хотя HKLM - это аббревиатура от HKEY_LOCAL_MACHINE, от Microsoft нет официального заявления о том, что он всегда эквивалентен. Фактически в нем прямо говорится, что доступность этих ярлыков зависит от используемого программного обеспечения, и их обычно называют «часто используемыми сокращениями».

Существуют случаи, когда сокращение HKEY_LOCAL_MACHINE до HKLM не разрешено, например, при определении политики :

Применяются следующие условия:

  1. Путь к реестру должен быть заключен в знаки процента (%).
  2. Параметр реестра должен иметь тип REG_SZ или REG_EXPAND_SZ. Если значение реестра содержит переменные среды, они будут расширены при оценке политики.
  3. Не используйте HKLM в качестве сокращения для HKEY_LOCAL_MACHINE или HKCU в качестве сокращения для HKEY_CURRENT_USER.
  4. Правило пути реестра также может включать путь суффикса.

(Из документации Политики ограниченного использования программ смелость добавлена ​​мной.)

Twinkles
источник
3
Это правильный ответ. Полные имена - единственные, поддерживаемые ядром. Любые сокращения зависят от инструмента.
Эндрю Медико
13
> в нем прямо говорится, что доступность этих ярлыков зависит от используемого программного обеспечения, и их обычно называют «широко используемыми сокращениями». Было бы здорово, если бы вы могли ссылаться на источник для этого. (Не то, чтобы я вам не доверял, но авторитетный источник усиливает претензии.)
Боб
1
также вы не можете использовать эти сокращения в .regфайлах, вы должны написать полное имя внутри квадратных областей там
@LightnessRacesinOrbit Не стесняйтесь приводить доказательства, доказывающие, что это не так.
Эндрю Медико
4

Да.

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)
Кунал
источник
16
Это говорит о том, что они в разговорной речи эквивалентны, но не то, что они определены как одно и то же или псевдонимы; в частности "в зависимости от приложений".
Джо Кирни
Это также в основном страница из Википедии без источников информации, так что возьмите это за то, что оно того стоит (вероятно, точное, но не лучше, чем страница SO или SU в реальности, а может, и хуже).
Джо
Хотя это одно и то же, сокращение не является частью стандарта и, следовательно, не является чистым эквивалентом.
4

Я бы добавил, что в PowerShell HKLM существует как монтирование для HKEY_LOCAL_MACHINE, так как оно является изменчивым. пример

PS> Get-Item HKLM:
Название недвижимости
---- --------
HKEY_LOCAL_MACHINE

PS> Удалить-PSDrive HKLM

PS> Get-Item HKLM:
Get-Item: не удается найти диск. Диск с именем «HKLM» не существует.
Стивен Пенни
источник
2

Как отмечает 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 , за исключением поддерева Performance Data (которое, я думаю, уже исчезло, и Pankaj / Wikipedia поддерживают эту мысль).

Существует также Справочник по реестру Windows , который я связал со страницей «Предопределенные ключи», где перечислены различные поддеревья, каждое из которых имеет ссылки на свою конкретную страницу (большинство из которых по какой-то причине переходят на страницы Windows Server 2003). Там также перечислены аббревиатуры, соответствующие приведенному выше.

Однако ни на одной из этих страниц не обсуждается возможность использования аббревиатур в программировании, что заставляет меня полагать, что это нигде явно не указано, но является скорее неустановленным правилом (не используйте аббревиатуры, если вы не уверены, что они будут работать) ,

Джо
источник