Je souhaite essayer de lier la fonction API CryptUnprotectData et la chaîne .net SecureString de la meilleure façon possible. CryptUnprotectData renvoie une structure DATA_BLOB constituée d'un tableau d'octets et d'une longueur d'octets. Dans mon programme, ce sera une chaîne UTF-16 Unicode. SecureString a un constructeur qui prend un char * et params longueur, donc je voudrais pouvoir faire quelque chose comme:Création de SecureString à partir d'une chaîne unicode non gérée
SecureString ss = SecureString((char*)textBlob.pbData, textBlob.cbData/2);
Cela fonctionne, sauf UTF-16 est de longueur variable, donc je ne sais pas vraiment ce qu'il faut utiliser comme argument de longueur. L'exemple ci-dessus suppose des caractères de 2 octets (BMP), mais pour les autres plans, il peut aller jusqu'à 4 octets. J'ai besoin de connaître le nombre de caractères UTF-16 dans le tableau d'octets. Quel est le meilleur moyen de le faire sans copier les valeurs en mémoire (compromettant ainsi la sécurité)? Je prévois de mettre à zéro et libérer le tableau d'octets le plus rapidement possible.
Merci beaucoup Jon, ça a du sens! Ce truc est encore nouveau pour moi. – Jarrod