begin process at 2012 05 27 16:38:41
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Système

 > [C] GESTION COMPLETE DE LA BASE DE REGISTRE

[C] GESTION COMPLETE DE LA BASE DE REGISTRE


 Information sur la source

Note :
8,33 / 10 - par 3 personnes
8,33 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Système Classé sous :registre, reg, process Niveau :Initié Date de création :22/12/2004 Date de mise à jour :11/11/2006 18:39:33 Vu / téléchargé :10 253 / 1 014

Auteur : julienbj

Ecrire un message privé
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note


 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

  • #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_
#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 ;)

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

11 novembre 2006 18:39:33 :
Changement de la plupart des fonctions Gestion lors de la sauvegarde "a la main" des types REG_BINARY, REG_DWORD, REG_SZ, REG_EXPAND_SZ et REG_MULTI_SZ. Sauvegarde et chargement par CreateProcess plutot que par ShellExecute. Commentaires

 Sources du même auteur

Source avec Zip [C/WIN32] CONTROLE HYPERLINK
Source avec Zip [C] COULEUR CONSOLE
Source avec Zip Source avec une capture [C] NET DIALOG - ENVOI DE MESSAGES SUR UN RÉSEAU PRIVÉ
Source avec Zip Source avec une capture CREATION D'UN COMPOSANT: UNE JAUGE
Source avec Zip Source avec une capture HORLOGE

 Sources de la même categorie

Source avec Zip Source avec une capture INFORMATION PROCESSEUR (CPUID) par Devils_Tiger
Source avec Zip Source avec une capture LECTURE TEMPÉRATURE PROCESSEUR par Devils_Tiger
Source avec Zip Source avec une capture LECTURE FRÉQUENCE PROCESSEUR par Devils_Tiger
Source avec Zip Source avec une capture UNE LISTE HÉTÉROGÈNE DOUBLEMENT CHAINÉE par pgl10
Source avec Zip Source avec une capture POUR AFFICHER LES CARACTÈRES ACCENTUÉS SOUS WINDOWS EN MODE ... par pgl10

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture [C/WIN32/WMI]SAVOIR SI UNE CLASSE COM EST INSTALLÉE par rt15
Source avec Zip Source avec une capture [C/WIN32][DRIVER] DÉTECTION DE CRÉATION OU DE SUPPRESSION DE... par deck_bsd
UNIX : LISTER LE NOMBRE DE PROCESSUS TOURNANT SUR LA MACHINE par jojo930
Source avec Zip Source avec une capture [C/WIN32] EMPÈCHE UNE INTRUSION VIA LES PARTAGES PAR DÉFAUT ... par deck_bsd
Source avec Zip Source avec une capture REGISTRY GUARD BETA par Taron31

Commentaires et avis

Commentaire de minet03 le 23/12/2004 11:31:46

très bonne source, bravo. elle est assez bien commenté 7/10 parce que rien n'est parfait !

Commentaire de cosmobob le 23/12/2004 17:21:08

ta source est bien, bravo, maintenant tu pourrais porter ce code vers le C++ et faire une classe qui gere la base de registre, ca serait tres interessant egalement.
a++ ;)

Commentaire de julienbj le 26/12/2004 20:38:57

pour la classe en c++, je m'y mets des que j'ai fini mon projet (mi-janvier probablement!)
Ca devrait pas etre trop long à faire

Commentaire de verdy_p le 23/10/2007 13:09:18

RegSave et RegLoad ne sauvent pas la base de registre entière, car des entrées sont protégées par des options de sécurité (y compris dans HKEY_CURRENT_USER, où le système insère desclés sécurisés pour les données protégées comme les mots de passe cryptés, accessibles uniquement via l'API)
De plus il faut avoir les droits d'Administrateur de sauvegarde. Sinon seules les clés accessibles sont sauvegardées.

On n'a pas plus de droit avec l'énumération classique des clés et valeurs.

Il faut donc augmenter votre privilège pour acquérir les tokens SE_BACKUP et SE_RESTORE, et alors ça marche si on est admin et habilité...

Concernant HKEY_LOCAL_MACHINE, même l'administrateur local ne peut tout sauvegarder par défaut (tant que les options de sécurité ne sont pas présentes).

Attention aussi: certaines clés de HKEY_LOCAL_MACHINE ont un format très spécial (types de clés et de valeurs différents des types classiques. C'est le cas de SAM et SECURITY (dans lequel on trouve des liens vers SAM).

Enfin la basede registre contients des clés de redirection, montées dynamiquement: deux clés peuvent être identiques à des chemins différents. Si on veut parcourir l'arbre exhaustivement, on va obtenir une sauvegarde au moins deux fois trop grosse, et recharger des clés identiques sans forcément recréer les liens. Il faut gérer les liens et points de montage, ce qui n'est pas évident si on est connecté sur le système.

L'idéal est donc d'utiliser les points de restauration systèmes qui créent des backups corrects et pleinment utilisables: ils sont créés avec les bons privilèges et connaissent tous les formats de clés (tous les formats ne sont pas documentés, notamment pour SAM, SECURITY et les clés de configuration active PlugnPlay pour la gestion des ressources système).

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Manipulation de la base de registre [ par yserver ] Mon pb est pour ecrire des clefs ds la base de registe. Il s'agit de plusieurs types different il uy en a en tout 26. J'ai donc utilise un tableau de Base de registre [ par Elfus ] Bonjour, Ce que je veux faire est un petit truc tout bête qui est d'exporter une partie de la base de registre dans un fichier .reg. En gros l'exquiv Base de registre [ par chinois0013 ] Bonjour,Je souhaite executer un fichier reg à partir d'un executable en c++.J'utilise donc la fonction suivante :ShellExecute(0, 0, "C:\\Users\\Juju\\ ecrire base de registre [ par crogger ] Bonjour, je cherche à inscrire des valeurs dans la base de registre, j'ai bien trouvé cette solution :const String RegKey = "\\Software\\Exemple"; Cle de registre Reg_Binary [ par chinois0013 ] Bonjour,J'ai un petit problème et j'ai grand besoin de votre aide !Je ne comprends pas comment sont coder les valeurs binaires des clés de registre.Co RegSaveKeyEx [ par PriMe2302 ] Bonjour, Je voudrais sauvegarder un clé registre ainsi que toutes ses sous-clé. En faisant une recherche sur le site de msdn, j'ai fait ce code : i [registre] lancez un programme au demarrage [ par lombredudragon ] bonjour je debute en c++ , j'ai fait une recherche sur le site et j'ai trouver ce bout de code pour ecrire dans le registre:#include &lt;registry.hpp& tutoriel prog. base de registre [ par cando666 ] Bonjour a tous...c'était juste pour vous demander si quelqu'un connais un bon livre ou un site ou je pourrais apprendre à programmer en c/c++ dans la Registres (vérification) [ par Galmiza ] J'aimerais savoir comment vérifier qu'une variable definie avec l'option "registre" (ex: float register e;) est bien sauvegarder dans un registre et p UNION REGS ERROR in DEV C++ [ par samissam ] bonjour; j'ai la fonction suivante dans cod en c++ et quand j'essaie de compiler il me rend une erreur sur la ligne [union REGS registre;] disant q


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,640 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales