Cours sur le Registre de Windows

Développement système natif en c/c++ avec win32 ...

Moderator: Rick

Post Reply
Hydraxx
Site Admin
Posts: 19
Joined: Mon Jan 12, 2026 4:04 pm
Location: France
Contact:

Cours sur le Registre de Windows

Post by Hydraxx »

# Le registre Windows

Aujourd’hui on va voir **un composant central de Windows** :
**le registre**.

Le registre est partout :

* configuration système
* services
* pilotes
* logiciels
* sécurité

Beaucoup de devs l’utilisent sans comprendre **ce que c’est réellement**.
Ici on va voir **ce qu’est le registre**, comment il fonctionne, et comment l’utiliser proprement en Win32.

---

# 1) C’est quoi le registre Windows

Le **registre Windows** est une **base de données hiérarchique**.

Il stocke :

* la configuration du système
* la configuration des logiciels
* les paramètres utilisateurs

Il remplace les anciens fichiers .ini.

---

# 2) Le registre n’est pas un fichier texte

Le registre :

* n’est PAS un fichier texte
* n’est PAS un XML
* n’est PAS un INI

C’est une base gérée par le noyau.

Chaque accès passe par des API.

---

# 3) Les ruches principales (hives)

Les racines principales sont :

* HKEY_LOCAL_MACHINE (HKLM)
* HKEY_CURRENT_USER (HKCU)
* HKEY_CLASSES_ROOT (HKCR)
* HKEY_USERS (HKU)
* HKEY_CURRENT_CONFIG (HKCC)

Ce sont des **handles spéciaux**.

---

# 4) Clés et valeurs

Le registre est composé de :

* **clés** (comme des dossiers)
* **valeurs** (comme des fichiers)

Une valeur possède :

* un nom
* un type
* des données

---

# 5) Types de valeurs importants

Les types courants :

* REG_SZ → chaîne Unicode
* REG_EXPAND_SZ → chaîne avec variables
* REG_DWORD → entier 32 bits
* REG_QWORD → entier 64 bits
* REG_BINARY → données brutes

---

# 6) Ouvrir une clé du registre

Pour ouvrir une clé existante :

Code: Select all

HKEY hKey = NULL;

RegOpenKeyExW(
HKEY_CURRENT_USER,
L"Software\MyApp",
0,
KEY_READ,
&hKey
);
Le HKEY retourné doit être fermé.

---

# 7) Créer une clé

Pour créer une clé :

Code: Select all

RegCreateKeyExW(
HKEY_LOCAL_MACHINE,
L"Software\MyApp",
0,
NULL,
0,
KEY_WRITE,
NULL,
&hKey,
NULL
);
---

# 8) Lire une valeur

Pour lire une valeur :

Code: Select all

DWORD type = 0;
DWORD size = sizeof(DWORD);
DWORD data = 0;

RegQueryValueExW(
hKey,
L"Enabled",
NULL,
&type,
(LPBYTE)&data,
&size
);
---

# 9) Écrire une valeur

Pour écrire une valeur :

Code: Select all

DWORD data = 1;

RegSetValueExW(
hKey,
L"Enabled",
0,
REG_DWORD,
(const BYTE*)&data,
sizeof(data)
);
---

# 10) Supprimer clé ou valeur

Supprimer une valeur :

Code: Select all

RegDeleteValueW(hKey, L"Enabled");
Supprimer une clé :

Code: Select all

RegDeleteKeyW(HKEY_CURRENT_USER, L"Software\MyApp");
---

# 11) Droits d’accès au registre

Le registre est protégé par des ACL.

Exemples de droits :

* KEY_READ
* KEY_WRITE
* KEY_ALL_ACCESS

Sans les droits :

* accès refusé

---

# 12) Registre et sécurité

Le registre est lié :

* aux tokens
* aux privilèges
* à l’UAC

Écrire dans HKLM nécessite souvent :

* des droits administrateur

---

# 13) Registre et services

Les services sont configurés dans :

* HKLM\SYSTEM\CurrentControlSet\Services

Le SCM lit directement le registre.

---

# 14) Fermer une clé

Chaque clé ouverte doit être fermée :

Code: Select all

RegCloseKey(hKey);
Sinon :

* fuite de handle
* fuite noyau

---

# 15) Erreurs classiques

* oublier RegCloseKey
* écrire dans HKLM sans droits
* mal gérer la taille des buffers
* utiliser ANSI
* modifier le registre système sans comprendre

---

# À retenir

Le registre est une base système.
Il est hiérarchique.
Chaque clé est un handle.
Les accès sont sécurisés.
Les services et Windows en dépendent.

Comprendre le registre, c’est comprendre **comment Windows stocke sa configuration**.

Who is online

Users browsing this forum: Hydraxx and 1 guest