PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Win32 C++]Auslesen von Registry Einträgen



sixfriends
04-11-2004, 16:23
Ich bastel grade an einem Prog, dass auch unter Windoof laufen soll und will damit bestimmte Werte aus der Registry auslesen.

HKEY hk;
DWORD len;
char path[100];
"hk" ist ein gültiges Handle zu einem existierenden Schlüssel in der Registry und RegQueryValueEx verlangt folgende Parameter: (Handle_zu_existierendem_Schlüssel, Value, 0, Datentyp, Rückgabewert, Größe_des_Rückgabewertes), wobei die letzten 3 Parameter von der Funktion gesetzt werden, sofern sie nicht NULL sind. Das tolle dabei ist:

RegQueryValueEx(hk, "anwendung", 0, NULL, NULL, &len);
RegQueryValueEx(hk, "anwendung", 0, NULL, (LPBYTE)path, &len);funktioniert,


RegQueryValueEx(hk, "anwendung", 0, NULL, (LPBYTE)path, &len); funktioniert nicht.
Kann mir das mal jemand erklären :confused:

Ich sollte vielleicht noch erwähnen, dass ich mit der windows.h arbeite und keine Entwicklungsumgebung benutze

wraith
04-11-2004, 17:47
Belegst du len mit der Anzahl Zeichen von path, oder nicht? (len ist IN-OUT Parameter)
Wenn du das nicht tust, ist klar, daß deine eine Variante nicht funktioniert (len hat dann irgendeinen Wert, vielleicht 0, dann 'denkt' RegQueryValueEx der Buffer ist nicht groß genug und bricht ab).

Deine andere Variante funktioniert aus dem Grund, weil der erste Aufruf die Länge des Strings holt, und in len reinschreibt.
Der zweite Aufruf funktioniert dann.

Christian81
05-11-2004, 06:27
wraith hat recht. RegQueryValueEx ist eindeutig so definiert, dass mna bei REG_SZ (und anderen Typen variabler Länge) zuerst die Länge anfragt, dann den Puffer entsprechend gross macht und dann mit den Puffer aufruft. Nur so kann man sicher sein, auch alle Daten gelesen zu haben.

sixfriends
05-11-2004, 14:38
Alles klar. Das mit IN/OUT muss ich in der msdn überlesen haben. Also: Aus &len mach &(len = sizeof(path)), oder so ähnlich.

btw: Weiss jemand, was genau der Wert MAX_PATH darstellt und worauf er sich bezieht?

sixfriends

Christian81
05-11-2004, 15:35
MAX_PATH ist die maximale Länge, die ein Pfad unter Windows haben kann. Win9x kann maximal 260 Zeichen, ab Win2k sind es irgendwas um die 65000 oder so. War früher auch wegen Fat auf 260 begrenzt glaube ich.

sixfriends
05-11-2004, 15:48
thx@all

Da ich fast nur Dateipfade auslese, werd ich MAX_PATH als Größe übergeben, passt dann schon.