Ecrire registre valeur dword32 [Résolu]

goldofff 7 Messages postés lundi 13 février 2006Date d'inscription 5 janvier 2009 Dernière intervention - 3 janv. 2009 à 14:08 - Dernière réponse : BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention
- 5 janv. 2009 à 16:20
Bonjour,

j'ai créé un petit prog en assembleur avec winasm qui me permet de créer une clef dans ma base de registre jusque là tout va bien.

maintenant je voudrais créer une valeur dword32bits dans ma clef de registre et cela ne fonctionne pas.

HKEY_CURRENT_USER\SOFTWARE\Monprog\test
Ma clef DWORD:12345

lorsque j'exécute le code, il crée bien ma clef et tout et tout mais lorsque j'ouvre regedit pour aller voir si c'est correct,
La valeur 12345 qu'il m'a mise, il est indiqué valeur dword32bits non valide.

or si je clique sur Ma clef Dword et que je regarde la valeur, il y est bien inscrit 12345

quand je regarde une autre clef dword d'un programme installé, la valeur apparait comme ceci "0x0000(0)"

est-ce que mon problème se situe au niveau du formatage dans mon code?

voici mon code simplifié pour une meilleure compréhension

merci d'avance à ceux qui y comprendront quelque chose.

.386
.model flat, stdcall
option casemap : none

.data

AppName         db "Mon prog", 0
AppHWnd         dd 0
hKey            dd 80000001h                   ;HKEY_CURRENT_USER
lpValueName     db 'Ma clef DWORD',0
lpData          db  '12345',0
cbData          dd   5h    
lpSubKey        db 'SOFTWARE\Monprog\test', 0

phkResult       dd 0
lpdwDisposition dd 0

.code

generator:

            push offset lpdwDisposition
      push offset phkResult
      push 0
      push 1F0000h + 1 + 2h
      push 0
      push 0
      push 0
      push offset lpSubKey
      push hKey
      call RegDeleteKey
  

      push offset lpdwDisposition
      push offset phkResult
      push 0
      push 1F0000h + 1 + 2h
      push 0
      push 0
      push 0
      push offset lpSubKey
      push hKey
      call RegCreateKeyExA
      ;call RegEnumValue
     
      push cbData
      push offset lpData
      push REG_DWORD            ;REG_SZ                               equ 1
                        ;REG_BINARY                           equ 3
                        ;REG_DWORD                            equ 4
                        ;REG_DWORD_LITTLE_ENDIAN              equ 4
                        ;REG_DWORD_BIG_ENDIAN                 equ 5
      push 0
      push offset lpValueName
      push phkResult
      call RegSetValueExA
      push 0
      call RegCloseKey
    
      push 0
     invoke MessageBox, NULL, ADDR abtmsg1, ADDR AppName, MB_OK
call ExitProcess

end start
Afficher la suite 

Votre réponse

7 réponses

BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 5 janv. 2009 à 12:16
+3
Utile
Mais enfin, un DWORD ne se "formate" pas.
Il faut donner l'adresse d'un DWORD (valeure binaire sur 4 octets).


lpData db  '12345',0
REMPLACER PAR:
dwData  DD  12345 ; VALEUR DWORD BINAIRE


push 4 ; 4 OCTETS EST TAILLE DWORD
push offset dwData
push REG_DWORD
push 0
push offset lpValueName
push phkResult
call RegSetValueExA

ciao...
BruNews, MVP VC++
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de BruNews
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 5 janv. 2009 à 09:20
0
Utile
Tu parles de mettre un DWORD et tu envoies l'adresse d'une chaine de caractère, faudrait un peu de cohérence.

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
goldofff 7 Messages postés lundi 13 février 2006Date d'inscription 5 janvier 2009 Dernière intervention - 5 janv. 2009 à 11:39
0
Utile
Salut,

si je voyais mon erreur, je ne demanderait pas de l'aide.

J'ai regardé dans la msdn pour trouver une explication sur le formatage d'un dword et je n'ai rien trouvé qui a éclairé ma lanterne.

donc si tu as un exemple, je suis preneur.

merci d'avance.
Commenter la réponse de goldofff
goldofff 7 Messages postés lundi 13 février 2006Date d'inscription 5 janvier 2009 Dernière intervention - 5 janv. 2009 à 15:34
0
Utile
Merci ,

Je ne vois pas pq tu es faché !

Ca te parait peut-etre évident, moi pas ! Bien entendu comme cela ça devient plus clair.

Merci encore de m'avoir aidé.
Commenter la réponse de goldofff
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 5 janv. 2009 à 15:53
0
Utile
passionné seulement, pas faché du tout.

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
goldofff 7 Messages postés lundi 13 février 2006Date d'inscription 5 janvier 2009 Dernière intervention - 5 janv. 2009 à 16:11
0
Utile
Content de ne pas avoir faché quelqu'un.

et je suis aussi passioné par ce que je découvre.

Mais il n'est pas facile de se documenter facilement sur certaines choses

comme par exemple pourquoi DD au lieu de DB etc.

je découvre cela au fur et à mesure et c'est très prenant.

encore merci.
Commenter la réponse de goldofff
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 5 janv. 2009 à 16:20
0
Utile
DD
define DoubleWord
réservation de 4 octets.

DB
define Byte(s)
réseve autant d'octets (chaine ou non) que tu en auras mis derriere le déclarateur.

etc...

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.