[c] gestion complete de la base de registre

Description

Ce code permet de gérer la base de registre dans ses options les plus courantes
Il permet de créer des clefs, de les supprimer, de mettre des valeurs dans des clefs... enfin tout le blabla habituel sur la bdr, mais aussi d'enregistrer une clef (et toutes ses sous clefs) sous la forme d'un fichier reg, puis de le charger.
Il y a deux méthodes de sauvegarde:
+ Création du fichier .reg "à la main" par parcours de la clef et de toutes ses sous clefs (le format utilisé est celui de la version 4 de regedit),
+ Appel par création d'un processus de la ligne de commande "REGEDIT /E fichier clef".
La sauvegarde se fait uniquement par création du processus et appelle de la ligne de commande "REGEDIT /S fichier".

Pour l'utiliser, prendre le header et le fichier C et les intégrer à votre programme.

Source / Exemple :


#ifndef __BDR_H_
#define __BDR_H_

#include <windows.h>

#define HKCR				HKEY_CLASSES_ROOT
#define HKCU				HKEY_CURRENT_USER
#define HKLM				HKEY_LOCAL_MACHINE
#define HKU				HKEY_USERS
#define HKCC				HKEY_CURRENT_CONFIG

ULONG bdr_open(HKEY origine, LPCSTR key_name, PHKEY key);
ULONG bdr_create(HKEY origine, LPCSTR key_name, PHKEY key);	
__forceinline VOID bdr_close(HKEY key);
ULONG bdr_delete(HKEY origine, LPCSTR key_name);
ULONG bdr_readDataKey(HKEY key,	LPCSTR value_name, ULONG *value_type, BYTE *value, ULONG *value_len);
__forceinline ULONG bdr_setDataKey(HKEY key, LPCSTR value_name, ULONG value_type, LPCSTR value);
ULONG bdr_save(HKEY root, LPCSTR key2save, int file, BOOL header);
ULONG bdr_save_cmd(LPCSTR key, LPCTSTR file_name);
ULONG bdr_load(LPCSTR file_name);

#endif //__BDR_H_

Conclusion :


Dans un premier temps, j'ai voulu utiliser les fonctions RegSaveKeyEx et RegLoadKey pour la sauvegarde et le chargement des clefs, mais lors des appels à RegLoadKey, j'avais souvent des erreurs. Les clefs sauvegardées n'étaient pas toutes rechargées, les valeurs chargées ne correspondaient pas à celles que j'avais enregistrées... Et ces erreurs étaient "aléatoires", le code marchait en gros 2 fois sur 3. C'est pourquoi j'ai fibnalement conservé la sauvegarde par les fichiers reg.

Si certains ont eu des problèmes similaires avec RegSaveKeyEx et RegLoadKey, pourriez-vous svp m'indiquer comment vous y avez remédier?

Désolé pour ceux qui réclamaient une classe en cpp, je ne suis vraiment pas fan, et je préfère resté avec mon C ;)

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.