IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Problème écriture dans HKEY_LOCAL_MACHINE


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2018
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Problème écriture dans HKEY_LOCAL_MACHINE
    Bonjour,

    Je fais un petit programme c++ qui me permettrait de modifier clé dans le registre Windows mais impossible d’écrire dans HKEY_LOCAL_MACHINE le programme s’exécute mais aucun fichier et clé n'apparaisse même en exécutant le programme en tant qu'administrateur, pourtant j'arrive bien à écrire dans : HKEY_CURRENT_USER j'ai vérifié les autorisations et j'ai pourtant les mêmes ! je vous remercie pour vos future réponse !
    je vous mets l'extrait du code que j'ai repris sur ce site et à peine modifier : (j'utilise Code::Blocks)



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    #undef UNICODE
    #include <iostream>
    #include <windows.h>
    using namespace std;
     
     
    int main()
    {
     
        HKEY key;                            /* La clé que nous allons ouvrir    */
        TCHAR s[] = TEXT("PC-11"); /* La valeur que nous allons écrire */
     
        /* On crée un handle vers la clé Developpez.                                    */
        /* Si la clé n'exsite pas encore, elle sera créée.                              */
     
        RegCreateKeyEx( HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\fusion"), 0, NULL, 0, KEY_ALL_ACCESS, NULL,
                        &Developpez, NULL );
     
        /* On écrit le contenu de s dans une valeur chaîne (REG_SZ) nommée index.       */
        /* On n'écrit pas le caractère '\0'.                                            */
     
        RegSetValueEx(key, TEXT("tag"), 0, REG_SZ, (LPBYTE)s, (DWORD)sizeof(s)/sizeof(s[0]));
     
        /* On ferme le handle.                                                          */
     
        RegCloseKey(key);
     
        return 0;
    }

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 826
    Points : 218 288
    Points
    218 288
    Billets dans le blog
    117
    Par défaut
    Bonjour,

    Lorsque l'on a un souci (et en réalité, même lorsqu'on en a pas, car c'est de la gestion d'erreur), on vérifie les valeurs retournées par les fonctions, car elles indiquent les problèmes.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2018
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    J'ai donc essayé de faire une version qui fait la gestion d'erreur et j'ai quand même mi un affichage de l'erreur à la fin du programme. Le programme s'exécute normalement et ne rentre pas dans mes if et le retour erreur à la fin me renvoie 0.
    Voici le code :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    #include <iostream>
    #include <windows.h>
    using namespace std;
     
     
    int main()
    {
     
        HKEY key;
        TCHAR s[] = TEXT("PC-11");
     
     
     
            if (RegCreateKeyEx( HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\fusion"), 0, NULL, 0, KEY_ALL_ACCESS, NULL, &key, NULL )!= ERROR_SUCCESS)
            {
                RegCloseKey(key);
                cout << "création impossible";
                cout << ERROR_SUCCESS; 
            }
     
     
           if (RegSetValueEx(key, TEXT("tag"), 0, REG_SZ, (LPBYTE)s, (DWORD)sizeof(s)/sizeof(s[0]))!= ERROR_SUCCESS) 
            {
                RegCloseKey(key);
                cout << "ecriture impossible";
                cout << ERROR_SUCCESS;
            }
        cout << ERROR;
     
        RegCloseKey(key);
     
        return 0;
    }

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Quand on écrit dans le registre, il y a deux choses à prendre en considération:
    • Les droits administrateur (y compris l'UAC) pour écrire dans HKCR ou HKLM
    • La bitness du programme (sinon certains settings sont redirigés vers la sous-clé Wow6432Node).

    Si ton programme est un programme 32 bits, regarde du côté de Wow6432Node.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2018
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Je vient de regarder et effectivement j'écris bien dans WOW6432Node, quel serait la solution pour éviter d'être redirigé cette sous-clé ? Faudrait-il que mon programme soit en 64 bit ?

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Ça, ou que tu utilises des flags spéciaux dans tes appels à RegOpenKeyEx().
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2018
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci, mon problème est résolu grâce aux flags !
    Je mets le programme si jamais ça peut aider quelqu'un d'autre !


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    #include <iostream>
    #include <windows.h>
     
    #define KEY_WOW64_64KEY 0x0100
     
     
     
    using namespace std;
     
     
    int main()
    {
     
        HKEY key;
        TCHAR s[] = TEXT("PC-1006001");
     
    #include <stdio.h>
     
            if (RegCreateKeyEx(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\FusionInventory-Agent"), 0, NULL, 0, KEY_ALL_ACCESS | KEY_WOW64_64KEY, NULL, &key, NULL )!= ERROR_SUCCESS)
            {
                RegCloseKey(key);
                cout << "création impossible";
                cout << ERROR_SUCCESS;
            }
     
     
           if (RegSetValueEx(key, TEXT("tag"), 0, REG_SZ, (LPBYTE)s, (DWORD)sizeof(s)/sizeof(s[0]))!= ERROR_SUCCESS)
            {
                RegCloseKey(key);
                cout << "ecriture impossible";
                cout << ERROR_SUCCESS;
            }
     
     
        RegCloseKey(key);
     
        return 0;
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problèmes écriture dans un fichier
    Par DJEcalcul dans le forum Fortran
    Réponses: 3
    Dernier message: 26/10/2009, 13h06
  2. Problème écriture dans un fichier temporaire
    Par scary dans le forum Entrée/Sortie
    Réponses: 12
    Dernier message: 02/07/2009, 03h05
  3. problème écriture dans texte script tcsh
    Par Yarael dans le forum Linux
    Réponses: 2
    Dernier message: 24/02/2009, 14h58
  4. Problème écriture dans un fichier
    Par bob_warrior89 dans le forum C
    Réponses: 11
    Dernier message: 14/06/2007, 16h37
  5. Problème écriture dans une dans une textarea (caractères)
    Par LE NEINDRE dans le forum Général JavaScript
    Réponses: 20
    Dernier message: 02/02/2006, 15h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo