Bonjour, dans un programme je dois énumérer toutes les clefs de HKEY_CURRENT_USER, j'ouvre donc cette clef, je récupère le nombre de subkeys (RegQueryInfoEx), ensuite j'énumère toutes les subkeys avec RegEnumKeyEx, dans mon HKEY_CURRENT_USER, il y'a 15 subkeys, la fonction RegEnumKeyEx devrait donc me les énumérer toutes, le problème étant qu'elle me renvoie un erreur de code 234 (ERROR_MORE_DATA) ce qui veut dire que le buffer recevant le nom de la clef est trop petit, pourtant j'ai beau l'agrandir, j'ai toujours la même erreur... si vous avez deja rencontré le meme pb...
Voici le code :
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
DWORD X = 0, dwSubKeys = 0;
void enumKeys()
{
HKEY hKey;
DWORD dwNameLen;
PCHAR pnameSubKey;
if(RegOpenKeyExA(HKEY_CURRENT_USER, NULL, 0, 0xF003F, &hKey) != ERROR_SUCCESS) {
MessageBoxA(NULL, "Error RegOpenKeyEx", "Error", MB_OK);
return ;
}
if(RegQueryInfoKeyA(hKey, NULL, 0, NULL, &dwSubKeys, NULL,
NULL, NULL, NULL, NULL, NULL, NULL) != ERROR_SUCCESS) {
MessageBoxA(NULL, "Error RegQueryInfoKey", "Error", MB_OK);
return ;
}
printf("Num: %d\n\n", dwSubKeys);
for(int i = 0; i < dwSubKeys; i++) {
CHAR nameSubKey[10000];
if(X >= dwSubKeys) exit(0);
if(RegEnumKeyExA(hKey, X, nameSubKey, &dwNameLen,
NULL, NULL, NULL, NULL) != ERROR_SUCCESS) {
printf("Ret: %d\n\n", RegEnumKeyExA(hKey, X, nameSubKey,
&dwNameLen, NULL, NULL, NULL, NULL));
return ;
}
X++;
printf("SubKey: %s\n", nameSubKey);
}
RegCloseKey(hKey);
}
int main(int argc, char *argv[])
{
for(int i = 0; i < 10; i++) enumKeys();
return 0;
}
Si vous pouvez m'éclaires, meci
___________________
MSP -
Microsoft Student Partner (Microsoft)