Oppure

Loading
Questo topic e' stato chiuso dal moderatore.
22/04/11 15:35
Phil93
Ciao a tutti.
Sto tentando di manipolare il registro di sistema con le Win32, in particolare enumerare le sottochiavi di una determinata chiave con RegEnumKeyEx.

Ecco la subroutine che se ne occupa:
void EnumKeys(HKEY hKey)
{
    DWORD Index = 0;
    TCHAR Key[1024];
    DWORD KeySize = 1024;
    FILETIME Time;
    while(RegEnumKeyEx(hKey, Index, Key, &KeySize, NULL, NULL, NULL, &Time) == ERROR_SUCCESS)
    {
	  cout << szKeyName << endl;
          Index++;
    }
    RegCloseKey(hKey);
}


Il problema è che, provando anche con diverse chiavi, riesco a ottenere una o due subkeys e poi la funzione mi restituisce l'errore ERROR_MORE_DATA.
Ho provato ad ingrandire le dimensioni del buffer ma il risultato è sempre lo stesso.
Come posso risolvere?
Grazie.
aaa
22/04/11 16:14
arack95
Secondo me il problema è KeySize, credo che debba essere in caratteri e non a numero.

msdn.microsoft.com/en-us/library/…(v=vs.85).aspx

"A pointer to a variable that specifies the size of the buffer specified by the lpName parameter, in characters."
aaa
22/04/11 17:22
Phil93
Io quella riga l'ho interpretata come "un puntatore ad una variabile che specifica la quantità di caratteri (incluso il terminatore) del buffer indicato dal parametro lpName.". Inoltre, qua -> msdn.microsoft.com/en-us/library/… lo stesso parametro è dichiarato double word come ho fatto io, quindi non penso sia questo il problema.
aaa
22/04/11 18:19
arack95
Ho notato in questi due siti:
msdn.microsoft.com/en-us/library/…
blog.kalmbachnet.de/
che ad ogni iterazione riassegnano il valore alla dimensione della dword, provaci pure tu :-|
Probabilmente lo riazzera, infatti "__inout LPDWORD lpcName"
Ultima modifica effettuata da arack95 22/04/11 18:23
aaa
22/04/11 18:35
Phil93
Esatto... Poco fa ho letto meglio la relativa documentazione su MSDN e mi sono ricordato che la funzione, a ogni enumerazione, assegna alla variabile la lunghezza della sottochiave trovata. Dunque mi è bastato reimpostare il suo valore a ogni ciclo.

Risolto. Si può chiudere.
aaa