2013-01-20 2 views
1
char value[255]; 
DWORD BufferSize = 8192; 

RegGetValue(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", L"ProductName", RRF_RT_ANY, NULL, &value, &BufferSize); 

cout << value; 

Après RegKeyValue() fonctionne, il semble que la valeur estRegKeyValue données non-sens retour

value 0x0034f50c "ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ... char[255] 

Qu'est-ce qui se passe ici?

Note: RegKeyValue() retourne 0

Répondre

2

Vous ne pas vérifier la valeur de retour de RegGetValue. L'appel a probablement échoué et le tampon value n'a jamais été affecté. Vérifiez toujours les valeurs de retour. À partir du code que nous pouvons voir, je remarque que vous mentez sur la taille de la mémoire tampon. Vous dites que c'est 8192 octets. Mais vous avez seulement alloué 255 octets. Vous appelez également la version Unicode de l'API, mais en passant dans un tampon char. Si vous attendez des données de chaîne, vous devez fournir un tampon de caractères larges. La version Unicode de cette API renvoie les données de chaîne en tant que texte codé en UTF-16. Une fois tout ce trié, vous devez ensuite vérifier quel type est stocké dans cette valeur. Vous passez NULL pour le paramètre de type. Passez un pointeur sur une variable et découvrez si une chaîne est vraiment stockée . Vous devrez également lire le nombre d'octets lus et définir le séparateur nul dans votre tampon en conséquence.

+0

J'aurais dû utiliser WCHAR au lieu de char. Merci! –

3

Il y a deux problèmes ici.

  1. Assurez-vous que la valeur de retour de RegGetValue est ERROR_SUCCESS. Si ce n'est pas le cas, la routine a échoué. En outre, vous pouvez vérifier pour voir ce qui a été écrit dans BufferSize, car RegGetValue spécifie le nombre d'octets écrits.

  2. Vous passez dans un tampon défini comme char value[255];, puis en spécifiant sa longueur comme 8192. Cela peut provoquer un dépassement de tampon.

+0

Il retourne ERROR_SUCCESS, juste vérifié. J'ai copié la partie value [255] d'un extrait de code que j'ai trouvé qui fonctionnait. Comment savoir à quelle taille doit-il être réglé? –

+0

@ dsp_099 Votre taille doit correspondre à la taille du tampon que vous spécifiez. Si vous voulez passer 8192, faites aussi le tableau 8192. (De plus, si vous utilisez unicode, vous devriez aussi utiliser un type de caractère approprié) –