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

Langage Delphi Discussion :

Accès en lecture Valeur de Registre 64Bits


Sujet :

Langage Delphi

  1. #1
    Membre régulier Avatar de Nicolas Coolman
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2006
    Messages : 133
    Points : 76
    Points
    76
    Par défaut Accès en lecture Valeur de Registre 64Bits
    Bonjour,

    Je viens de coder une fonction pour savoir si la restauration du système est activée ou non. Sous Vista/W7 j'analyse la donnée de la valeur "RPSessionInterval".

    Tout fonctionne parfaitement sur les OS 32bits (XP,Vista et W7).

    Mais je n'arrive pas à accéder à la valeur "RPSessionInterval" dans un environnement 64bits (Vista et W7)

    Voici le code que j'utilise :


    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    function fInfoRestore(hRootKey:HKEY;sRegKey:string):boolean;
    //===========================================================
    // Information sur l'activation de la restauration du système
    //===========================================================
    var
       reg    : TRegistry;
       iValueRPSessionInterval : integer;
     
    begin
      Result := True;
     
      //hRootkey := HKEY_LOCAL_MACHINE
      //sRegKey := "\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRestore"
     
      With FormZHPDiag do begin
     
         //Registre
         reg    := TRegistry.Create;
     
         With reg do begin
            RootKey := hRootKey;
            OpenKey(sRegKey, false);
            Access := KEY_WOW64_64KEY or KEY_QUERY_VALUE;
         end;
     
         //ShowMessage('KEY_WOW64_64KEY :' + IntToStr(KEY_WOW64_64KEY));  = 256 (d) = 100 (H)
         //ShowMessage('KEY_QUERY_VALUE :' + IntToStr(KEY_QUERY_VALUE));  = 1
     
         if reg.ValueExists('RPSessionInterval') then begin
             Try
                iValueRPSessionInterval := reg.ReadInteger('RPSessionInterval');
             Except
                on eRegistryException do begin
                    iValueRPSessionInterval := 9;
                end;
             end;
         end
         else begin
            iValueRPSessionInterval := 9;
            ShowMessage('RPSessionInterval non accessible');
         end;
     
      end;
     
       //Libère le registre
       reg.CloseKey;
       reg.Destroy; 
    end;
    Voilà si vous avez une idée sur la question, je vous en remercie par avance.

    A bientôt...

  2. #2
    Membre régulier Avatar de Nicolas Coolman
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2006
    Messages : 133
    Points : 76
    Points
    76
    Par défaut
    Hello,

    J'ai tenté plusieurs combinaisons comme par exemple celle-ci :

    Access := KEY_ALL_ACCESS or KEY_WOW64_64KEY;

    http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

    ... mais sans succès.

    A+

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 677
    Points : 25 492
    Points
    25 492
    Par défaut
    Déjà par convention Destroy ne doit pas être utilisé mais Free !
    C'est écrit dans l'aide !

    Est-ce le code complet ?
    iValueRPSessionInterval ne sert à rien ! non ?
    Result vaut toujours true ???

    As-tu essayé ?
    Access := KEY_READ or KEY_WOW64_64KEY;
    Access := KEY_READ or KEY_WOW64_32KEY;

    As-tu essayé de mettre les droits AVANT le OpenKey ?

    Sinon, on reste tout de même limité à la BDR émulé 32Bits de WOW64 pour les Process 32Bits !
    Est-ce que toutes les clés 64Bits sont accessibles par un processus 32Bits ?

  4. #4
    Membre régulier Avatar de Nicolas Coolman
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2006
    Messages : 133
    Points : 76
    Points
    76
    Par défaut
    Hello,

    En fait, entre temps, j'avais revu complètement le code et déjà modifié le destroy en free.

    Tu avais vu juste, il fallait d'abord donner les droits d'accès et ensuite ouvrir la clé, là était le blocage

    Tout fonctionne maintenant avec le code ci-dessous.

    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
    function fValueExists(hRootKey:HKEY;sRegKey:string;sValueKey:string):integer;
    //===========================================================================
    // Retourne la donnée d'une valeur de registre 32/64Bits
    //===========================================================================
    // Renvoi 9 si la valeur est absente ou en cas d'erreur de lecture.
    var
       iValueKey : integer;
    begin
     
       With TRegistry.Create do begin
         Try
            RootKey := hRootKey;
            Access := KEY_READ or KEY_WOW64_64KEY; //http://msdn.microsoft.com/en-us/library/ms724878(v=vs.85).aspx
            OpenKey(sRegKey, false);
     
            if ValueExists(sValueKey) and (GetDataType(sValueKey) = rdInteger) then begin
     
               Try
                   iValueKey := ReadInteger(sValueKey);
                Except
                   on eRegistryException do iValueKey := 9;
                end;
            end
     
            else iValueKey := 9; //ShowMessage('Valeur non accessible');
     
         finally
            CloseKey;
            Free;
         End;
     
         Result := iValueKey;
       End;
     
    end;
    Un grand merci pour ton intervention !

    A bientôt

  5. #5
    Membre régulier Avatar de Nicolas Coolman
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2006
    Messages : 133
    Points : 76
    Points
    76
    Par défaut
    A supprimer SVP

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

Discussions similaires

  1. [Virtual Pascal] Lecture d'une valeur du registre Windows
    Par Roland Chastain dans le forum Autres IDE
    Réponses: 9
    Dernier message: 29/06/2014, 21h45
  2. Pb lecture valeur clé registre
    Par Korben-Dallas dans le forum Débuter
    Réponses: 1
    Dernier message: 05/05/2011, 16h20
  3. accès à la base de registre 64bits depuis le perl 32
    Par Billette dans le forum Langage
    Réponses: 0
    Dernier message: 26/09/2008, 14h20
  4. Réponses: 3
    Dernier message: 24/04/2007, 15h54
  5. problème de lecture base de registre
    Par pafounet3 dans le forum MFC
    Réponses: 10
    Dernier message: 31/12/2003, 14h06

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