Bonjour,
Je n'arrive pas à comprendre comment cette structure se remplit :
Mon header est le suivant :
Prenons le cas d'une donnée de type REG_SZ, dont le contenu est 'Hello' :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 typedef UCHAR unsigned char; typedef struct _KEY_VALUE_PARTIAL_INFORMATION { ULONG TitleIndex; ULONG Type; ULONG DataLength; UCHAR Data[1]; // Variable size } KEY_VALUE_PARTIAL_INFORMATION; typedef KEY_VALUE_PARTIAL_INFORMATION *PKEY_VALUE_PARTIAL_INFORMATION;
DataLength me renvoie 12 en taille, taille en bytes. Or le type UCHAR, pour unsigned char est codé sur un byte et non 2. Pourtant, lorsque je lis le contenu de Data, j'obtiens 'H e l l o ', soit 12 caractères au lieu des 6 attendus ( hello + caractère null de fin de chaîne ).
Voici comment je lis le contenu de Data actuellement :
Par contre, si j'utilise plutôt le code suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 else if (pDataInfo->Type == 1 || pDataInfo->Type == 2) { if (pDataInfo->DataLength != 0) for (b = 0; b < pDataInfo->DataLength; b++) putchar(pDataInfo->Data[b]); printf("\n"); }
j'obtiens bien 'Hello' uniquement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 else if (pDataInfo->Type == 1 || pDataInfo->Type == 2) { if (pDataInfo->DataLength != 0) for (b = 0; b < pDataInfo->DataLength; b++) { putchar(pDataInfo->Data[b]); b++; } printf("\n"); }
Mais je ne comprends pas pourquoi la taille de DataLength est égale à deux fois la taille attendue, comme si c'était de type WCHAR.
Merci par avance pour vos explications.
Partager