web-dev-qa-db-fra.com

“HKLM” est-il un alias pour “HKEY_LOCAL_MACHINE”?

HKLM est souvent utilisé comme abréviation de HKEY_LOCAL_MACHINE. De manière quelque peu inattendue, cela semble également être vrai lorsque je demande une valeur à 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

Existe-t-il une référence affirmant qu'ils sont équivalents ou que l'un est un alias pour l'autre? Ou existe-t-il, en fait, des cas où ce n'est pas la même chose?

60
Joe Kearney

Non, bien que HKLM soit une abréviation de HKEY_LOCAL_MACHINE, il n’ya pas de déclaration officielle de Microsoft indiquant qu’elle est toujours équivalente. En fait, il est explicitement indiqué que la disponibilité de ces raccourcis dépend du logiciel utilisé et ils sont généralement appelés "abréviations couramment utilisées".

Il existe des cas où l'abréviation de HKEY_LOCAL_MACHINE en HKLM n'est pas autorisée, par exemple lorsque définit une politique :

Les conditions suivantes s'appliquent:

  1. Le chemin du registre doit être entouré de signes de pourcentage (%).
  2. Le paramètre de registre doit être un type REG_SZ ou REG_EXPAND_SZ. Si la valeur de registre contient des variables d'environnement, celles-ci seront développées lors de l'évaluation de la stratégie.
  3. N'utilisez pas HKLM comme abréviation de HKEY_LOCAL_MACHINE ou HKCU comme abréviation de HKEY_CURRENT_USER.
  4. Une règle de chemin de registre peut également inclure un chemin de suffixe.

(D'après la documentation de Stratégies de restriction logicielle , audace ajoutée par moi.)

78
Twinkles

J'ajouterais qu'avec PowerShell, HKLM existe en tant que montage pour HKEY_LOCAL_MACHINE, en tant que tel, il est mutable. Exemple

 PS> Get-Item HKLM: 
 Nom de propriété 
 ---- -------- 
 HKEY_LOCAL_MACHINE 
 
 PS> Supprimer-PSDrive HKLM 
 
 PS> Obtenir un élément HKLM: 
 Obtenir-un élément: lecteur introuvable. Un lecteur avec le nom 'HKLM' n'existe pas. 
4
Steven Penny

Oui.

HKLM signifie HKEY_LOCAL_MACHINE Variable.

Et HKCU signifie HKEY_CURRENT_USER.

Ce sont les mêmes choses.

Selon Wikipedia :

Il existe sept clés racine prédéfinies, généralement nommées en fonction de leurs handles constants définis dans l'API Win32, ou par des abréviations synonymes (selon les applications):

  • HKEY_LOCAL_MACHINE ou HKLM
  • HKEY_CURRENT_CONFIG ou HKCC (uniquement sous Windows 9x et NT)
  • HKEY_CLASSES_ROOT ou HKCR
  • HKEY_CURRENT_USER ou HKCU
  • HKEY_USERS ou HKU
  • HKEY_PERFORMANCE_DATA (uniquement sous Windows NT, mais invisible dans l'éditeur de registre Windows)
  • HKEY_DYN_DATA (uniquement sous Windows 9x et visible dans l'éditeur de registre Windows)
4
Kunal

Comme le note Twinkles, il s’agit d’une abréviation couramment utilisée. Je ne vois aucune source indiquant explicitement qu’elle ne peut pas être utilisée, mais j’ai trouvé un tableau indiquant les abréviations couramment utilisées pour les sous-arbres de registre Windows 2000, qui sont généralement identiques à l’ensemble actuel (à partir de Windows 7). Voici ce que j'ai découvert là-bas:

Depuis Vue d'ensemble du registre pour Windows 2000 (modifié pour le formatage de ce 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

Cette liste est également présentée dans un article de support XP , moins le sous-arbre Performance Data (qui, à mon avis, a maintenant disparu et que Pankaj/Wikipedia souscrit à cette idée). .

Il existe également la référence de registre Windows , que j'ai liée à la page Clés prédéfinies, qui répertorie les différents sous-arbres, chacun d'entre eux comportant des liens vers leur page spécifique. (dont la plupart vont aux pages Windows Server 2003 pour une raison quelconque). Ils y énumèrent également les abréviations, qui correspondent à ce qui précède.

Cependant, aucune de ces pages n'indique si les abréviations peuvent être utilisées dans la programmation, ce qui me porte à croire que cela n'est pas explicitement indiqué nulle part. .

2
Joe