Ce qui suit se veut une brève introduction au registre de Windows.
Dans les temps anciens et immémoriaux, il était d’usage de configurer Windows et les programmes faits pour cette plate-forme à l’aide de fichiers de configuration texte, qui portaient l’extension .INI (pour initialisation). La plupart des programmes offraient une interface personne/machine graphique pour faciliter la tâche de personnalisation à un usager, mais ce que cette interface faisait, en bout de ligne, était de mettre à jour le fichier .INI du programme à personnaliser.
Ainsi, pour Windows lui-même, on trouvait le fichier WIN.INI, qui indiquait par exemple au système:
On trouvait aussi le fichier SYSTEM.INI, qui indiquait entre autres:
Le programme sysedit.exe offrait un raccourci pour éditer les fichiers de configuration principaux (dont ceux ci-dessus), mais on aurait pu les éditer avec à peu près n’importe quel éditeur de texte.
D’autres programmes pouvaient utiliser leurs propres fichiers .INI (par exemple WORDPAD.INI pour la configuration du programme Wordpad.exe, ou ODBCINST.INI pour la configuration des pilotes ODBC).
L’ennui avec tous ces fichiers disparates était multiple:
Par contre, les fichiers .INI avaient l’avantage de la simplicité et de la convivialité. On pouvait aisément en ouvrir un et le lire, pour voir ce qui s’y trouvait, et—le cas échéant—l’éditer manuellement.
Si Windows 95 supportait encore la méthodologie reposant sur des fichiers .INI, il implante toutefois aussi ce qui est maintenant la manière privilégiée de gérer la configuration de l’ordinateur: le registre (Windows Registry).
Le registre est une base de données, servant à entreposer des informations de configuration et des options pour les versions 32 bits de Windows (incluant Windows 95, 98, Me, NT/2000 et XP) et pour les programmes qui y sont installés.
On y trouve des informations sur la configuration, pour la station de travail courante, de tout le matériel, le logiciel, les usagers et leurs préférences.
Dès qu’un usager modifie quelque chose à travers le panneau de configuration, les politiques du système (System Policies), les associations entre fichiers et programmes, ou encore installe ou désinstalle un logiciel, ces changements sont reflétés par des modifications au registre.
Les fichiers qui constituent le registre différeront selon la version de Windows:
On peut afficher le nom de ce répertoire à la sortie standard de la manière traditionnelle:
echo Le répertoire de base pour ce poste est %SystemRoot%
Le registre de Windows se trouve maintenant dans un répertoire dont l’emplacement dépend du contenu de SystemRoot, soit %SystemRoot%\System32\Config.
Le registre comporte une structure hiérarchique, similaire à celle du système de fichiers. On peut l’explorer selon le même modèle.
Chaque branche principale (qu’on voit à gauche, chacune apparaissant comme un dossier) porte le nom de ruche (Hive).
|
Il y a cinq (5) branches principales (cinq ruches), chacune contenant une portion spécifique des informations contenues dans le registre. Ce sont:
Chaque valeur entreposée dans le registre a un type, un peu comme les types d’un langage de programmation. Certains sont disponibles à travers l’éditeur de registre, soit:
D’autres types existent aussi, qui ne sont pas disponibles via l’éditeur de registre mais qu’on peut quand même retrouver dans le registre (on peut les utiliser par programmation). Par exemple:
Un éditeur de registre, nommé REGEDIT.EXE, est en général inclus avec Windows (on ne le rend pas disponible via le menu Démarrer, pour des raisons évidentes de sécurité).
Cet éditeur permet de visualiser le contenu du registre, d’y effectuer des recherches, et d’en éditer le contenu.
Un éditeur de registre plus versatile et plus puissant, REGEDT32.EXE, est aussi disponible sous Windows NT/2000 (notez que sous Windows XP, REGEDIT.EXE et REGEDT32.EXE sont en fait deux noms pour le même programme). On trouve dans la nouvelle version du support pour des options qui n’apparaissent pas dans l’ancien éditeur standard, dont:
Notez tout d’abord que, de manière analogue à l’explorateur de Windows, l’éditeur de registre présente à gauche un arbre de dossiers, structurant le registre, et à droite les clés du dossier courant.
Il est possible d’ajouter manuellement des clés en passant par le menu Édition->Nouveau, ou en passant par le menu contextuel du côté droit (côté contenu) de l’éditeur.
Il est aussi possible de modifier une clé ou une valeur, soit en la renommant (ce qui est permis pour la plupart des clés) ou en la modifiant (au sens de changer sa valeur). On peut aussi supprimer une clé (devinez comment).
L’utilisation de l’éditeur de registre comporte un certain nombre d’inconvénients agaçants:
Note: il est bien sûr important de faire une copie de sauvegarde du registre avant d’y apporter des changements, l’information qui s’y trouve étant d’une importance capitale au bon fonctionnement de l’ordinateur.
Certains éditeurs de tiers partis existent. Si vous en avez un, servez-vous en—et si votre emploi vous amène à jouer fréquemment dans le registre, ça vaut peut-être la peine de vous en procurer un.
L’avantage des éditeurs de tiers partis est qu’il tiennent généralement compte des faiblesses de l’éditeur standard (ils offrent plus d’information sur les risques de certaines opérations, et la plupart offrent la possibilité d’annuler une action).
L’éditeur de registre permet d’exporter et d’importer la configuration du registre sous forme textuelle (un fichier en général fort volumineux portant l’extension .REG). C’est d’ailleurs là une des manières par lesquelles on peut faire une copie de sauvegarde ou une mise à jour propre du registre.
On peut aussi exporter une clé (et ses sous-clés) seulement en sélectionnant d’abord la clé voulue puis en l’exportant.
Pour exporter ou importer une clé, il est possible d’utiliser le menu Fichier -> Exporter (ou Importer) de l’éditeur de registre.
Puisqu’un fichier .REG est un vulgaire fichier texte, on peut l’ouvrir dans un éditeur de texte comme le bloc notes (ou, en général, Word ou Wordpad, puisque le bloc notes ne peut ouvrir que des fichiers d’une taille de 32 767 octets et moins).
Le contenu d’un fichier .REG aura l’air de ceci (ici, on parle d’un fichier contenant une clé extrêmement simple):
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\Select] "Current"=dword:00000003 "Default"=dword:00000003 "Failed"=dword:00000001 "LastKnownGood"=dword:00000004
On lit un tel fichier comme suit:
Il est donc possible, si on le désire—et si on agit avec prudence—d’éditer, le cas échéant, ce fichier texte, puis de le réinsérer dans le registre en l’y important.
Lorsqu'un fichier .REG réglementaire est importé dans le registre, toutes les clés déjà existantes sont modifiées et toutes les clés n'existant pas déjà sont créées selon les spécifications du fichier. C'est la même chose pour les valeurs. On peut donc modifier ou ajouter clés et valeurs aisément.
Plus simple encore: lorsque l'on double-clique sur un fichier .REG, celui-ci est automatiquement (après confirmation de l'usager) "fusionné" avec le registre, c'est-à-dire qu'il y est importé. Voilà qui est très pratique lorsqu'on a des configurations précises à mettre en place sur plusieurs postes!
Lorsque l'on définit une valeur comme étant égale à une donnée dans un fichier .REG, on préfixera la donnée de son type, suivi d'un deux points. La seule exception à cela est le type REG_SZ, qui n'a besoin d'aucun préfixe:
"PROCESSOR_ARCHITECTURE"="x86"Le type REG_DWORD utilisera simplement le préfixe dword:
"Current"=dword:00000003Le type REG_BINARY utilisera le préfixe hex:
"Change1"=hex:01,15,f0,3b,08,3d,03,5f,74,03,e9,06,00,3d,03,5f,90,90,e9,06,00Remarquez que les octets sont séparés par des virgules. Le type REG_MULTI_SZ utilise le préfixe hex(7):
"ObUnsecureGlobalNames"=hex(7):6e,00,65,00,74,00,66,00,78,00,63,00,75,00,73,00,\ 74,00,6f,00,6d,00,70,00,65,00,72,00,66,00,63,00,6f,00,75,00,6e,00,74,00,65,\ 00,72,00,73,00,2e,00,31,00,2e,00,30,00,00,00,53,00,68,00,61,00,72,00,65,00,\ 64,00,50,00,65,00,72,00,66,00,49,00,50,00,43,00,42,00,6c,00,6f,00,63,00,6b,\Remarquez qu'encore une fois ici les octets sont séparés par des virgules, même si dans l'éditeur de registres on écrit directement du texte... Les caractères nuls qui servent de séparateurs des valeurs sont représentés par un backslash suivi d'un retour de chariot). Finalement, le type REG_EXPAND_SZ utilise le préfixe hex(2):
"Posix"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,\ 00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,70,00,\ 73,00,78,00,73,00,73,00,2e,00,65,00,78,00,65,00,00,00
Le fonctionnement est similaire à celui de REG_MULTI_SZ.
On peut aussi supprimer des clés ou des valeurs à l’aide d’un fichier .REG. Pour supprimer une clé, il suffit d’utiliser son nom (selon le format présenté ci-dessus) en le préfixant du symbole -.
Par exemple, pour supprimer la clé [HKEY_LOCAL_MACHINE\SYSTEM\Setup], on pourra écrire:
Windows Registry Editor Version 5.00 [-HKEY_LOCAL_MACHINE\SYSTEM\Select]
Lorsque l'on supprime une clé, on supprime tout son contenu, donc toutes ses sous-clés et toutes leurs valeurs... C'est un peu l'équivalent d'un rd /s à la console, puisqu'on coupe une branche complète de l'arborescence – la prudence est donc de mise!
Le format sera similaire si le but visé est de supprimer une valeur. Dans ce cas, plutôt que de préfixer la clé en entier d’un -, on placera ce symbole tout de suite après le = de la valeur en question.
Par exemple, pour supprimer seulement la valeur Default de la clé [HKEY_LOCAL_MACHINE\SYSTEM\Select], on pourra écrire:
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\Select] "Default"=-
Bien entendu, la suppression est brutale, et il y a toujours un risque de faire une bêtise. Prenez soin de faire une copie de sauvegarde du registre avant de vous lancer dans des opérations aussi risquées.
Si vous bâtissez un fichier .REG à partir de zéro avec le bloc-notes de Windows (plutôt qu'à partir d'un fichier précédemment exporté de REGEDIT), il ne faut pas oublier la première ligne (Windows Registry Editor Version 5.00). Sans cette ligne d'identification, Windows stipulera que votre fichier .REG n'est pas un fichier de registre valide et n'ira pas plus loin dans l'importation.
Une clé contient toujours au moins une valeur, il est impossible de créer une clé totalement vide ou d'effacer tout son contenu. En effet, chaque clé contient automatiquement la valeur "(par défaut)", de type REG_SZ. Cette valeur peut très bien ne pas contenir de données, mais elle sera présente dans toute clé (c'est bien important de faire la différence entre clé, valeur et donnée!).
S'il est très facile de modifier la donnée contenue dans cette valeur par défaut via l'éditeur de registre, qu'en est-il d'un fichier .REG?
C'est très simple aussi, on peut utiliser le nom @ pour représenter la valeur par défaut de la clé et faire par exemple:
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\Select] @="Bonjour"
Certaines applications n'utilisent que les valeurs par défaut des clés, et plutôt que de créer une clé contenant plusieurs valeurs, elles créent une clé contenant plusieurs sous-clés, chacune d'elle ne contenant que sa valeur par défaut. C'est un format qui se tient mais qui est un peu plus lourd.
On peut automatiser le fonctionnement de regedit à l’aide de fichiers de traitement par lots (les bons vieux batch files) ou d’installateurs logiciels en l’appelant, à la ligne de commande, avec certains paramètres (comme toute commande DOS).
Le format, pour l'importation, est:
regedit.exe [/s] nomDeFichier
où nomDeFichier est le nom du fichier .REG dont contenu sera importé dans le registre. Si l'option /s est utilisée, on fonctionne en mode silencieux (on ne verra pas de messages s’afficher pendant que regedit travaille et aucune confirmation ne nous sera demandée).
Par exemple, pour insérer le contenu de TRUCS.REG dans le registre, on écrira:
regedit TRUCS.REG
ce qui fera entre autres apparaître une fenêtre demandant à l’usager de confirmer cette opération.
Si vous voulez éviter cette demande de confirmation, faites plutôt:
regedit /s TRUCS.REG
Si on veut plutôt exporter une clé dans un fichier texte, on utilisera le format:
regedit.exe /e nomDeFichier nomDeClé
Par exemple, pour exporter la clé HKEY_USERS\.DEFAULT dans le fichier FICHIER.REG, on écrira:
regedit /e FICHIER.REG HKEY_USERS\.DEFAULT
Certains (plusieurs!) programmes laissent de la cochonnerie dans le registre, oubliant de supprimer des clés lors de leur désinstallation.
On peut nettoyer le registre manuellement, quoique ce ne soit en général pas une option (trop lourd, trop risqué).
Microsoft offrait un outil permettant d’automatiser le processus de nettoyage, nommé RegClean (ce produit existe toujours, mais est maintenant offert par un tiers parti). Ce programme analyse les clés du registre, trouve celles qui semblent erronées, et les élimine du registre (pouf!). Avant de quitter, il laisse les opérations propres à une annulation de ces opérations dans un fichier .REG (nommé Undo.Reg), au cas où.
Bien entendu, il existe des tas de logiciels créés dans le but de nettoyer ou de réparer la base de registres. Parmi les plus recommandés, on retrouve "Advanced System Optimizer" de Systweak, "Fix-It Utilities" de Vcom et "Ace Utilities" d'Ace Logix. Les prix de ces logiciels tournent autour de 30 à 50 dollars.
Il n'est pas toujours facile de s'y retrouver dans les milliers de clés du registre. Normalement, on ne s'aventurera là que si on sait ce que l'on fait, par exemple en suivant une procédure de désinstallation manuelle d'un virus, ou après avoir trouvé de la documentation pertinente sur Internet pour atteindre un but précis.
Toutefois, il existe plusieurs clés de registres particulièrement utiles. En voici une liste:
Il existe également une fonction de recherche (via le menu Édition) qui est fort pratique!
Ce qui suit est rendu possible en grande partie par l’apport de François Jean, professeur au département d’informatique du Collège et grand gourou de la Microsoftesquerie.
Le registre, on le sait, contient les informations de configuration de votre ordinateur. Cet exercice, assez court, vous permettra de vérifier (en partie) ceci. Cet exercice sera beaucoup plus éloquent si vous le faites chez vous, sur un ordinateur qui a un certain vécu...
À l’aide de l’éditeur de registre, ouvrez la clé suivante:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
Tout en laissant ouvert l’éditeur de registre à cet endroit, ouvrez le Panneau de configuration de Windows et démarrez Ajout/Suppression de programme.
Que remarquez-vous des programmes pouvant être désinstallés? Si vous ne voyez rien dans la clé mentionnée ci-haut en laboratoire, essayez de faire le test chez vous.
Quelques opérations amusantes (tirées en grande partie d’un site de Microsoft). Ces exercices vous sont donnés principalement pour vous permettre d'explorer et de devenir plus à l'aise avec la base de registres. Certains d'entre eux nécessiteront un peu de recherches de votre part et vous feront faire des découvertes!
La majorité des exercices vous fournissent un script servant à modifier le registre (on dira que le contenu du fichier sera fusionné au registre). Vous n'avez qu'à créer un fichier texte, à l'ouvrir avec le bloc-notes, à coller le script voulu dedans et à enregistrer le fichier avec l'extension .reg pour en faire un fichier de registres. Après coup, il suffit de double-cliquer dessus pour le fusionner à la base de registres.
Essayez le script suivant (en l’insérant dans un fichier .REG, disons EX1.REG):
Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\ClassicStartMenu] "{645FF040-5081-101B-9F08-00AA002F954E}"=dword:00000001 [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel] "{645FF040-5081-101B-9F08-00AA002F954E}"=dword:00000001
Pour voir l’impact, il vous faudra rafraîchir l’affichage de votre bureau (cliquez-y, puis faites F5). Quelles sont vos observations?
Que pouvez-vous conclure de son fonctionnement en analysant un peu le nom des clés que vous modifiez ici?
Essayez le script suivant (en l’insérant dans un fichier .REG, disons EX2.REG):
Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\ClassicStartMenu] "{645FF040-5081-101B-9F08-00AA002F954E}"=dword:00000000 [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel] "{645FF040-5081-101B-9F08-00AA002F954E}"=dword:00000000
Pour voir l’impact, il vous faudra rafraîchir l’affichage de votre bureau (cliquez-y, puis faites F5). Quelles sont vos observations?
Que pouvez-vous conclure de son fonctionnement en analysant un peu le nom des clés que vous modifiez ici?
Essayez le script suivant (en l’insérant dans un fichier .REG, disons EX3.REG ou en éditant directement dans regedit):
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\RecycleBinOnDesktop] "RegPath"="Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\HideDesktopIcons\\NewStartPanel" "Text"="Afficher la poubelle sur le bureau" "Type"="checkbox" "ValueName"="{645FF040-5081-101B-9F08-00AA002F954E}" "CheckedValue"=dword:00000000 "UncheckedValue"=dword:00000001 "DefaultValue"=dword:00000001 "HKeyRoot"=dword:80000001
Pour voir l’impact, il vous faudra utiliser l’explorateur de Windows et aller voir le menu Outils->Options des dossiers, onglet Affichage. Quelles sont vos observations?
Que concluez-vous sur la puissance de la base de registres?
Essayez le script suivant (en l’insérant dans un fichier .REG, disons EX4.REG):
Windows Registry Editor Version 5.00 [-HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs]
Pour voir l’impact, vous pouvez examiner le contenu du menu "Mes documents récents" du menu Démarrer, avant et après la fusion du fichier. Que remarquez-vous?
Question pour la deuxième semaine: que fait concrètement le script dans la base de registres?
Plus délicat, mais très intéressant. Il est possible de forcer Windows XP à vider les historiques (comme si on avait appliqué le script à EX4) lors de chaque redémarrage.
Pour ce faire, à la clé
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
il faut ajouter (si elle n’existe pas déjà) la valeur de type REG_SZ nommée ClearMRU, et faire en sorte que la donnée de la valeur ClearMRU en question soit une instruction à la ligne de commande qui importe silencieusement le script fait à l’exercice 4. Essayez d’y arriver par vous-même…
Essayez le script suivant (en l’insérant dans un fichier .REG, disons EX6.REG – ne travaillez pas directement dans regedit!):
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}] "LocalizedString"=hex(2):25,00,55,00,53,00,45,00,52,00,4e,00,41,00,4d,00,45,00,25,00,27,00,73,00,20,00,43,00,6f,00,6d,00,70,00,75,00,74,00,65,00,72,00,00,00
Pour voir l’impact, trouvez l'icône Poste de Travail, soit sur votre bureau (il vous faudra peut-être rafraîchir l'affichage du bureau avec F5) ou dans le menu Démarrer. Quelles sont vos observations?
Comment, selon vous, ce script s'y prend-il pour arriver à ses fins?
Essayez le script suivant (en l’insérant dans un fichier .REG, disons EX7.REG):
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}] "LocalizedString"="Mon ordi" [HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\regedit] @="Regedit" [HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\regedit\command] @="C:\\Windows\\Regedit.exe"
Pour voir l’impact, il vous faudra obtenir le menu contextuel du poste de travail (en cliquant avec le bouton de droite sur l'icône Poste de Travail). Quelles sont vos observations?
Créez un fichier nommé A.XYZ. Ouvrez ce fichier et examinez le dialogue qui se présente à vous. Lorsque vous aurez noté ce qu’on vous y propose, fermez-le. Démarrez ensuite l’éditeur de registres et allez à la clé :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\ CurrentVersion\Policies\System
Insérez-y une nouvelle valeur de type DWORD nommée NoInternetOpenWith. Donnez-lui la valeur 1.
Tentez à nouveau d’ouvrir A.XYZ. Voyez-vous une différence? Laquelle?
Comment pourrions-nous revenir à la formule initiale?
Remarque: on peut obtenir le même résultat pour l’usager courant (plutôt que pour l’ordinateur tout entier) en modifiant plutôt la clé
HKEY_CURRENT_USER\Software\Microsoft\Windows\ CurrentVersion\Explorer
et en y insérant une nouvelle sous-clé de type DWORD nommée InternetOpenWith (attention au nom!), à laquelle on attribuera la valeur 0. Voyez-vous la relation entre la première procédure et celle-ci?
Vraiment pas facile. On peut démarrer l’interpréteur de commandes CMD.EXE en lui demandant d’exécuter une commande dès son lancement. Ceci permet, entre autres, de lui imposer un répertoire initial de notre choix (si cette commande est un CD).
Par exemple, exécuter la commande à droite démarre l’interpréteur à la ligne de commande avec comme répertoire de travail initial C:\Program Files. |
cmd.exe /k cd "c:\program files" |
Sachant que:
[HKEY_CLASSES_ROOT\Directory\shell\Ma Propre Commande] @="Nom de &ma commande"
[HKEY_CLASSES_ROOT\Directory\shell\Ma Propre Commande\command] @="macommande.exe"
Faites en sorte que le menu contextuel des répertoires propose l’entrée "Lancer CMD ici" qui démarre CMD.EXE avec le répertoire en question comme répertoire initial de travail.
On peut spécifier le nombre de documents récents dont se souvient l’explorateur de Windows en modifiant la clé
[HKEY_CURRENT_USER\Software\Microsoft\Windows\ CurrentVersion\Policies\Explorer]
et en particulier sa sous-clé MaxRecentDocs dont la valeur indique le nombre de documents récents en question, en notation hexadécimale (base 16).
Faites en sorte que Windows se souvienne des 32 plus récents documents ouverts. Comment avez-vous procédé?
Trouvez par vous-mêmes comment ajouter des traces de souris (Mouse Trails) lorsque la souris se déplace à l’écran en passant directement par la base de registres, et ce pour l’usager courant seulement. Indiquez votre démarche ici. Vous aurez besoin d'explorer un peu...
Quel est le rôle de la valeur MenuShowDelay de la clé HKEY_CURRENT_USER\Control Panel\Desktop ?
Expérimentez si nécessaire pour comprendre son utilité.