Leonel67
Messages postés3Date d'inscriptiondimanche 6 février 2005StatutMembreDernière intervention23 septembre 2006
-
22 sept. 2006 à 09:46
Leonel67
Messages postés3Date d'inscriptiondimanche 6 février 2005StatutMembreDernière intervention23 septembre 2006
-
23 sept. 2006 à 15:44
Bonjour à tous
Voilà j'ai un problème d'accès à la base registre avec les systèmes multi-utilisateur, genre WIN2000 ou WIN XP pro.
Voici le code que j'utilise
Ce morceau de code me permet de sauvegarder des paramètres de mon application dans la base de registre.
Ce code fonctionne très bien lorsque je suis administrateur, mais lorsque je suis utilisateur l'accès aux clefs est refusé, du moins impossible de les modifier. Que j'utilise HKEY_CURRENT_USER ou HKEY_LOCAL_MACHINE c'est pareil.
Comment puis-je créer ou modifier une clef quelque soit l'utilisateur?
Je veux bien que le programme créé une nouvelle clef pour chaque utilisateur. Mais je veux surtout que mon programme puisse modifié (voir créer) les clefs.
Leonel67
Messages postés3Date d'inscriptiondimanche 6 février 2005StatutMembreDernière intervention23 septembre 2006 23 sept. 2006 à 14:57
Salut
La variable Port est initialisée avant l'exécution de mes quelques lignes.
En cherchant dans les archives des codes j'ai trouvé ce qui me manquait. Il faut rajouter une variable de sécurité à l'instruction RegCreateKeyEx:
if (!RegCreateKeyEx(HKEY_CURRENT_USERLeo0512, Clef_Local, 0, "", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, &SecAtt , &hkey, &D)) {
D =10;
if (RegQueryValueEx(hkey,"Port",0,&Type,(unsigned char*)Port,&D)) {
strcpy (Port,"");
RegSetValueEx(hkey,"Port",0,REG_SZ,(unsigned char*)Port,10);
}
...
Avec cette modification l'utilisation de la base de registre se fait correctement. Mon problème de droit d'accès est corrigé... Le code fonctionne sous Win 98, Win2000 et WinXP en mono et multi-utilisateur.
Merci
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 22 sept. 2006 à 16:17
Salut,
Normalement, une application lancée en mode utilisateur a tous les droits sur la clé HKEY_CURRENT_USER. Elle peut donc ajouter ou supprimer des sous-clés, lire ou changer des valeurs etc.
Dans ton code je vois une petite erreur qui empêche la modification de la valeur. En cas de succès, RegQueryValueEx() retourne 0. Il faudra donc faire:
if (!RegQueryValueEx(hkey,"Port",0,&Type,(unsigned char*)Port,&D))
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 23 sept. 2006 à 15:29
Tu viens simplement d'ajouter une nouvelle clé dans la base de registre et essayé de la partager pour tous les utilisateurs. HKEY_CURRENT_USER est faite pour cela car cette clé existe pour chaque compte utilisateur. Elle contient les sous-clés qui correspondent à l'utilisateur courant. On a donc autant de HKEY_CURRENT_USER qu'il y'a d'utilisateurs mais chacun ne voit que la sienne. C'est la solution la plus propre.
Ton code ne fonctionnera pas car tu n'as pas encore corrigé l'erreur. Tu as oublié le ! devant RegQueryValueEx():
if ( !RegQueryValueEx(.....