Logo registre

 

Cette section poursuit celle débutée il y a 5 ans en tenant compte de l'évolution de Windows. Les développements qui suivent prennent donc particulièrement appui sur Windows XP.

Notions de la Base de registre, concepts et terminologie

Quelques notions :

La base de Registre renferme avant tout des principes de sécurité désignés par l'abréviation SID (Security Identifier - Identificateurs de Sécurité). Toutes sortes de comptes d'ordinateurs, d'utilisateurs, de groupes sont des principes de sécurités. Lorsqu'un principe de sécurité est créé, son SID est généré automatiquement. Un compte anonyme est identifié par le SID (S-1-5-7). Un compte authentifié est identifié par le SID (S-1-5-11), les administrateurs par le SID (S-1-5-32-544), etc.(plus d'infos sur le Kit de Ressources techniques de Windows 2000). Les processus de Windows préfèrent se référer à un SID plutôt qu'au nom d'utilisateur ou de groupe. Un SID, qu'il relève d'un compte local ou de domaine est toujours unique y compris lorsque le compte auquel il se réfère et détruit puis recréé sous le même nom. Un SID jour le rôle d'un passeport à l'égard du système.

Les GUID (Identificateurs Uniques Globaux - prononcés "Good ID" en anglais) sont une suite de nombre, selon la même structure, qui identifient uniquement les objets de Windows (périphériques, utilisateurs, composants, etc.). Eux aussi sont uniques et se présentent tous sur le même format à savoir un groupe de nombres hexadécimaux de 16 octets : 8 chiffres, puis trois série de 4 chiffres puis enfin une série de 12 chiffres.

La majeure partie de la base de registre contient des valeurs exprimées en notation hexadécimale. On appelle aussi cela le système de numération (système permettant d'écrire et de nommer les divers nombres).
Pour rappel, nous connaissons bien le système décimal qui correspond à notre façon la plus courante d'exprimer les nombres. On écrit par exemple "cinquante mille" comme ceci : 50.000 ou alors (50.000)10. Le petit 10 ("cardinal 10") signifie que l'on se place en système décimal, ce système étant composé de 10
symboles allant de 0 à 9.

Vient ensuite le système binaire. Dans ce système nous n'avons que deux symboles différents ("0" et "1") et tous les nombres sont exprimés en chiffres composés des deux symboles possibles. Un exemple de nombre binaire serait : 1010 1101, ou (1010 1101)2 pour indiquer clairement qu'il est écrit en base 2.

Enfin, dans le système hexadécimal, un nombre est "composé" de chiffres choisis parmi 16 symboles possibles (les 10 chiffres, auxquels on a ajouté les 6 premières lettres de l'alphabet).
Chiffres possibles : { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F}. On écrit ainsi :
(B5)16

Pour les trois systèmes évoqués, nous avons donc la table suivante :

Binaire
Décimal
Hexadécimal
0000
0
0
0001
1
1
0010
2
2
0011
3
3
0100
4
4
0101
5
5
0110
6
6
0111
7
7
1000
8
8
1001
9
9
1010
10
A
1011
11
B
1100
12
C
1101
13
D
1110
14
E
1111
15
F

Faire manuellement les conversions entre ces différents systèmes de numération n'est pas toujours chose aisée. Sous Windows, nous pouvons cependant nous aider de la calculatrice qui dispose d'un affichage scientifique permettant notamment de faire facilement les conversions. Démarrer | Exécuter "calc.exe". Choisir ensuite le mode Affichage | scientifique.

Structure :

Sur le plan de sa structure, la base de registre, vue à travers son éditeur (Regedit.exe ou Regedt32.exe, programmes qui ont désormais les mêmes fonctions et autorisations sous XP) se présente avec à sa gauche le panneau des clefs où chaque dossier est une clef. A droite, le panneau des valeurs.

Le nom d'une clef est limité à 512 caractères ANSI ou 256 caractères UNICODE (ce langage étant celui pas défaut pour XP). On peut utiliser tout symbole ASCII autre que (\), (*), et (?). Tous les noms commençant par un (.) sont réservés à XP.

Les valeurs de chaque clef ou sous-clef de la base de registre ont toutes un nom, un type ou valeur et des données. Un peu comme le disque dur qui contient des dossiers (clef), des fichiers (valeur) lesquels renferment des données. C'est ainsi sont nommés les titres des colonnes de l'éditeur de la base de registre. Le nom d'une valeur a les même limites que le nom des clefs. Les différents types de valeurs sont expliqués un peu plus bas. Quant aux données contenues dans les valeurs, il peut s'agit de données nulles ("null" en anglais), vides ("empty" en anglais) ou définies. Une donnée null est exprimée par "valeur non définie" dans l'éditeur de la base de registre. Si la donnée est vide, on trouvera deux guillemets ("").

Il existe de nombreux types de données, étant précisé que l'on trouvera majoritairement les types REG_BINARY, REG_DWORD, et REG_SZ.

REG_BINARY. Donnée binaire affichée en numération hexadécimale.
REG_DWORD. Affichant souvent des valeurs booléennes (0 pour VRAI et 1 pour FAUX), exprimant parfois l'unité de temps en millisecondes (où la donnée "1000" signifiera donc 1 seconde).
REG_DWORD_BIG_ENDIAN. Idem que ci-dessus avec l'octet de poids fort stocké en premier en mémoire. Très rare sur une plate-forme i386.
REG_DWORD_LITTLE_ENDIAN. L'inverse que ci-dessus, et c'est en fait la présentation classique de REG_DWORD.
REG_EXPAND_SZ. Texte contenant une longueur variable. Par exemple, un programme s'appuyant sur une donnée  REG_EXPAND_SZ qui contient %USERPROFILE% étendra cette valeur comme étant "C:\Documents and Settings\Pierre\.
REG_FULL_RESOURCE_DESCRIPTOR. Liste les ressources utilisées par un pilote ou un périphérique. Voir par exemple ici : HKLM\HARDWARE\DESCRIPTION\System\MultifunctionAdapter\0.
REG_LINK. C'est un lien. On ne peut pas en créer.
REG_MULTI_SZ. Valeurd contenant une liste de données qui sont séparées par une donnée nulle (0x00). La fin de liste est définie par deux caractères nuls.
REG_NONE. Valeur sans donnée définie.
REG_QWORD. Comme le type type REG_DWORD sauf qu'au lieu d'être sur 32 bits, on est sur 64 bits. Il faut donc XP pour plateformes 64 bits pour rencontrer ce type de données.
REG_RESOURCE_REQUIREMENTS_LIST. Listes des resources requises par un périphérique. On ne peut que voir ces ressources, pas les éditer ou les modifier.
REG_SZ. Text de taille fixe, type très répandu dans la base de registre.

Des cinq clefs racines que l'on a vues à la section précédentes, HKLM et HKU sont de loin les plus importantes. En fait, les autres racines ne sont que des liens vers l'une des deux première clefs racines.  HKCU est un lien vers une sous-clef de HKU. HKCR et HKCC sont des liens vers des sous-clefs de HKLM, le dernier étant par exemple un lien vers HKLM\SYSTEM\CurrentControlSet\Hardware Profiles\Current.

Windows XP a toutefois introduit quelques changements majeurs dans la structure de la base de registre. Ainsi, HKCR (HKEY_CLASSES_ROOT) qui contient deux types de paramètres, le premier affectant les association de fichiers avec les programmes et le second affectant les enregistrements de classes pour les objets COM. C'est dans cette clef qu'une grande latitude de paramétrage personnel peut intervenir. Avant Windows 2000 et XP, HKCR était un lien de la clef  HKLM\SOFTWARE\Classes. XP fusionne les deux clefs HKLM\SOFTWARE\Classes (associations par défaut des fichiers et registration des classes) HKCU\Software\Classes (idem que la précédente mais en fonction de l'utilisateur). Pour une même valeur, celle énumérée dans HKCU\Software\Classes primera sur son équivalent de HKLM\SOFTWARE \Classes.

Du coup, la personnalisation des associations de fichiers est permise selon un modèle par ordinateur et surtout par utilisateur. On partage un seul PC pouvant avoir différentes associations de fichiers d'un utilisateur à l'autre. Si un profil itinérant (introduit sous Windows 2000) est utilisé, ces paramètres personnalisés suivent l'utilisateur sur tout PC qu'il manipule.
On peut en outre limiter l'accès à HKLM\SOFTWARE\Classes sans priver les utilisateurs de modifier les associations : plus de sécurité sans restreindre une certaine liberté.

Un autre changement d'importance par rapport à la façon dont est physiquement stockée la base de registre sous Windows 9x intervient sous Windows XP. Elle n'est plus constituée des deux fichiers user.dat et system.dat, mais de ruches (Hive en anglais) auxquelles correspondent des fichiers stockés dans %SYSTEMROOT%\System32\config pour la plupart (HKLM) et dans les dossiers des profils utilisateurs (pour HKU).

On trouve la liste des ruches chargées dans la base de registre par XP à la clef : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\hivelist. Les fichiers ruches ne comportent pas d'extension. Pour chaque ruche, XP crée des fichiers de sauvegarde avec l'extension .SAV. L'extension .LOG correspond retrace les changements affectant la ruche en cause. On ne trouve des ruches que dans HKLM et HKU, les autres clefs racines étant des liens vers des sous clefs de HKLM et HKU. Les ruches afférentes à HKU sont dans les dossiers utilisateurs, dans les fichiers Ntuser.dat et UsrClass.dat. En fait, HKU\.DEFAULT a sa ruche dans %SYSTEMROOT%\System32\config\default mais les autres ruches de HKU vont se trouver dans les fichiers cités ci-avant.

L'extension ALT a été supprimée sous Windows XP/ 2003 Server. Elle correspond à HKEY_LOCAL_MACHINE\System pour Windows NT/2000.

On remarquera que la plupart des clefs de la base de registre dont le nom figure en lettres capitales sont en fait des ruches.

Retenons enfin qu'il n'existe pas sous Windows XP de limite physique pour la taille de la base de registre contrairement à Windows 2000. Pour connaître la taille occupée par la base de regsitre, un utilitaire issu du Ressource Kit de Windows 2000 fonctionne très bien. Il s'agit de DuReg.EXE, "Registry Size Estimator", utilitaire en ligne de commande, téléchargeable sur le site de Microsoft ou à la section FTP (630 Ko). Cet utilitaire ne donne que la taille occupée par les données contenues dans la base de registre et ne tient donc pas compte de l'espace libre également contenu dans la base de registre.


Créé le 19/12/2002
Modifié le : 16/09/03