Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - API RegEnumKeyEx ed errore MORE_DATA
Forum - C/C++ - API RegEnumKeyEx ed errore MORE_DATA

Avatar
Phil93 (Normal User)
Pro


Messaggi: 85
Iscritto: 26/01/2011

Segnala al moderatore
Postato alle 17:35
Venerdì, 22/04/2011
Questo topic è stato chiuso dal moderatore

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:
Codice sorgente - presumibilmente C#

  1. void EnumKeys(HKEY hKey)
  2. {
  3.     DWORD Index = 0;
  4.     TCHAR Key[1024];
  5.     DWORD KeySize = 1024;
  6.     FILETIME Time;
  7.     while(RegEnumKeyEx(hKey, Index, Key, &KeySize, NULL, NULL, NULL, &Time) == ERROR_SUCCESS)
  8.     {
  9.           cout << szKeyName << endl;
  10.           Index++;
  11.     }
  12.     RegCloseKey(hKey);
  13. }



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.

PM
Avatar
arack95 (Member)
Pro


Messaggi: 144
Iscritto: 15/11/2010

Segnala al moderatore
Postato alle 18:14
Venerdì, 22/04/2011
Secondo me il problema è KeySize, credo che debba essere in caratteri e non a numero.

http://msdn.microsoft.com/en-us/library/ms724862(v=vs.85). ...

"A pointer to a variable that specifies the size of the buffer specified by the lpName parameter, in characters."

PM
Avatar
Phil93 (Normal User)
Pro


Messaggi: 85
Iscritto: 26/01/2011

Segnala al moderatore
Postato alle 19:22
Venerdì, 22/04/2011
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 -> http://msdn.microsoft.com/en-us/library/ms724256 lo stesso parametro è dichiarato double word come ho fatto io, quindi non penso sia questo il problema.

PM
Avatar
arack95 (Member)
Pro


Messaggi: 144
Iscritto: 15/11/2010

Segnala al moderatore
Postato alle 20:19
Venerdì, 22/04/2011
Ho notato in questi due siti:
http://msdn.microsoft.com/en-us/library/ms724256
http://blog.kalmbachnet.de/?postid=41
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 il 22/04/2011 alle 20:23
PM
Avatar
Phil93 (Normal User)
Pro


Messaggi: 85
Iscritto: 26/01/2011

Segnala al moderatore
Postato alle 20:35
Venerdì, 22/04/2011
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.

PM