OVH Cloud OVH Cloud

Valeur binaire de Registre ...

16 réponses
Avatar
scraper
Bonjour à tous !


voila, j'ai un souci ....

je récupère une valeur de Registre (REG_BINARY)

cette valeur est du type (par exemple) :

99e6a91ce96e5b4e9419313d8f9282c3

et je souhaiterais la transformer en string ..... disons en quelque chose de
lisible lol


j'ai jamais fait ça, et n'ai donc aucune espère d'idée de par où commencer
....


un peu d'aide ou de lecture seraient les bienvenus

merci à tous par avance ;-)


--
Adresse invalide
Mon site : http://scraper.chez-alice.fr
Me contacter : http://pcland.easyforum.fr/index.htm

scraper

6 réponses

1 2
Avatar
scraper
Bonjour Fred, dans le message
news:
tu disais :


Je te donne l'exemple que j'ai dans on registre :
Voilà mon identité (qui correspond à Default User ID) :
HKEY_CURRENT_USERIdentities{9CB1C4D5-9A5F-4B9A-B6DC-DD40EDB07ACB}

Soit 9C B1 C4 D5 | 9A 5F | 4B 9A | B6 DC | DD 40 ED B0 7A CB

(j'ai séparé en octets et dissocié les groupes)

Voilà la valeur que j'ai dans AssociatedID :
D5 C4 B1 9C 5F 9A 9A 4B B6 DC DD 40 ED B0 7A CB
que je sépare en groupes comme le GUID
D5 C4 B1 9C | 5F 9A | 9A 4B | B6 DC | DD 40 ED B0 7A CB

Tu remarques que les trois premiers groupes contiennent les mêmes
octets mais dans l'ordre inverse.



respect ! :-)

Les deux derniers ont les mêmes octets, et dans le même ordre.
Il faudrait étudier la composition d'un GUID pour expliquer cela mais
je ne pense pas que cela soit nécessaire pour résoudre ton problème.
Ce sont sans doute des histoires de petits boutiens et grands
boutiens lol
merci de m'aguicher comme ça, mais je baisse les bras :-(



Et bien voila de quoi repartir je pense :-)



vi, je dois dire que j'ai pensé à tout sauf à ça lol

un grand merci ;-)

amicalement


--
Adresse invalide
Mon site : http://scraper.chez-alice.fr
Me contacter : http://pcland.easyforum.fr/index.htm

scraper
Avatar
Fred
dans : news:,
scraper écrivait :

un grand merci ;-)



De rien ;-)
un petit dernier pour la route :
http://www1.ics.uci.edu/~ejw/authoring/uuid-guid/draft-leach-uuids-guids-01.txt

paragraphe 3.1.2
une confirmation du format (ou un des formats) de GUID (ou UUID).

un entier 32 bits (les 4 premiers octets) d'où l'inversion (poids faible
aux adresses faibles donc à gauche contrairement à notre représentation
«humaine» poids forts à gauche, poids faibles à droite)

un entier 16 bits (2 octets) -> inversion pour la même raison

un entier 16 bits : idem

un octet
un autre octet : donc dans l'ordre où ils figurent -> pas d'inversion

et enfin 6 octets décrits comme un entier 48 bits mais quand on regarde
plus loin le mode de génération, il faut mieux le considérer comme un
tableau de 6 octets (donc pas d'inversion)

D'ailleurs, dans un exemple de la MSDN, j'ai vu une structure qui
reprend presque exactement ce principe :

Private Type guid
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(7) As Byte
End Type

Ce n'est pas tout à fait le même découpage logique mais physiquement,
cela revient au même :
1 entier long, 2 entiers suivis de 8 octets.

amicalement



de même.

--
Fred
http://www.cerbermail.com/?3kA6ftaCvT
Avatar
scraper
Bonjour Fred, dans le message
news:
tu disais :

un grand merci ;-)



De rien ;-)
un petit dernier pour la route :
http://www1.ics.uci.edu/~ejw/authoring/uuid-guid/draft-leach-uuids-guids-01.txt



ouch, là, je pédale dans la semoule ! lol

[...]

D'ailleurs, dans un exemple de la MSDN, j'ai vu une structure qui
reprend presque exactement ce principe :

Private Type guid
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(7) As Byte
End Type

Ce n'est pas tout à fait le même découpage logique mais physiquement,
cela revient au même :
1 entier long, 2 entiers suivis de 8 octets.



ah ah .... serait ce à dire qu'en utilisatnt un type, je pourrais éviter
cette bidouille infâme grâce à laquelle j'ai réussi (quand même lol ) à
reconstituer le GUID ? lol

si c'est le cas .... si tu peux m'expliquer un peu .... je suis pas familier
avec les type non plus :-D

merci en tout cas, d'ores et déjà ça fonctionne pas trop mal :-)

amicalement




--
Adresse invalide
Mon site : http://scraper.chez-alice.fr
Me contacter : http://pcland.easyforum.fr/index.htm

scraper
Avatar
Fred
dans : news:,
scraper écrivait :


ah ah .... serait ce à dire qu'en utilisatnt un type, je pourrais
éviter cette bidouille infâme grâce à laquelle j'ai réussi (quand
même lol ) à reconstituer le GUID ? lol



Je ne sais pas.
Tu n'as pas vraiment expliqué ce que tu veux faire ;-)

Soit tu traites les GUID sous forme de chaîne, soit sous forme de
tableau d'octets. Le format natif est un tableau d'octets. Tout le reste
n'est que mise en forme.

Tu lis une valeur REG_BINARY qui nativement est un tableau d'otcets. Je
serais partisan de la laisser telle qu'elle est, mais tu me parles d'une
chaîne. Comment lis-tu ce REG_BINARY ? Je ne vois pas trop.

En admettant qu'on reste sur le tableau d'octets. Le problème est donc
de convertir l'autre valeur (REG_SZ).
Je ferais cela bestialement :

Dim bGuid(15) as Byte
Dim sGuid as String
sGuid="{9CB1C4D5-9A5F-4B9A-B6DC-DD40EDB07ACB}"

bGuid(0) = Val("&H" & mid(sGuid, 8,2))
bGuid(1) = Val("&H" & mid(sGuid, 6, 2))
bGuid(2) = Val("&H" & mid(sGuid, 4, 2))
bGuid(3) = Val("&H" & mid(sGuid, 2, 2))

bGuid(4) = Val("&H" & mid(sGuid, 13, 2))
bGuid(5) = Val("&H" & mid(sGuid, 11, 2))

bGuid(6) = Val("&H" & mid(sGuid, 18, 2))
bGuid(7) = Val("&H" & mid(sGuid, 16, 2))

bGuid(8) = Val("&H" & mid(sGuid, 21, 2))
bGuid(9) = Val("&H" & mid(sGuid, 23, 2))
bGuid(10) = Val("&H" & mid(sGuid, 25, 2))
bGuid(11) = Val("&H" & mid(sGuid, 27, 2))
...etc...


Vérifie tout de même les indices. Je n'ai pas de compilateur dans mon
OE.

Une comparaison de deux guid peut ensuite se faire grâce à une petite
boucle.

À propos des types, pourquoi pas, mais je ne sais plus si on peut
comparer directement deux variables de type structuré. Ce sera
intéressant uniquement à cette condition je pense.

--
Fred
http://www.cerbermail.com/?3kA6ftaCvT
Avatar
scraper
Bonjour Fred, dans le message
news:
tu disais :

ah ah .... serait ce à dire qu'en utilisatnt un type, je pourrais
éviter cette bidouille infâme grâce à laquelle j'ai réussi (quand
même lol ) à reconstituer le GUID ? lol



Je ne sais pas.
Tu n'as pas vraiment expliqué ce que tu veux faire ;-)



dsl

je veux récupérer la valeur contenue dans l'entrée REG_BINARY, et la traiter
pour la comparer aux n° SiD des autres identités Outlook Express installées
sur cette session Windows (dans la branche HKEY_CURRENT_USER/Identities

or il est vrai que le module que j'utilise pour accéder au Registre traite
les valeurs binaires et les retroune sous forme de string ....

Soit tu traites les GUID sous forme de chaîne, soit sous forme de
tableau d'octets. Le format natif est un tableau d'octets. Tout le
reste n'est que mise en forme.



bon, disons que j'ai choisi une option, alors ;-)

Tu lis une valeur REG_BINARY qui nativement est un tableau d'otcets.
Je serais partisan de la laisser telle qu'elle est, mais tu me parles
d'une chaîne. Comment lis-tu ce REG_BINARY ? Je ne vois pas trop.



vois ci dessus
je pense que le problème est que cette fonction qui accède au Registre me
retourne un string

En admettant qu'on reste sur le tableau d'octets. Le problème est donc
de convertir l'autre valeur (REG_SZ).
Je ferais cela bestialement :



[...]

bon, dans la mesure où je dois comparer cette entrée AssociatedID à
plusieurs autres clés de Registre (qui me sont aussi retournées sous forme
de string) il est préférable que je manipule seulement cette entrée, non ?

vois une portion de mon code, qui fait ça (grâce à vous ....) :

==================================
Private Sub Form_Load

ReadGUID sKey 'sKey est le contenu (sous forme de string) de l'entrée
AssociatedID

End Sub

'Retrouve le GUID depuis le Registre
Private Function ReadGUID(ByVal Data As String) As String

'Méthode bourrin "Made in scrap' " lol
ReadGUID = "{" & SortGUID(1, 8, Data) & "-" & SortGUID(9, 4, Data) & "-" &
SortGUID(13, 4, Data) & "-" & Mid$(Data, 17, 4) & "-" & Mid$(Data, 21, 12) &
"}"

End Function

'Met en forme le GUID
Private Function SortGUID(ByVal start As Byte, ByVal lengh As Byte, ByVal
Data As String) As String

Dim i As Integer

Data = Mid$(Data, start, lengh)

For i = lengh + 1 To 1 Step -2
SortGUID = SortGUID & Mid$(Data, i, 2)
Next

End Function

================================= >
Une comparaison de deux guid peut ensuite se faire grâce à une petite
boucle.



vu que j'ai les résultats sous forme de string, je les compare ensuite
directement
ça doit pas être très rapide, mais bon, le prog ne fait ça qu'une fois, et
de manière vraiment accessoire ;-)


À propos des types, pourquoi pas, mais je ne sais plus si on peut
comparer directement deux variables de type structuré. Ce sera
intéressant uniquement à cette condition je pense.



je ne pensais pas à ça, mais à recréer directement le GUID à partir de
l'entrée AssociatedID, en utilisant le type

je pense pas que ce soit possible, il me faudra quand même manipuler, non ?

merci de ton aide


amicalement




--
Adresse invalide
Mon site : http://scraper.chez-alice.fr
Me contacter : http://pcland.easyforum.fr/index.htm

scraper
Avatar
Fred
dans : news:%,
scraper écrivait :


je veux récupérer la valeur contenue dans l'entrée REG_BINARY, et la
traiter pour la comparer aux n° SiD des autres identités Outlook
Express installées sur cette session Windows (dans la branche
HKEY_CURRENT_USER/Identities
or il est vrai que le module que j'utilise pour accéder au Registre
traite les valeurs binaires et les retroune sous forme de string ....



Bon, dans ce cas, pas de doute : mieux vaut faire le contraire de ce que
j'ai proposé !
Le programe sera plus lisible. Donc garde ta methode.


je ne pensais pas à ça, mais à recréer directement le GUID à partir de
l'entrée AssociatedID, en utilisant le type



Oui, cela doit être possible. Il faudrait que l'API de lecture du
registre prenne en paramètre un pointeur dans lequel on passerait celle
de la structure.
Je n'ai pas cherché, désolé ! ;-)

Allez, tu me passes l'API de lecture d'un tableau d'octet et j'écris le
reste ;-)

À plus !

--
Fred
http://www.cerbermail.com/?3kA6ftaCvT
1 2