Le contenu de la base de registre
2 Hkey de base
La base de registre est partagée en différentes sections logiques. Elles sont généralement connues par les noms les définissant quand on y accède via l'interface graphique de Windows; les noms commencent tous par 'HKEY' (une abréviation de Handle to a KEY, gestionnaire de clé).
Les 2 HKEY de base sont :
- HKEY_LOCAL_MACHINE (HKLM) contient les informations qui sont générales à tous les utilisateurs de l'ordinateur :
- Matériel
- Sécurité
- SAM (Security Account Manager)
- Logicielle, la sous-branche "Classes" correspond à HKEY_CLASSES_ROOT
- Système, elle contient notamment la sous-branche CurrentControlSet (NB : CurrentControlSet\Control\Class contient des informations sur les classes).
- HKEY_USERS contient les informations spécifiques à chaque utilisateur. La sous-branche correspondant à l'utilisateur courant est l'équivalent de HKEY_CURRENT_USER.
Les 4 autres HKEY sont
- HKEY_CURRENT_CONFIG contient des informations qui sont mises à jour immédiatement, elles sont régénérées après chaque boot.
- HKEY_CLASSES_ROOT (HKCR) contient les informations sur les applications enregistrées ; cela inclut entre autres les associations entre extensions de fichiers et identifiants de classe d'objet OLE, ce qui permet de lancer automatiquement l'exécutable correspondant. Cela correspond à HKEY_LOCAL_MACHINE\SOFTWARE\Classes. Exemple : ".bat" et "XML" sont respectivement associés à "batfile" et "XML script engine".
- HKEY_CURRENT_USER (HKCU) contient les informations concernant l'utilisateur connecté. Ce n'est qu'une sous-branche de HKEY_USERS.
- HKEY_PERFORMANCE_DATA (ou HKEY_DYN_DATA sous Windows 9x) généré dynamiquement (REGEDIT ne l'affiche pas). Vous pouvez voir ces données par l'intermédiaire de l'utilitaire perfmon.msc
Chacune de ces clés est divisée en sous-clé(s), qui peuvent contenir d'autre(s) sous-clé(s) et ainsi de suite, constituant toute une arborescence.
Typage des valeurs
Chaque clé peut contenir des valeurs typées : il existe une quinzaine de types de données possibles,
- 1) Binaire REG_BINARY, création possible avec REGEDIT
- Entier
- 2) Dword REG_DWORD, 32 bits, création possible avec REGEDIT
- 3) REG_DWORD_BIG_ENDIAN, voir Endianness
- 4) REG_DWORD_LITTLE_ENDIAN
- 5) Qword REG_QWORD 64 bits, création possible avec REGEDIT
- 6) REG_QWORD_BIG_ENDIAN
- 7) REG_QWORD_LITTLE_ENDIAN
- Chaîne de caractères
- 8) Chaîne simple REG_SZ, création possible avec REGEDIT
- 9) Chaîne extensible REG_EXPAND_SZ, permet d'utiliser des variables d'environnement, création possible avec REGEDIT
- 10) Chaîne multiple REG_MULTI_SZ, création possible avec REGEDIT
- 11) NONE, REG_NONE : signifie donnée non typée !
- Ressource
- 12) REG_RESOURCE_LIST
- 13) REG_RESOURCE_REQUIREMENTS_LIST
- 14) REG_FULL_RESOURCE_DESCRIPTOR
- 15) REG_LINK
GUID (et CLSID)
Un grand nombre de clés et de valeurs de clés sont affichées par regedit sous un format analogue à {3F2504E0-4F89-11D3-9A0C-0305E82C3301}. En fait, il s'agit du format GUID (Globally Unique IDentifier) (16 octets).
Langage C
winreg.h est l'include nécessaire pour utiliser le registre en Langage C.
Langage C #
Avec le Langage C #, il est possible de lire et modifier la base de registre ; les différentes méthodes sont
- CreateSubKey
- OpenSubKey et Close
- GetValue et SetValue
Les fonctions sont GetSetting, SaveSetting.
Il est aussi possible de passer par le WSH (Windows Scripting Host)
Langage Java
La portabilité du Langage Java fait que l'accès à la base de registre n'est pas directement implémenté dans Java.
D'une façon générale, pour faire l'interface de Java avec une API native spécifique à un système d'exploitation, il faut passer par JNI (Java Native Interface).
Dans le cas particulier de la base de registre, il existe par exemple la DLL ICE_JNIRegistry.
Certaines bibliothèques n'utilisent pas JNI pour accéder à la base de registre. C'est le cas de java-registry-wrapper [1].
Minuscule et majuscule
Contrairement à ce qui est habituel sous Windows, des casses de caractères différentes donnent des résultats différents. Exemple : les valeurs "no" et "No" peuvent donner des résultats très différents.
Espace dans les noms de clés
Le caractère espace (" ") peut être utilisé dans les noms de clés, bien que ce soit rare (exemple : la clé optionnelle Use Search Asst).