Page 1 sur 1

[R] CryptUnprotectData, et paramètre DllCall

Posté : dim. 04 août 2013 05:24
par matwachich
Salut les amis! Ca fait un bail hein! :)

J'essaye d'implémenter la fonction CryptUnprotectData, mais je coince dans la récupération d'une chaine UNICODE qui contient la description des données sécurisées (paramètre optionnel).
La fonction fonctionne très bien autre part (Chiffrage, déchiffrage).

En gros, le paramètre est un pointeur vers LPCWSTR, donc un pointeur vers un pointeur qui sera alloué dynamiquement par la fonction, et contiendra la (w)chaine descriptive, que je veut récupérer.
L'exemple de MSDN l'utilise comme suit:

Code : Tout sélectionner

LPWSTR pDescrOut =  NULL;
CryptUnprotectData(&DataOut, &pDescrOut, ...;
printf("The description of the data was: %s\n",pDescrOut);
En AutoIt, j'essaye de faire un truc du genre:

Code : Tout sélectionner

Local $description_DATA = DllStructCreate("ptr")
Local $ret = DllCall("Crypt32.dll", "bool", "CryptUnprotectData", _
        "ptr", DllStructGetPtr($in_DATA_BLOB), _
        "ptr", DllStructGetPtr($description_DATA), _ ...
; Puis pour récupérer les données:
Local $out_descr = DllStructCreate("wstr[" & 128 * 1024 & "]", DllStructGetData($description_DATA, 1))
$out_descr = DllStructGetData($out_descr, 1)
; Libération des données allouées par la fonction
DllCall("Kernel32.dll", "handle", "LocalFree", "handle", DllStructGetData($description_DATA, 1))
Et ça ne marche pas super!

Voici le code au complet: (Comme il est, ça marche très. Pour voir ce qui coince, il faut dé-commenter un peu tout)
► Afficher le texte

Re: [..] CryptUnprotectData, et paramètre DllCall

Posté : dim. 04 août 2013 17:39
par mikell
Hello
Tu te fais rare, vacances ou boulot ? :)

Dixit msdn, le 2ème paramètre à l'encodage c'est une (w)string "A string with a readable description of the data to be encrypted. " et au décodage un pointeur vers la string "A pointer to a string-readable description of the encrypted data included with the encrypted data."
► Afficher le texte
"wstr[" & 128 * 1024 & "]" :shock: et limite d'allocation explosée :mrgreen:

Re: [..] CryptUnprotectData, et paramètre DllCall

Posté : dim. 04 août 2013 21:59
par jchd
Un peu de vérification d'erreur aurait relevé la mine :

Code : Tout sélectionner

Local $out_descr = DllStructCreate("[b]wstr[/b][" & 128 * 1024 & "]", DllStructGetData($description_DATA, 1))
wchar dans une DllStruct, swstr dans un DllCall.

Comme le chat le dit.

Re: [..] CryptUnprotectData, et paramètre DllCall

Posté : lun. 05 août 2013 18:20
par matwachich
Cool! Merci les amis.
Donc au fait, c'était le passage de la description qui posait problème, alors que j'étais sur que c'était la récupération.

PS: Plutôt boulot, avec l'internat qui commence sous peu :wink: