begin process at 2012 05 28 13:49:41
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

System

 > 

Base de registre avec utilisateur non-administrateur


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

Base de registre avec utilisateur non-administrateur

vendredi 22 septembre 2006 à 09:46:06 | Base de registre avec utilisateur non-administrateur

Leonel67

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

//**************************
#define Clef_Local "Software\\NOM\\Capture"


//**************************
HKEY hkey;
DWORD Type=REG_DWORD, D=4;
DWORD Valeur=0;
char Port[10];

if (!RegCreateKeyEx(HKEY_CURRENT_USER, Clef_Local, 0, "", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &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);
    }
...
}

//**************************

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.

Merci pour vos réponses.
Leonel
vendredi 22 septembre 2006 à 16:17:37 | Re : Base de registre avec utilisateur non-administrateur

racpp

Administrateur CodeS-SourceS
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))
{
    strcpy (Port,"");
    RegSetValueEx(hkey,"Port",0,REG_SZ,(unsigned char*)Port,10);
}

samedi 23 septembre 2006 à 14:57:50 | Re : Base de registre avec utilisateur non-administrateur

Leonel67

Réponse acceptée !
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:

//**************************
HKEY hkey;
DWORD Type=REG_DWORD, D=4;
DWORD Valeur=0;
char Port[10];
SECURITY_ATTRIBUTES SecAtt;

SecAtt.nLength = sizeof (SECURITY_ATTRIBUTES);
SecAtt.lpSecurityDescriptor = NULL;
SecAtt.bInheritHandle = TRUE;

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

samedi 23 septembre 2006 à 15:29:14 | Re : Base de registre avec utilisateur non-administrateur

racpp

Administrateur CodeS-SourceS
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(.....

samedi 23 septembre 2006 à 15:44:57 | Re : Base de registre avec utilisateur non-administrateur

Leonel67

Si, ça fonctionne comme je veux:

if (RegQueryValueEx(hkey,"Port",0,&Type,(unsigned char*)Port,&D)) {      // (1)
      strcpy (Port,"");
      RegSetValueEx(hkey,"Port",0,REG_SZ,(unsigned char*)Port,10);             // (2)
}

En (1) je veux lire la valeur de la clé.
Si elle n'existe pas alors je créé la clé en (2) avec une valeur par défaut.

J'enregistre mes clés dans HKEY_CURRENT_USER, ainsi chaque utilisateur pourra faire le réglage qui lui convient.



Cette discussion est classée dans : base, port, utilisateur, registre, hkey


Répondre à ce message

Sujets en rapport avec ce message

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 Port COM [ par julienbj ] Je cherche à récupérer la liste des ports COM existant sur un ordinateur équipé d'un windows. Auriez-vous une idée de la façon dont je pourrais procéd Modification des droits utilisateur dans la base de registre [ par gg681 ] Bonjour, Est-ce que quelqu'un saurait comment faire pour modifier les droits attribuer sur une clé de la base de registre par script <img alt="" src=" Besoin d'aide [ par mayapour ] Bonjour,Novice en C sous Linux, j'ai besoin de conseil, bout de codes ou tout suggestions.Description: Pseudo remplassant de passwd utilisant un fichi base de registre [ par rdtt ] bonjour,voilà, j'aimerai savoir comment faire pour entrer une valeur dans la base de registre avec un programme pour faire un code de série où une lim vérifications dans une base de donnée [ par kj_83 ] Bonjour je réalise actuellement un programme de gestion de stock .Dans une des parties du programme l'utilisateur peut entrer de nouveaux produit au t exporeter la base de registre et la lire [ par sebastienmz ] alors voila je doit exporte une partie de la base de regsitre puis la lire mais si vous avez remarquer entre chaque lettre il y a un NULL qui donne la registre windows - lecture d'une valeur [ par shadow1779 ] bonjour, voila je veux lire dans la valeur InstallPath de ma clé, j'voudrai en fait faire un: char path[150]; et enregistrer ce que retournera RegQuer 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 Manipulation base de registre [ par tastira ] Bonsoir a tous.Dans le cadre d'un mini projet pour le developpement d'un agent SNMP en c++ j ai eu besoin a utilisé les clé de base de registre pour l


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,827 sec (4)

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