Problème gestion base de regsitre en C++ sous vista 64

gegematic Messages postés 5 Date d'inscription mardi 5 juin 2007 Statut Membre Dernière intervention 3 décembre 2009 - 1 déc. 2009 à 14:48
gegematic Messages postés 5 Date d'inscription mardi 5 juin 2007 Statut Membre Dernière intervention 3 décembre 2009 - 3 déc. 2009 à 19:52
Bonjour,
j'utilise une librairie pour gérer la base de registre en c, dont l'auteur est :
	
        // Support for the Windows Registry
// Version 5.10 (1st October)
// License - Free for any purpose, just do not remove the copyright
// Copyright (C) 1996-2006 - Jonathan Wilkes


Cette librairie a toujours fonctionné, avec windows Xp, mais sous Vista 64, elle n'arrive pas à a accéder à la clé
HKEY_LOCAL_MACHINE\SOFTWARE
par contre, elle accède sans pb à la clé
HKEY_LOCAL_MACHINE\HARDWARE
J'ai constaté, par regedit, que les autorisations sont différentes pour ces 2 clés.
est-ce que c'est l'explication ?
comment y remédier ?
Merci
Gérald


RegKey NewKey;
//RegKey::OpenKey(LPCTSTR pszKeyName, bool bCreateIfNoExist /* false */, HKEY hBaseKey /* HKEY_CURRENT_USER */, LPCTSTR pszMachineName /* = NULL */)
if (! NewKey.OpenKey("SOFTWARE", false, HKEY_LOCAL_MACHINE ))
cout << "clée SOFTWARE trouvée " << endl << endl;
else
cout << "clée SOFTWARE non trouvée " << endl << endl;

//end try with regkey

5 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
1 déc. 2009 à 19:30
Comme toute surcouche c'est nuisible car ça masque ce qu'il faut faire.
Va voir les params de RegOpenKeyEx sur MSDN et tu comprendras vite qu'i manque l'essentiel dans ta lib prémachée.
HKLM exclusivement en lecture depuis simple prog.
Regarde aussi le flag KEY_WOW64_64KEY.

ciao...
BruNews, MVP VC++
0
fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
2 déc. 2009 à 08:32
Par défaut, sur un OS x64, si on fait un RegOpen de HKEY_LOCAL_MACHINE\SOFTWARE\MySoft :
- un process 64bit accède à HKEY_LOCAL_MACHINE\SOFTWARE\MySoft
- un process 32bit accède en réalité à HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\MySoft

Pour forcer à lire dans la partie 32 ou 64bit, quelque soit l'architecture du soft (32 ou 64bit), il faut faire ce qu'a indiqué BruNews.
0
gegematic Messages postés 5 Date d'inscription mardi 5 juin 2007 Statut Membre Dernière intervention 3 décembre 2009
2 déc. 2009 à 19:32
Salut,
Merci de cette réponse rapide.
J'avais bien lu des choses à propos de ce Wow6432Node, mais j'avais pas bien saisit.
J'ai pu tester, effectivement, je me retrouve sur Wow6432Node, et la valeur que je cherche à lire ne s'y trouve pas.
Ce qui est idiot, c'est que j'ai simplement besoin de lire, pas d'écrire, donc il faut que je modifie les parametres de la classe OpenKey pour qu'elle spécifie "lecture seule".
J'ai essayé avec les 2 options :

if (! clAutocad.ouvrir(HKEY_LOCAL_MACHINE,"SOFTWARE",KEY_ALL_ACCESS))//version originale

if (! clAutocad.ouvrir(HKEY_LOCAL_MACHINE,"SOFTWARE",KEY_READ))//ne donne rien de mieux

if (! clAutocad.ouvrir(HKEY_LOCAL_MACHINE,"SOFTWARE",KEY_WOW64_64KEY))//ne marche pas !


Je suis allé voir RegOpenKeyEx sur MSDN, et je n'ai rein vu de particulier concernant mon problème
par contre sur cette page :
Registry Key Security and Access Rights
mais je ne comprends pas les explications.

maintenant, c'est assez compliqué pour moi, je ne programme pratiquement qu'en lisp, et un peu en VB, sous la torture.
ce que je cherche, c'est une librairie qui integre cette nouveauté des Os 64, et qui me permette de faire marcher ce petit bout de prog.
Merci
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
2 déc. 2009 à 21:09
KEY_WOW64_64KEY | KEY_QUERY_VALUE
en 4eme param.

S'il te faut une lib pour 3 fonctions, t'es pas rendu.
RegOpenKeyEx
RegQueryValueEx
RegCloseKey

ciao...
BruNews, MVP VC++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
gegematic Messages postés 5 Date d'inscription mardi 5 juin 2007 Statut Membre Dernière intervention 3 décembre 2009
3 déc. 2009 à 19:52
merci des réponse, mais tant pis, je ne comprend pas, je n'y arrive pas.
la classe clAutocad.ouvrir ne fait rien d'autre qu'un RegOpenKeyEx, mais elle n'accepte pas les parametres
(! clAutocad.ouvrir(HKEY_LOCAL_MACHINE,"SOFTWARE",KEY_WOW64_64KEY | KEY_QUERY_VALUE )
et moi je n'arrive pas a le refaire par un :
	long resu;
long laCle;

resu=RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE",0,KEY_QUERY_VALUE);
if (resu==ERROR_SUCCESS)
initialisee=TRUE;
return initialisee;

ça, ça ne marche pas à cause de "lacle".

en fait, je ne cherche pas vraiement à programmer en c, mais simplement à maintenir en fonctionnement un programme qui m'était bien utile, mais que je n'arrive plus à comprendre ...

salut,
Gégé
0
Rejoignez-nous