begin process at 2012 05 30 16:20:43
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

System

 > 

RegSaveKeyEx


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

RegSaveKeyEx

jeudi 17 juin 2010 à 19:10:09 | RegSaveKeyEx

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 :

if(RegOpenKeyEx(HKEY_CURRENT_USER,L"Software\\Microsoft",0,KEY_ALL_ACCESS,&hKey)==ERROR_SUCCESS)
{
if(RegSaveKeyEx(hKey,L"Save.reg",NULL,REG_STANDARD_FORMAT)==ERROR_SUCCESS)
RegCloseKey(hKey);
}

Le fichier Save.reg est bien créé, mais il fait 0 octet, n'est pas fusionnable avec le registre et est vide lorsque je l'édite avec le bloc note.

une idée d'où vient le problème?
Merci.
jeudi 17 juin 2010 à 21:04:23 | Re : RegSaveKeyEx

BruNews

Administrateur CodeS-SourceS
Tu as bien mis le privilège SE_BACKUP_NAME sur ton processus ?

RegCloseKey(hKey);
n'a pas a être dépendant de la réussite ou non de RegSaveKeyEx mais de RegOpenKeyEx.

Faut faire gaffe à ne pas recopier nimporte comment les exemples du web, IL FAUT LIRE MSDN !!!
Les fonctions REGxxx réussissent si elles retournent 0 !!!

ciao...
BruNews, MVP VC++
jeudi 17 juin 2010 à 21:38:22 | Re : RegSaveKeyEx

racpp

Administrateur CodeS-SourceS
Salut,
Effectivement, MSDN précise bien que le process appelant RegSaveKeyEx() doit avoir le privilège SE_BACKUP_NAME. Voici un exemple simple permettant de donner ce privilège au process courant:
Code C/C++ :
    HANDLE hToken; 
    TOKEN_PRIVILEGES tkp; 
    OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken);
    LookupPrivilegeValue(NULL, SE_BACKUP_NAME, &tkp.Privileges[0].Luid); 
    tkp.PrivilegeCount = 1;   
    tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; 
    AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES)NULL, 0); 
    CloseHandle(hToken);

RegSaveKeyEx() échoue également quand le fichier donné en 2ème paramètre existe déjà.
samedi 19 juin 2010 à 02:26:41 | Re : RegSaveKeyEx

PriMe2302

Merci mon fichier Save.reg fait maintenant quelque kilo mais je ne peux pas le fusionner, et lorsque je l'édite j'ai plein de caractères spéciaux :

Widt ztestÿÿÿ8ÿÿÿsk x x  ¬  ¤¤   l  $ ?    QCsµˆb®úWé  ?     ?               QCsµˆb®úW àÿÿÿvk  ¤1   1  in @ àÿÿÿvk  ¤   2idthndiðÿÿÿ@ h h


voici mon nouveau code :
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,&hToken);
LookupPrivilegeValue(NULL,SE_BACKUP_NAME,&tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken,FALSE,&tkp,0,(PTOKEN_PRIVILEGES)NULL,0);
CloseHandle(hToken);
HKEY hKey;
if(RegOpenKeyEx(HKEY_CURRENT_USER,L"Software\\Microsoft",0,KEY_ALL_ACCESS,&hKey)==ERROR_SUCCESS)
{
if(RegSaveKeyEx(hKey,L"Save.reg",NULL,REG_STANDARD_FORMAT)==ERROR_SUCCESS);
RegCloseKey(hKey);
}
samedi 19 juin 2010 à 21:23:05 | Re : RegSaveKeyEx

racpp

Administrateur CodeS-SourceS
Le format du fichier reg créé avec RegSaveKeyEx() n'est pas fait pour être édité dans le bloc-notes. Ce fichier est utilisable avec RegLoadKey() ou RegRestoreKey(). Je pense que ce n'est pas très dur de faire ce que tu veux simplement en énumérant les sous-clés de ta clé principale puis récupérer toutes les chaines avec leurs types et valeurs pour tout sauvegarder dans un fichier texte conforme au format reg éditable.
Voici la page MSDN sur les fonctions de la base de registres:
http://msdn.microsoft.com/en-us/library/ms724875%28v=VS.85%29.aspx
dimanche 20 juin 2010 à 01:19:51 | Re : RegSaveKeyEx

PriMe2302

merci à tous :)


Cette discussion est classée dans : reg, registre, clé, hkey, regsavekeyex


Répondre à ce message

Sujets en rapport avec ce message

[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 <br ecrire une valeur dans la base de registre [ par yerosnimus ] bonjour,en dépit de toute la littérature trouvée sur ce site concernant l'écriture de clé dans la base de registre windows, je n'y arrive pas ou pas t 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"; creer une clé de registre en C [ par shadow1779 ] Bonjour, j'ai trouvé ca sur msdn pour creer une clé de registre en C, cepandant je n'ai vraiment pas compris donc si quelqu'un pouvait me le refaire a Exporter une clé de registre [ par fannylapo ] Bonjour,J'ai un problème et j'aurais besoin d'être rapidement.Je désire exporter une clé de registre vers un .reg dans un dossier. Je code en MFC en u [GCC] clé registre: suppression [ par badboy38 ] Bonjour,Je cherche comment supprimer une clé registre en C, mais je ne trouve rien (du moins à mon niveau....) J'ai cru comprendre qu'il fallait regis créer un clé registre (dword) [ par cddvdcopy ] voila mon probleme (j'utilise dev-C++) je voudrai creer une clé registre elle se situera ici : HKCU\Software\monlogiciel le repertoire "monlogiciel" e probleme création d'une clé de registre [ par stefbuet ] Salut, en regardant les sources du site, j'ai réussi à extraire un pti bou de code mais sa ne marche pas completement:en effet, le chemin mycompagny/m Le béaba... [ par babaslow ] Bonjour,J'ai une question toute "conne" à poser. Voilà : j'essaie d'écrire le plus simplement du monde une clé en  DWORD comme ceci :     HKEY hkey; démarrage automatique avec windows [ par ndubien ] Bonjour,Comment faire pour que mon programme se lance au démarrage de windows et celà à partir du registre?Quelle clé créer? Avec quelle nom? Quelle v


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

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 : 3,073 sec (3)

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