====== Registre Windows ====== La Registre Windows (anciennement //base de registre// ou //BDR//) est, sous Windows, une base de données contenant l'essentiel des réglages du système et des logiciels qui y sont installés. Voici quelques infos sur son contenu, comment il est organisé et comment le manipuler en ligne de commande. ===== Infos générales ===== Windows utilise des SID (Security Identifiers) pour identifier de façon unique chaque système, utilisateur ou groupe. A ne pas confondre avec le UID/GUID, qui sert à des usages plus généraux. Plus d'informations sur les SID courants (hors ceux des utilisateurs en eux-mêmes) : [[https://www.toutwindows.com/sid.shtml]] ===== Organisation ===== Accessible avec la commande ''regedit'' depuis une invite de commande ou depuis la fenêtre Exécuter (Windows+R). La base de registre s'organise en ces quelques dossiers racines : ^ Nom ^ Alias ^ Utilité ^ Droits d'accès ^ | HKEY_CLASSES_ROOT | HKCR | Données relatives aux applications (raccourcis, association aux extensions, etc.). Raccourci vers une clé de HKLM. | Administrateur uniquement | | HKEY_CURRENT_USER | HKCU | Données spécifiques à l'utilisateur actuellement connecté. | Utilisateur concerné | | HKEY_LOCAL_MACHINE | HKLM | Données de configurations communes à tous les utilisateurs. | Administrateur uniquement | | HKEY_USERS | HKU | Réglage des [[https://fr.wikipedia.org/wiki/Strat%C3%A9gie_de_groupe|stratégies de groupe]] et utilisateurs actuellements connectés. | Administrateur uniquement | | HKEY_CURRENT_CONFIG | HKCC | Données relatives au profil hardware. Raccourci vers une clé de HKLM. | Administrateur uniquement | Chacune de ces "clés" est enregistrée dans un fichier de configuration que l'on appelle une **ruche** (//hive//, en anglais). Ces ruches sont dans le dossier système ''%SystemRoot%\System32\Config'' excepté celle relative à l'utilisateur connecté, qui est dans le dossier de l'utilisateur en question ''%UserProfile%\ntuser.dat''. ==== Clés-racines ==== === HKEY_CLASSES_ROOT (HKCR) === Référence à ''HKEY_LOCAL_MACHINE\Software\Classes''. Il s'agit juste d'un raccourci, afin de ne pas avoir à aller farfouiller dans HKLM pour ça. === HKEY_CURRENT_USER (HKCU) === Si l'utilisateur n'a pas de droit Administrateur, alors c'est le seul endroit où il a le droit d'écrire (et de lire ? ⇨ à vérifier FIXME). Ce dossier sera différent en fonction de quel utilisateur est en train d'accéder à la base de registre. Ce sont juste les préférences et réglages de CET utilisateur-là, et ils sont stockés dans le fichier ''ntuser.dat'' à la racine de son dossier utilisateur. === HKEY_LOCAL_MACHINE (HKLM) === === HKEY_USERS (HKU) === - ''.DEFAULT'' : réglages de base utilisés lorsqu'on créé un nouvel utilisateur. - ''S-1-5-21-XXX'' : les ruches des différents utilisateurs (actuellement connectés ? ⇨ à vérifier FIXME) === HKEY_CURRENT_CONFIG (HKCC) === Référence à ''HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001''. Il s'agit juste d'un raccourci, afin de ne pas avoir à aller farfouiller dans HKLM pour ça. ==== Clés utiles ==== === SID des utilisateurs === Les SID de tous les utilisateurs existants sur cette machine sont renseigné dans ''HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\''. Cela peut permettre de remonter à l'utilisateur à partir d'un SID lu dans ''HKU''. === TODO === FIXME HKLM\Software et HKCU\Software HKLM\Software\Microsoft\Windows\CurrentVersion et HKLM\Software\Microsoft\Windows NT\CurrentVersion ===== Manipulation en ligne de commande ===== Documentation officielle des commandes reg : https://docs.microsoft.com/fr-fr/windows-server/administration/windows-commands/reg ==== Types de données ==== On appelle **clé** un dossier du registre. Une donnée, stockée sous forme d'association qu'on aurait d'habitude tendance à appeler "clé-valeur" est appelée ici "nom de valeur - données de valeur" (name-data). Voici les types de valeurs les plus courrants (pour une liste exhaustive, voir [[https://docs.microsoft.com/en-us/windows/win32/sysinfo/registry-value-types|la doc]]) : ^ Désignation ^ Type ^ Exemples de valeurs ^ | REG_BINARY | données binaires | | | REG_DWORD | nombre (32 bits) | (en hexa) 0, 1, f2e | | REG_QWORD | nombre (64 bits) | ::: | | REG_SZ | texte | val1 | | REG_MULTI_SZ | tableau de chaines | val1 \\ val2 \\ val3 | | REG_LINK | chemin vers fichier | | ==== Lecture de clé/valeur ==== reg query HKLM\Software\Chemin\vers\la\clé ==== Création/mise à jour de valeur ==== Base de la commande pour ajouter une nouvelle clé : reg add HKLM\Software\chemin /v /t /d Base de la commande pour forcer l'écrasement si elle existe déjà (= mettre à jour) reg add HKLM\Software\chemin /v /t /d /f Exemples : reg add HKLM\Software\chemin /v maValeur /t REG_DWORD /d 2f /f reg add HKLM\Software\chemin /v maValeur /t REG_SZ /d "valeur" /f reg add HKLM\Software\chemin /v maValeur /t REG_MULTI_SZ /d "val1\0val2\0val3" /f ==== Suppression de clé/valeur ==== Pour supprimer une clé (et toutes ses valeurs) : reg delete HKLM\Software\chemin Pour supprimer une valeur en particulier : reg delete HKLM\Software\chemin /v maValeur ==== Charger la ruche d'un utilisateur ==== reg load HKU\ C:\Users\\ntuser.dat Une fois les actions terminées, pour retirer cette clé "temporaire" du registre : reg unload HKU\ En soi, rien ne nous oblige d'utiliser le SID de l'utilisateur dans cet exemple, mais ça permet de rester sur le même schéma que ce que fait Windows lorsqu'un utilisateur est connecté. ==== SID utilisateur ==== Pour récupérer le SID d'un utilisateur : WMIC useraccount where name="" get sid