Czy „HKLM” to alias „HKEY_LOCAL_MACHINE”?

61

HKLMjest często używany jako skrót HKEY_LOCAL_MACHINE. Nieoczekiwanie wydaje się to być prawdą, gdy proszę rego wartość.

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

Czy istnieje odniesienie potwierdzające, że są one równoważne lub że jeden jest aliasem dla drugiego? Czy też są przypadki, w których nie są tym samym?

Joe Kearney
źródło

Odpowiedzi:

79

Nie, chociaż HKLM jest skrótem dla HKEY_LOCAL_MACHINE, nie ma oficjalnego oświadczenia firmy Microsoft, że zawsze jest równoważne. W rzeczywistości wyraźnie stwierdza, że ​​dostępność tych skrótów zależy od używanego oprogramowania i są one ogólnie nazywane „powszechnie używanymi skrótami”.

Są przypadki, w których skrócenie HKEY_LOCAL_MACHINE do HKLM jest niedozwolone, na przykład podczas definiowania polityki :

Obowiązują następujące warunki:

  1. Ścieżka rejestru musi być otoczona znakami procentowymi (%).
  2. Ustawienie rejestru musi być typu REG_SZ lub REG_EXPAND_SZ. Jeśli wartość rejestru zawiera zmienne środowiskowe, zostaną one rozszerzone podczas oceny zasady.
  3. Nie używaj HKLM jako skrótu dla HKEY_LOCAL_MACHINE ani HKCU jako skrótu dla HKEY_CURRENT_USER.
  4. Reguła ścieżki rejestru może również zawierać ścieżkę sufiksu.

(Z dokumentacji zasad ograniczeń oprogramowania dodałem śmiałość).

Migoczą
źródło
3
To jest poprawna odpowiedź. Jedyne pełne nazwy są obsługiwane przez jądro. Wszelkie skróty są specyficzne dla narzędzia.
Andrew Medico,
13
> wyraźnie stwierdza, że ​​dostępność tych skrótów zależy od używanego oprogramowania i są one ogólnie nazywane „powszechnie używanymi skrótami”. Byłoby wspaniale, gdybyś mógł podać link do źródła tego. (Nie dlatego, że ci nie ufam, ale wiarygodne źródło czyni roszczenie silniejszym.)
Bob
1
także nie możesz używać tych skrótów w .regplikach, musisz tam wpisać pełną nazwę w kwadratowych zakresach
@LightnessRacesinOrbit Zapraszam do przedstawienia dowodów potwierdzających, że jest to błąd.
Andrew Medico,
4

Tak.

HKLM oznacza zmienną HKEY_LOCAL_MACHINE.

A HKCU oznacza HKEY_CURRENT_USER.

To są te same rzeczy.

Według Wikipedii :

Istnieje siedem predefiniowanych kluczy głównych, tradycyjnie nazwanych zgodnie z ich stałymi uchwytami zdefiniowanymi w Win32 API lub skrótami synonimicznymi (w zależności od aplikacji):

  • HKEY_LOCAL_MACHINE lub HKLM
  • HKEY_CURRENT_CONFIG lub HKCC (tylko w Windows 9x i NT)
  • HKEY_CLASSES_ROOT lub HKCR
  • HKEY_CURRENT_USER lub HKCU
  • HKEY_USERS lub HKU
  • HKEY_PERFORMANCE_DATA (tylko w Windows NT, ale niewidoczny w Edytorze rejestru Windows)
  • HKEY_DYN_DATA (tylko w Windows 9x i widoczne w Edytorze rejestru Windows)
Kunal
źródło
16
Oznacza to, że są one potocznie równoważne, ale nie są zdefiniowane jako to samo lub aliasy; w szczególności „w zależności od aplikacji”.
Joe Kearney
Jest to również strona Wikipedii, w której większość nie pochodzi z zasobów, więc weź to za to, co jest warte (prawdopodobnie dokładne, ale nie lepsze niż strona SO lub SU realistycznie, a być może gorsze).
Joe
Chociaż są one tym samym, skrót nie jest częścią standardu, a zatem nie jest czystym odpowiednikiem.
4

Dodałbym, że w PowerShell HKLM istnieje jako mount dla HKEY_LOCAL_MACHINE i jako taki można go modyfikować. Przykład

PS> Get-Item HKLM:
Nazwa właściwości
---- --------
HKEY_LOCAL_MACHINE

PS> Usuń-PSDrive HKLM

PS> Get-Item HKLM:
Get-Item: Nie można znaleźć napędu. Dysk o nazwie „HKLM” nie istnieje.
Steven Penny
źródło
2

Jak zauważa Twinkles, jest to powszechnie używany skrót. Nie widzę żadnego źródła, które wyraźnie powiedziałoby, że nie można go użyć, ale znalazłem tabelę wskazującą często używane skróty w poddrzewach rejestru Windows 2000, które są w większości takie same jak bieżący zestaw (od Windows 7). Oto, co tam znalazłem:

Z przeglądu rejestru dla systemu Windows 2000 (zmodyfikowanego pod kątem formatowania tej witryny):

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

Ta lista jest również przedstawiona w artykule na temat XP , pomijając poddrzewo Performance Data (które, jak myślę, już zniknęło, i wsparcie Pankaj / Wikipedia, które tak myślało).

Istnieje również odniesienie do rejestru systemu Windows , które podłączyłem do strony Predefined Keys, która zawiera listę różnych poddrzewa, z których każde zawiera łącza do określonej strony (z których większość z jakiegoś powodu prowadzi do stron systemu Windows Server 2003). Podają tam również skróty, które są zgodne z powyższymi.

Żadna z tych stron nie omawia jednak, czy skrótów można używać w programowaniu, co prowadzi mnie do przekonania, że ​​nigdzie nie jest to wyraźnie określone - ale jest bardziej nieokreśloną regułą (nie używaj skrótów, jeśli nie jesteś pewien, że będą działać) .

Joe
źródło