"HKLM" é um alias para "HKEY_LOCAL_MACHINE"?

61

HKLMé frequentemente usado como uma abreviação de HKEY_LOCAL_MACHINE. Um tanto inesperadamente, isso também parece ser verdade quando peço regum 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 há, de fato, casos em que não são a mesma coisa?

Joe Kearney
fonte

Respostas:

79

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

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

As seguintes condições se aplicam:

  1. O caminho do registro deve ser delimitado por sinais de porcentagem (%).
  2. A configuração do registro deve ser do tipo REG_SZ ou REG_EXPAND_SZ. Se o valor do registro contiver variáveis ​​de ambiente, elas serão expandidas quando a política for avaliada.
  3. Não use HKLM como uma abreviação de HKEY_LOCAL_MACHINE ou HKCU como uma abreviação de HKEY_CURRENT_USER.
  4. Uma regra de caminho do registro também pode incluir um caminho de sufixo.

(A partir da documentação das políticas de restrição de software , negrito adicionado por mim.)

Twinkles
fonte
3
Essa é a resposta correta. Os nomes completos são os únicos suportados pelo kernel. Quaisquer abreviações são específicas da ferramenta.
Andrew Medico
13
> afirma explicitamente que a disponibilidade desses atalhos depende do software que está sendo usado e geralmente são chamados de "abreviações comumente usadas" . Seria ótimo se você pudesse vincular a uma fonte para isso. (Não que eu não confio em você, mas uma fonte autorizada faz a afirmação mais forte.)
Bob
11
Também você não pode usar essas abreviaturas em .regarquivos, você tem que escrever o nome completo dentro dos âmbitos quadrados lá
@LightnessRacesinOrbit Sinta-se livre para apresentar algumas provas que provam que isso está errado.
Andrew Medico 10/10
4

Sim.

HKLM significa HKEY_LOCAL_MACHINE Variable.

E HKCU significa HKEY_CURRENT_USER.

Eles são a mesma coisa.

De acordo com a Wikipedia :

Há sete chaves raiz predefinidas, tradicionalmente nomeadas de acordo com seus identificadores constantes definidos na API do Win32 ou por abreviações sinônimas (dependendo dos aplicativos):

  • HKEY_LOCAL_MACHINE ou HKLM
  • HKEY_CURRENT_CONFIG ou HKCC (apenas no Windows 9x e NT)
  • HKEY_CLASSES_ROOT ou HKCR
  • HKEY_CURRENT_USER ou HKCU
  • HKEY_USERS ou HKU
  • HKEY_PERFORMANCE_DATA (apenas no Windows NT, mas invisível no Editor do Registro do Windows)
  • HKEY_DYN_DATA (apenas no Windows 9x e visível no Editor do Registro do Windows)
Kunal
fonte
16
Isso diz que eles são coloquialmente equivalentes, mas não que eles sejam definidos como a mesma coisa ou apelidos; em particular "dependendo das aplicações".
Joe Kearney
Também é uma página da Wikipedia principalmente sem fonte, então leve isso pelo que vale (provavelmente preciso, mas não melhor do que uma página de SO ou SU de forma realista e talvez pior).
Joe
Embora sejam a mesma coisa, a abreviação não faz parte do padrão e, portanto, não é equivalente pura.
4

Eu acrescentaria que, com o PowerShell, o HKLM existe como uma montagem para HKEY_LOCAL_MACHINE, portanto, é mutável. Exemplo

PS> Get-Item HKLM:
Propriedade Nome
---- --------
HKEY_LOCAL_MACHINE

PS> Remover-PSDrive HKLM

PS> Get-Item HKLM:
Get-Item: Não foi possível encontrar a unidade. Uma unidade com o nome 'HKLM' não existe.
Steven Penny
fonte
2

Como observa Twinkles, é uma abreviação comumente usada. Não vejo nenhuma fonte explicitamente dizendo que não pode ser usada, mas encontrei uma tabela indicando as abreviações usadas para as subárvores de registro do Windows 2000, que são basicamente as mesmas do conjunto atual (no Windows 7). Aqui está o que eu descobri por aí:

Na Visão geral do registro para Windows 2000 (modificada para formatação para este 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 também é apresentada em um artigo de suporte do XP , menos a subárvore de dados de desempenho (que eu acho que agora se foi e o Pankaj / Wikipedia apóia 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 também listam as abreviações, que são consistentes com as anteriores.

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

Joe
fonte