¿Es “HKLM” un alias para “HKEY_LOCAL_MACHINE”?

61

HKLMa menudo se usa como abreviatura de HKEY_LOCAL_MACHINE. De manera algo inesperada, esto también parece ser cierto cuando solicito regun valor.

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

¿Hay alguna referencia que afirme que son equivalentes, o que uno es un alias para el otro? ¿O hay, de hecho, casos en los que no son lo mismo?

Joe Kearney
fuente

Respuestas:

79

No, aunque HKLM es una abreviatura de HKEY_LOCAL_MACHINE, no hay una declaración oficial de Microsoft de que siempre sea equivalente. De hecho, declara explícitamente que la disponibilidad de estos accesos directos depende del software que se esté utilizando y generalmente se los conoce como "abreviaturas de uso común".

Hay casos en los que no se permite abreviar HKEY_LOCAL_MACHINE a HKLM, por ejemplo, al definir una política :

Se aplican las siguientes condiciones:

  1. La ruta del registro debe estar encerrada por signos de porcentaje (%).
  2. La configuración del registro debe ser un tipo REG_SZ o REG_EXPAND_SZ. Si el valor del registro contiene variables de entorno, estas se expandirán cuando se evalúe la política.
  3. No utilice HKLM como abreviatura de HKEY_LOCAL_MACHINE, ni HKCU como abreviatura de HKEY_CURRENT_USER.
  4. Una regla de ruta de registro también puede incluir una ruta de sufijo.

(De la documentación de las políticas de restricción de software , audacia agregada por mí).

Centelleos
fuente
3
Esta es la respuesta correcta. Los nombres completos son los únicos admitidos por el núcleo. Cualquier abreviatura es específica de la herramienta.
Andrew Medico
13
> declara explícitamente que la disponibilidad de estos accesos directos depende del software que se esté utilizando y, en general, se los conoce como "abreviaturas de uso común". Sería excelente si pudiera vincular a una fuente para eso. (No es que no confíe en usted, pero una fuente autorizada fortalece el reclamo)
Bob
1
tampoco puede usar estas abreviaturas en los .regarchivos, debe escribir el nombre completo dentro de los ámbitos cuadrados allí
@LightnessRacesinOrbit Siéntase libre de presentar alguna evidencia que demuestre que está equivocado.
Andrew Medico
4

Si.

HKLM significa HKEY_LOCAL_MACHINE Variable.

Y HKCU significa HKEY_CURRENT_USER.

Ellos son la misma cosa.

De acuerdo con Wikipedia :

Hay siete claves raíz predefinidas, tradicionalmente nombradas de acuerdo con sus identificadores constantes definidos en la API de Win32, o mediante abreviaturas sinónimos (según las aplicaciones):

  • HKEY_LOCAL_MACHINE o HKLM
  • HKEY_CURRENT_CONFIG o HKCC (solo en Windows 9x y NT)
  • HKEY_CLASSES_ROOT o HKCR
  • HKEY_CURRENT_USER o HKCU
  • HKEY_USERS o HKU
  • HKEY_PERFORMANCE_DATA (solo en Windows NT, pero invisible en el Editor del Registro de Windows)
  • HKEY_DYN_DATA (solo en Windows 9x, y visible en el Editor del Registro de Windows)
Kunal
fuente
16
Esto dice que son equivalentes coloquialmente, pero no que se definan como la misma cosa o alias; en particular "dependiendo de las aplicaciones".
Joe Kearney
También es una página de Wikipedia en su mayoría sin fuente, así que tómalo por lo que vale (probablemente sea preciso, pero no mejor que una página SO o SU de manera realista, y quizás peor).
Joe
Aunque son lo mismo, la abreviatura no es parte del estándar y, por lo tanto, no es equivalente puro.
4

Agregaría que con PowerShell, HKLM existe como un montaje para HKEY_LOCAL_MACHINE, por lo que es mutable. Ejemplo

PS> Obtener artículo HKLM:
Nombre de propiedad
---- --------
HKEY_LOCAL_MACHINE

PS> Remove-PSDrive HKLM

PS> Obtener artículo HKLM:
Get-Item: no se puede encontrar la unidad. No existe una unidad con el nombre 'HKLM'.
Steven Penny
fuente
2

Como señala Twinkles, es una abreviatura de uso común. No veo ninguna fuente que diga explícitamente que no se puede usar, pero encontré una tabla que indica las abreviaturas comúnmente utilizadas para los subárboles del registro de Windows 2000, que son en su mayoría los mismos que el conjunto actual (a partir de Windows 7). Esto es lo que encontré por ahí:

Desde la Descripción general del registro para Windows 2000 (modificado para formatear para este sitio):

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

Esa lista también se presenta en un artículo de soporte de XP , menos el subárbol de datos de rendimiento (que creo que ahora se ha ido y Pankaj / Wikipedia apoya ese pensamiento).

También está la Referencia del Registro de Windows , que vinculé a la página Claves predefinidas, que enumera los distintos subárboles, cada uno de los cuales tiene enlaces a su página específica (la mayoría de los cuales van a las páginas de Windows Server 2003 por alguna razón). También enumeran las abreviaturas allí, que son consistentes con lo anterior.

Ninguna de estas páginas discute si las abreviaturas se pueden usar en la programación, lo que me lleva a creer que no se menciona explícitamente en ninguna parte, sino que es más una regla no establecida (no use abreviaturas si no está seguro de que funcionarán) .

Joe
fuente