Malgré l'avancée des nouvelles technologies dans notre quotidien, beaucoup d'utilisateurs ne voient que bien souvent leur ordinateur comme une boite noire où la magie s'opère dès la pression du bouton "Power". Bien que la connaissance des processus qui se cachent derrière ne soit pas indispensable, il est intéressant de savoir comment fonctionne telle ou telle partie de l'ordinateur. Dans le système d'exploitation de Microsoft, une de ses parties est le registre Windows. Véritable mémoire pour Windows, le registre Windows centralise tous les réglages et la configuration de Windows mais également celle des différents programmes installés et le réglage du profil utilisateur. Voici une introduction au registre Windows.
Sommaire
Le registre Windows
Comment est-il né ?
L’histoire du registre Windows débute à l’époque de Windows 3.1 (eh oui il y a 30 ans !). A cette époque, Windows ainsi que les programmes installés avaient pour habitude de placer leurs configurations dans des fichiers (la plupart du temps avec l'extension *.ini). Ces derniers étaient (et sont toujours en fait) de simples fichiers textes plats (c'est-à-dire sans structure complexe) éditables comme n’importe quel fichier texte de nos jours. Ils permettaient de définir des groupes de paramètres appelés sections, ainsi que d’associer des valeurs texte ou numérique à une étiquette.
Chacun de ces programmes enregistrait sa configuration dans ces fichiers *.ini. Cela avait pour effet de créer une grande fragmentation des fichiers de configuration et par conséquent un isolement de la configuration entre les applications ainsi qu’entre les différents services de Windows. Autre problème de ce système, c’est que les fichiers étaient placés dans des dossiers précis et contenaient souvent eux-mêmes des références absolues (chemins complets, exemple : "c:\windows\win.ini") vers d’autres programmes ou d'autres fichiers de configuration. Le moindre changement de nom de dossier ou de fichier pouvait alors avoir de graves conséquences pour le chargement d’une application voire pour le chargement de Windows lui-même puisque ce changement n'était pas répercuté dans tous les fichiers de configuration.
Devant ce problème de fragmentation et de configuration, Microsoft a créé "le registre Windows", une base de données centralisée qui remplacerait les fichiers de configuration. Un prototype de registre Windows a été implémenté dans Windows 3.1, mais ce n’était encore qu’une version extrêmement légère.
Le registre Windows tel qu’il existe aujourd’hui apparaît avec Windows 95 (et Windows NT). Sous son appellation au singulier ("Le" registre Windows) se cachent plusieurs bases de données arborescentes que l’on nomme "poignée de clés" ou "handle keys" en anglais. Chacune de ces poignées de clés porte plusieurs clés.
Présentation de sa structure
L’architecture de base de données arborescente est similaire à celle observable dans l’explorateur Windows avec ses lecteurs/dossiers/fichiers. Pour le registre Windows, on parlera de poignée de clés/clés/valeurs. L’analogie avec l’explorateur peut être poussée encore un peu plus loin : dans un dossier se trouvent des fichiers de différents types (fichier texte, fichier image, etc.). De façon similaire les valeurs du registre Windows peuvent être de différents types : chaîne de caractères, binaire, hexadécimale, chaîne multiple et chaîne extensible.
Le registre Windows, lors de sa première implémentation dans Windows 3.1, avait un objectif principal : centraliser les associations des types de fichiers avec les programmes correspondants. Pour cela, seule la poignée de clés HKEY_CLASSE_ROOT existait.
L'association d'un type de fichier avec un programme est un élément central dans un système d'exploitation, surtout avec interface graphique comme Microsoft Windows. Lorsque vous double-cliquez sur un document Word (qui a donc pour extension *.doc ou *.docx), il s'ouvre dans votre traitement de texte favori : Microsoft Word, OpenOffice Writer etc. Pour permettre cela, Windows associe dans le registre Windows (à cet endroit : HKEY_CLASSE_ROOT) que l'extension de fichier *.doc correspond à Microsoft Word (ou OpenOffice).
Pour changer ces associations sans passer par le registre Windows, vous pouvez vous rendre dans la zone de recherche du menu démarrer/de l'écran d'accueil en écrire : "Programmes par défaut", puis sur "Associer un type de fichier ou un protocole à un programme".
Le vocabulaire du registre Windows
Handle keys / Poignée de clés
Le registre Windows est composé d'un ensemble de clés et de sous-clés. Tout en haut de la hiérarchie se trouve la clé racine. Cette clé racine est appelée "Handle Key" ou "poignée de clés" en français (bien que cette traduction soit très peu utilisée). La clé racine est souvent abrégée HK ou HKey.
Ainsi le registre Windows est divisé en cinq poignées de clés. Cela permet d’organiser les différentes clés entre elles afin de leur donner un sens plus précis. Parmi ces poignées de clé, deux sont principales et les trois autres poignées de clés représentent des raccourcis vers une sous-clé des deux premières.
Concrètement, ces 5 HKey représentent les 5 racines disponibles lors de l’utilisation du registre. Pour reprendre l’analogie avec le système de fichiers, il s’agirait alors de cinq lecteurs disponibles dans l’explorateur Windows.
Le tableau suivant présente les cinq HKey:
HKEY_LOCAL_MACHINE Abréviation courante : HKLM |
Contient les paramètres de l’ordinateur pouvant s’appliquer à tous les utilisateurs. |
HKEY_CLASSES_ROOT Abréviation courante : HKCR Chemin réel : HKLM\Software\Classes |
Contient les associations entre les types de fichiers et les applications, ainsi que les enregistrements de classes COM. |
HKEY_CURRENT_CONFIG Abréviation courante : HKCC Chemin réel : HKLM\SYSTEM\CurrentControlSet\Hardware Profiles\Current |
Cette ruche contient les options de configuration du profil de l’utilisateurs connecté. |
HKEY_USERS Abréviation courante : HKU |
Contient tous les profils des utilisateurs. Les premières clés représentent les profils des utilisateur. |
HKEY_CURRENT_USER Abréviation courante : HKCU Chemin réel : HKU\<Id du profil courant> |
Contient le profil utilisateur de l’utilisateur connecté. Cela regroupe les variables d’environnement, les paramètres des programmes, la configuration du bureau, des réseaux, etc. Cette ruche est particulière, car elle ne contient en réalité aucune donnée. Il s’agit juste d’une référence au profil de l’utilisateur connecté qui se trouve en réalité dans HKU. |
Le schéma suivant représente les différentes HKey et les références entre elles :
Clés et sous-clés
Le contenu des différentes HKey est organisé et rangé dans un ensemble de clés et de sous-clés telles des dossiers. Ces clés constituent les branches de l’arborescence du registre Windows. Une clé peut contenir d'autres clés, qu'on peut alors appeler "sous-clés".
Une clé contient toujours une valeur par défaut. Cette valeur n'aura pas de nom, mais pourra contenir des données.
On peut obtenir une adresse à l’intérieur du registre en associant HKey et clé/sous-clés. Exemple :
Quelquefois l’adresse pourra être présentée avec le nom de la HKey raccourci :
Une clé peut servir de raccourci et ainsi représenter une HKey : ce lien clé-HKey permet de faire correspondre une clé à une HKey. C'est par exemple le cas de HKEY_CLASSES_ROOT qui est en réalité un raccourci vers HKLM\Software\Classes (voir le point précédent : poignée de clés).
Valeurs et données
En bout de chaîne se trouvet les valeurs et les données. Ce sont les éléments qui portent l’information, comme des fichiers. Une valeur permet l’identification des données dans le registre Windows.
Les valeurs peuvent être de différents types selon le type d'information qu'elles doivent porter. Les valeurs de type "chaîne" permettent d'enregistrer des chaînes de caractères, des textes. Ces textes peuvent comprendre et/ou être uniquement composés de chiffres. Cependant, les types DWORD et QWORD existent pour prendre en charge des nombres (en base décimale et hexadécimale). Il également possible d'enregistrer des données binaires avec le type binaire.
Type | Vrai nom du type | Description |
Chaine | REG_SZ | Permet de sauvegarder du texte |
Entier | REG_DWORD REG_QWORD |
Permet de sauvegarder un entier, sur 32bit pour le type REG_DWORD, et sur 64bit pour le type REG_QWORD. |
Binaire | REG_BINARY | Enregistre des données binaires |
Il existe d'autres types de données, mais qui sont moins courants.
Les ruches
On l'a vu, le registre Windows est donc un ensemble de bases de données. Pour lire ou modifier du contenu dans le registre, on peut utiliser un système d'adresse qui permet donc de naviguer à l'intérieur des différentes bases de données. Cette partie du registre est la partie "logique" que l'on peut opposer à la partie "physique" du registre, là où sont réellement stockées les informations sur le disque dur (et également dans la mémoire RAM).
Physiquement, les fichiers qui contiennent les données du registre sont appelés des "ruches" ou "hives" en anglais. Ils sont stockés à deux endroits :
- Pour la partie concernant Windows et l'ordinateur, cela se trouve à cet endroit : "C:\Windows\System32\Config".
- Pour la partie propre à chaque utilisateur, cela se trouve à la racine de son dossier de session. Exemple, pour l'utilisateur Aryx, il faudra aller à cette adresse : "C:\Users\Aryx". Là se trouvent les fichiers cachés et systèmes suivant : NTUSER.DAT et NTUSER.DAT.LOG. Le premier contient les données, tandis que le second contient le journal des changements effectués dans le premier.
Comme ces fichiers ont l'attribut "Système", par défaut ils n'apparaissent pas dans l'explorateur Windows. Il est possible de les afficher, mais cela n'est pas recommandé pour des raisons de sécurité et de stabilité du système. Cependant, avec l'invite de commandes, vous pouvez les lister avec la commande : DIR /A:HS
Utilitaires
Microsoft Windows propose de base plusieurs outils pour manipuler son registre. Le plus simple et le plus intuitif pour un utilisateur de Windows est l’Éditeur du registre. Mais comme pour la plupart des tâches dans Windows, il est possible d'utiliser un outil en mode console (c'est-à-dire sans interface graphique) utilisable dans un script Batch ou via l'invite de commandes : il s'agit de l'outil REG. Enfin, plus récent, Windows PowerShell inclut des cmdlets permettant aussi de manipuler le registre.
J'imagine bien que la lecture de toute la partie précédente vous en a convaincu, mais il vaut mieux que cela soit explicite : une mauvaise manipulation du registre Windows peut entrainer de graves conséquences sur votre installation de Windows. Cette dernière pourrait tout simplement ne plus fonctionner. Donc, NE MANIPULER PAS LE REGISTRE SI VOUS N’ÊTES PAS SUR DE VOUS.
A noter : ces outils ne permettent pas de revenir en arrière après une modification. Il n'y a donc pas de "Annuler" ni de CTRL+Z : toute modification faite dans le registre Windows est définitive ! (Sauf avec les cmdlets de PowerShell et l'utilisation de transaction).
L'éditeur du registre
L'éditeur du registre est un puissant outil pour manipuler le registre Windows. A la fois simple et complet, il regroupe tout ce qu'il faut pour explorer, créer, modifier, supprimer et gérer les autorisations des éléments du registre.
Coté interface, il n'est pas sans rappeler l'explorateur Windows (plutôt dans ses versions de Windows 2000 et XP). D'ailleurs, il présente le registre comme l'explorateur Windows présente les différents lecteurs de l'ordinateur.
La vue est divisée en deux volets :
- A gauche l'arborescence des HKey et des clés/sous-clés. Cliquer sur une clé ouvre son arborescence et ainsi de suite. L'adresse de la clé sélectionnée apparaît dans la barre d'état située dans la partie inférieure de l'écran.
- A droite se trouvent les différentes valeurs de la clé sélectionnée. Seules les valeurs sont affichées ici. Si la clé possède des sous-clés, elles n'apparaissent pas dans ce volet (mais dans celui de gauche).
L'éditeur permet également de créer des favoris (menu Favoris dans la barre des menus). Cette option peut être pratique lorsque vous revenez régulièrement au niveau de la même clé.
Pour ouvrir rapidement le registre Windows, dans la fenêtre "Touche Windows + R", écrire "Regedit" (sans les guillemets) puis valider avec Entrer. "Regedit" peut également être écrit directement depuis la zone de recherche du menu démarrer / l'écran d'accueil selon votre version de Windows. Il se peut qu'il faille l'autorisation d'un administrateur pour démarrer l'éditeur du Registre.
REG : avec l'invite de commandes
L'outil en ligne de commande REG est un exécutable qui peut s'utiliser dans l'invite de commandes. Il permet la manipulation du registre Windows à partir de l'invite de commande. Très pratique pour créer des scripts Batch (fichier .cmd), il se révèle pratique dans certaines situations critiques comme lorsque Windows ne démarre plus, et qu'il faut accéder au registre en invite de commande.
Son utilisation se fait en utilisant des commandes indiquant l'opération souhaitée. Les principales sont :
- QUERY : pour sélectionner des données dans le registre Windows et les afficher.
- ADD : pour ajouter des clés ou des valeurs dans le registre.
- DELETE : pour supprimer des clés ou des valeurs.
- COPY : effectue une copie d'une clé ou d'une valeur vers une autre clé.
- IMPORT / EXPORT : permet soit d'importer un fichier avec l'extension .reg ou d'exporter une clé et ses sous-clés vers un fichier .reg.
Avec les cmdlets PowerShell
Il est également possible de manipuler le registre avec les cmdlets disponibles dans PowerShell. L'analogie entre l'explorateur Windows et le registre Windows prend tout son sens avec les cmdlets puisque PowerShell permet d'utiliser indépendamment ses cmdlets pour manipuler les fichiers ou le registre; le registre étant considéré comme un lecteur particulier.
Jusqu'à Windows Vista, le système d'exploitation de Microsoft ne disposait pas d'un vrai programme pour effectuer des tâches d'administration à l'aide de commandes et/ou de scripts : il n'y avait pas de vrai shell pour Windows. L'invite de commandes n'étant pas assez puissante pour réaliser rapidement ces opérations complexes.
PowerShell arrive alors (en natif depuis Windows 7) pour répondre à ce besoin. Il intègre de nombreuses commandes appelées cmdlets permettant d'effectuer tout un tas de tâches. Il est également possible d'ajouter des modules, de charger des objets .NET... tout cela augmentant les possibilités offertes par PowerShell.
Le registre se manipule à l'aide des cmdlets suivantes :
- Get-Item : pour afficher le contenu d'une clé (sans les sous-clés).
- Get-ChildItem : permet d'afficher les sous-clés d'une clé.
- New-Item : pour créer une nouvelle clé.
- New-ItemProperty : pour créer ou modifier une valeur dans une clé.
- Remove-Item : pour supprimer une clé.
- Remove-ItemProperty : pour supprimer une valeur dans une clé.
Toutes ces cmdlets permettent de manipuler des fichiers/dossiers mais également des éléments du registre Windows. Pour indiquer que l'on travaille sur le registre, il faut le préciser dans l’argument "Path" en ajoutant "Registry::".
Exemple :
Get-Item -Path "Registry::HKEY_CURRENT_USER\Control Panel\Cursors"
Cela affiche toutes les valeurs de la clé "Cursors". Ces valeurs indiquent les différents curseurs utilisés par l'utilisateur courant.
Transaction avec PowerShell
Autre avantage à utiliser les cmdlets pour manipuler le registre Windows, c'est la possibilité d'effectuer des transactions. Avec une transaction, vous pouvez effectuer tout un tas d'opérations sur le registre (créer une nouvelle clé, une valeur à l'intérieur, etc..) sans vraiment modifier le registre, donc sans danger. Ensuite, quand vous avez terminé les opérations, vous pouvez soit valider toutes ces opérations et donc cette fois réellement modifier le registre, ou annuler les modifications et dans ce cas, rien n'a été modifié dans le registre. On retrouve ce principe lorsque l'on manipule les bases de données (avec les ordres SQL commit/rollback en fin de transaction).
Pour commencer une transaction, il faut entrer la cmdlet suivante :
Start-Transaction
Ensuite, en utilisant les cmdlets pour manipuler le registre, il faudra leur rajouter l'argument "-UseTransaction". Une fois terminé les opérations, la transaction est validée avec la cmdlet "Complete-Transaction" ou abandonnée avec la cmdlet "Undo-Transaction".
Et concrètement donc ?
De nombreux réglages de Windows sont stockés dans le registre. Pour la plupart, ils sont modifiables dans le panneau de configuration, dans les différents menus "Option" ou "Propriétés" que l'on peut trouver dans Windows. En voici quelques exemples.
Ce n'est jamais trop que de rappeler qu'une mauvaise manipulation du registre Windows peut entrainer de graves conséquence sur votre installation de Windows. Cette dernière pourrait tout simplement ne plus fonctionner. Donc, NE MANIPULEZ PAS LE REGISTRE SI VOUS N’ÊTES PAS SUR DE VOUS.
Les exemples ci-dessous, si bien lus et respectés sont sans danger pour votre ordinateur.
Le fond d'écran du bureau
Pour modifier le fond d'écran de votre bureau Windows, vous aviez pris l'habitude de faire un clic droit sur le bureau puis de sélectionner "Personnaliser" ? Trop facile !
Pour faire plus compliqué, les différents réglages qui sont modifiés dans la fenêtre "Personnaliser" sont enregistrés dans le registre à cette adresse :
HKEY_CURRENT_USER\Control Panel\Desktop
A cette adresse se trouvent différentes valeurs intéressantes :
- "MenuShowDelay" : il s'agit du temps en milliseconde avant que Windows n'affiche un menu lorsque vous effectuez un clic droit.
- "ScreenSaveActive" : cette valeur enregistre si oui ou non l'écran de veille est actif. Si oui, la donnée associée aura la valeur 1, sinon elle aura la valeur 0.
- "ScreenSaveTimeOut" : il s'agit ici d'enregistrer le nombre de secondes avant que l'écran de veille ne se déclenche. Ici, 900s pour 15 minutes donc.
- "SCRNSAVE.EXE" : enfin, si l'écran de veille est actif, et après le délai de la valeur précédent, il faut bien indiquer quel écran de veille sera lancé. C'est cette valeur qui enregistre le chemin vers le fichier d'écran de veille. Un fichier avec l'extension *.scr.
- "Wallpaper" : sa donnée enregistre le chemin vers le fichier image du fond d'écran.
- "WallpaperStyle" : cette valeur indique si le fond d'écran sera centré, ou étendu pour coller aux bords de l'écran. Si la valeur est 0, le fond est centré. Si la valeur est 2, le fond est étiré.
Rendre le démarrage de Windows plus bavard
Par défaut, le démarrage de Windows est assez peu bavard, mais néanmoins aimable. Après avoir entré votre mot de passe/PIN/mot de passe image, si tout va bien, vous avez le droit à un "Bienvenue", qui fait du bien au cœur ! Mais il est possible de rendre Windows bien plus bavard, notamment pour savoir qu'est-ce qui l'occupe tant de temps que cela au démarrage.
Pour cela, il faut vous rendre à l'adresse suivante avec l'éditeur de registre :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
Repérez la valeur DWORD nommée VerboseStatus. Si elle n'existe pas, créez là (clic droit, Nouveau, valeur DWORD). Enfin, donnez-lui la valeur 1:
Conclusion
Le registre Windows regroupe tout un tas de données indispensables au fonctionnement de Windows. Cette centralisation et cette exploitation via un système de base de données permets un accès rapide et fiable à ces différents réglages et protège le système d'exploitation d'éventuelles suppression d'un fichier de configuration comme c'était le cas auparavant.
Cette centralisation est largement exploitée par les programmes installés sur l'ordinateur. Ils profitent ainsi d'un endroit facilement accessible pour stocker leurs paramètres. Que ce soit pour tous les utilisateurs, ou pour l'utilisateur courant.
Néanmoins, si cela est facile pour un programme d'enregistrer des données dans le registre Windows, c'est également le cas pour des programmes malveillants. Du adware qui s'ajoutent parmi les programmes au lancement de l'ordinateur, aux plus récents ransomware qui remplace l'explorateur au lancement de l'ordinateur et empêche ainsi l'utilisateur d'effectuer la moindre action sans que ce dernier ait payé une "rançon" pour libérer l’accès à sa session Windows, ou à ses données. Tout cela est possible via des modifications du registre Windows. Pour améliorer la protection du registre, il faut rappeler que sa modification ne devrait être possible uniquement par un administrateur, et non par des utilisateurs courants de l'ordinateur (voir l'article Renforcer le contrôle de compte utilisateur).