É “HKLM” um apelido para “HKEY_LOCAL_MACHINE”?

61

HKLM é frequentemente usado como uma abreviação de HKEY_LOCAL_MACHINE . Um pouco inesperadamente isso também parece ser verdade quando pergunto reg para um 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

Existe uma referência afirmando que eles são equivalentes, ou que um é um alias para o outro? Ou existem, de fato, casos em que não são a mesma coisa?

    
por Joe Kearney 08.10.2014 / 13:47

4 respostas

78

Não, embora HKLM seja uma abreviação de HKEY_LOCAL_MACHINE, não há declaração oficial da Microsoft de que seja sempre equivalente. De fato, ele afirma explicitamente que a disponibilidade desses atalhos depende do software que está sendo usado e eles geralmente são chamados de "abreviaturas comumente usadas".

Há casos em que a abreviação de HKEY_LOCAL_MACHINE para HKLM não é permitida, por exemplo, quando define uma política :

The following conditions apply:

  1. The registry path must be enclosed by percent signs (%).
  2. The registry setting must be a REG_SZ or REG_EXPAND_SZ type. If the registry value contains environment variables, these will be expanded when the policy is evaluated.
  3. Do not use HKLM as an abbreviation for HKEY_LOCAL_MACHINE, or HKCU as an abbreviation for HKEY_CURRENT_USER.
  4. A registry path rule can also include a suffix path.

(Da documentação de Políticas de restrição de software , ousadia adicionada por mim.)

    
por 08.10.2014 / 16:15
4

Sim.

HKLM significa HKEY_LOCAL_MACHINE Variable.

E HKCU significa HKEY_CURRENT_USER.

Eles são a mesma coisa.

De acordo com Wikipédia :

There are seven predefined root keys, traditionally named according to their constant handles defined in the Win32 API, or by synonymous abbreviations (depending on applications):

  • HKEY_LOCAL_MACHINE or HKLM
  • HKEY_CURRENT_CONFIG or HKCC (only in Windows 9x and NT)
  • HKEY_CLASSES_ROOT or HKCR
  • HKEY_CURRENT_USER or HKCU
  • HKEY_USERS or HKU
  • HKEY_PERFORMANCE_DATA (only in Windows NT, but invisible in the Windows Registry Editor)
  • HKEY_DYN_DATA (only in Windows 9x, and visible in the Windows Registry Editor)
    
por 08.10.2014 / 14:03
4

Gostaria de acrescentar que, com o PowerShell, o HKLM existe como uma montagem para HKEY_LOCAL_MACHINE, como tal, é mutável. Exemplo

PS > Get-Item HKLM:
Name                           Property
----                           --------
HKEY_LOCAL_MACHINE

PS > Remove-PSDrive HKLM

PS > Get-Item HKLM:
Get-Item : Cannot find drive. A drive with the name 'HKLM' does not exist.
    
por 10.10.2014 / 04:02
2

Como Twinkles observa, é uma abreviação comumente usada. Eu não vejo nenhuma fonte explicitamente dizendo que não pode ser usado, mas eu encontrei uma tabela indicando as abreviações comumente usadas para as subárvores de registro do Windows 2000, que são na maior parte o mesmo que o conjunto atual (como do Windows 7). Aqui está o que eu descobri lá:

De Visão geral do Registro do Windows 2000 (modificado para formatação deste site):

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

Essa lista é apresentada em um artigo de suporte do XP , menos a subárvore de dados de desempenho (que eu acho que é agora ido e Pankaj / Wikipedia apoiar esse pensamento).

Há também a Referência do Registro do Windows , que eu vinculei à página Chaves predefinidas, que lista as várias subárvores, cada uma com links para sua página específica (a maioria das quais vai para as páginas do Windows Server 2003 por algum motivo). Eles listam as abreviações lá também, que são consistentes com o acima.

Nenhuma dessas páginas discute se as abreviações podem ser usadas na programação, o que me leva a acreditar que isso não é explicitamente declarado em nenhum lugar - mas é mais uma regra não declarada (não use abreviaturas se não tiver certeza de que elas vai funcionar).

    
por 10.10.2014 / 22:07