La base de registres
(Chapitre absolument pas terminée...)
Définition
La base de registres est donc une base, dans laquelle chaque application peut stocker des données qui la concerne. Ces données pouvant servir à tout, comme un chemin d'accès, une couleur préférée de l'utilisateur, ...
A chaque lancement de l'application, celle-ci pourra lire la base de registres pour récupérer ces valeurs. Ce qui évitera ainsi l'utilisateur de devoir à chaque fois resaisir les mêmes choses.
Les données qui sont donc dans l'application sont souvent des paramètres d'initilisation de l'application.
Histoire
Il y a longtemps, bien avant l'apparition de la base de registres, les applications utilisaient des fichiers pour stocker ces informations. Généralement ces fichiers étaient terminés avec l'extension .ini. Seulement voilà, il y avait au final plein de fichiers .ini éparpillés un peu partout sur le disque, souvent de petite taille et occupant alors beaucoup plus sur le disque que la taille réelle du fichier. d'où l'idée de tout regroupé dans une base de registres.
Consulter la base de registre
Il peut arriver que l'on soit obligé d'intervenir dans la base de registres. Dans ce cas, Windows propose deux outils:
regedit.exe ou regedt32.exe.
Ces éditeurs donnent une représentation hiérarchique des informations du système. Il sera possible de créer, modifier ou supprimer des informations. Mais attention à ne pas faire n'importe quoi dedans !!!
Structure du registre
La base de registres est découpée en clef (ou noeud) et en sous-clef (sous noeud) qui se terminent par une entrée (variable) qui contient une valeur.
Les clés (noeud) racines:
Se sont les clefs dont le nom commence par HKEY_.Il y en a cinq qui sont les suivantes:
HKEY_CLASSES_ROOT:
- On y retrouvera les extensions de nom de fichier, permettant d'associer les fichiers à leur application via des sous-clés de définition de classe.
- Mais aussi des PROGID des classes d’objet COM installées sur
la machine. Dans ce cas, la sous clef contiendra au moins une sous-clef nommée
CLSID
- Enfin la clef CLSID qui récapitule tous les CLSID de toutes les classes
d’objet COM installées sur la machine. Les sous-clefs seront le
PROGID et éventuellement des attributs indiquant le mode d’exécution
des objets de la classe.
HKEY_CURRENT_USER
On y retrouvera toutes les préférences spécifiques à un profil. Les applications pourront y stocker les préférences personnalisées.
HKEY_LOCAL_MACHINE
C'est ici que l'on retrouve les informations concernant le matériel et les logiciels.
- HARDWARE : Reconstitué à chaque lancement du système.
C'est la description du matériel
- SAM : Base de données de sécurité des domaines (dans
NT Server) et des comptes d'utilisateurs de groupes (dans NT Workstation). Ces
informations sont recopiées dans la clé HKEY_LOCAL_MACHINE\SECURITY\SAM.
- SECURITY : Contient les stratégies de sécurité et les
droits des utilisateurs.
- SOFTWARE : Données relatives aux logiciels installés sur la
machine.
- SYSTEM : Informations sur le démarrage de la machine (services, pilotes,
...) et comportement du système.
HKEY_USERS
Comprend tout le paramétrage relatif à un profil. Ainsi que celui du profil par défaut (sous-clé .DEFAUL).
HKEY_CURRENT_CONFIG
Données de configuration du profil matériel actif (Paramètres d'affichage et des pilotes périphériques).
Lire la base de registres
La lecture d'une information de la base de registres se déroule en 3 temps:
Il y a des similitudes avec l'accès à un fichier: Il faut "ouvrir" le fichier qui se trouve peut-être dans un répertoire, se "positionner" dans les données du fichier et "lire" les données présentes dans le fichier puis "fermer" l'accès à ce fichier.
Dans le cas de la base de registres, il faut "ouvrir" un noeud, "lire" la ou les entrées, puis "terminer" l'accès à ce noeud.
Il faut tout d'abord se positionner sur un noeud: (équivalent à "ouvrir" le fichier qui se trouve peut-être dans un répertoire)
LONG RegOpenKeyEx(
HKEY hKey,
LPCTSTR lpSubKey,
DWORD ulOptions,
REGSAM samDesired,
PHKEY phkResult
);
En entrée:
hKey : un handle sur un noeud (via un précédent RegOpenKeyEx() ou RegCreateKeyEx()). Il peut prendre aussi la valeur HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS.
lpSubKey:Le nom du noeud à ouvrir. si blanc ou NULL, alors la fonction retournera un nouveau handle sur le noeud correspondant à hKey.
ulOptions: réservé et doit être à 0.
samDesired: Droits d'accès désirés (Voir tableau plus bas sur les droits). Evidemment, si vous n'êtes pas habilités, vous n'aurez rien !
phkResult: pointeur sur une variable de type HKEY qui, en sortie, recevra le nouveau handle.
En sortie, la fonction retourne ERROR_SUCCESS si pas d'erreur.
Pour accéder au noeud de l'utilisateur courant dans HKEY_CURRENT_USER
LONG RegOpenCurrentUser(
REGSAM samDesired,
PHKEY phkResult
);
Ensuite lire la valeur d'une entrée du noeud: (Se "positionner" dans un fichier et "lire" les données présentes dans le fichier)
RegQueryValueEx()
On répétera l'opération pour les entrées suivantes...
Enfin terminer l'accès à la base de registres:("fermer" le fichier)
RegCloseKey();
Ecrire la base de registres
RegCreateKeyEx()
Créer un noeud
RegSetValueEx
Créer une entrée dans un noeud en lui affectant une valeur.
Les droits
KEY_QUERY_VALUE
KEY_SET_VALUE
KEY_CREATE_SUB_KEY
KEY_ENUMERATE_SUB_KEYS
KEY_NOTIFY
KEY_CREATE_LINK
KEY_READ
KEY_WRITE
KEY_EXECUTE
KEY_ALL_ACCESS
KEY_QUERY_VALUE
KEY_SET_VALUE
KEY_CREATE_SUB_KEY
KEY_ENUMERATE_SUB_KEYS
KEY_NOTIFY
KEY_CREATE_LINK
Pour plus d'inforlations sur la registry, voir sur le site de Micorosoft: