Parsen der Regestry, sinnvolle Logik gesucht
-
Hallo Community, ich möchte unter Windows einen Pfad der Registry parsen und alle SubKeys/Subpfade und Values verarbeiten. Ihr werdet jetzt sicher sagen, hey das ist doch Winapi, aber es ist nicht der Winapiteil der mir Probleme bereitet sondern die Logik des Parsens an sich. Ich habe hier mal ein paar Zeilen Code geschrieben, die zumindest einmal alle Values und alle Keys eines Registrypfades auflistet:
void ParseRegistry(void){ char value[MAX_PATH+1], key[MAX_PATH+1]; char databuffer[32*1024]; int i, j, type, databuffersize, valuesize, numsubkeys, numvalues; HKEY hKey = 0; if(RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\TestProjekt", 0, KEY_ALL_ACCESS, &hKey) != ERROR_SUCCESS){ printf("Der Key existiert nicht"); return; } RegQueryInfoKey(hKey, 0, 0, 0, &numsubkeys, 0, 0, &numvalues, 0, 0, 0, 0); if(numvalues != 0){ databuffersize = sizeof(databuffer); valuesize = sizeof(value); i = 0; while(RegEnumValue(hKey, i, value, &valuesize, NULL, &type, databuffer, &databuffersize) == ERROR_SUCCESS){ printf("value: %s", value); //hier werden später die Daten verarbeitet databuffersize = sizeof(databuffer); valuesize = sizeof(value); i++; } } if(numsubkeys != 0){ j = 0; while(RegEnumKey(hKey, j, key, sizeof(key)) == ERROR_SUCCESS){ printf("key: %s", key); j++; } } RegCloseKey(hKey); }
Mein Problem ist nun das Ganze in eine oder mehrere sinnvolle Schleifen zu verpacken, damit es funktioniert. Ich sitze hier schon seit gestern nachmittag dran, bekomme es aber nicht gebacken, ich hoffe jemand hat Lust und findet die Zeit mir hier weiterzu helfen.
Gruß Herbert
-
Am einfachsten geht es mit Rekursion. Das Problem sollte vollkommen äquvialent zum Progblem sein, einen Verzeichnis-Baum anzuzeigen.
Stichwort: Google: recursive directory listing
Wenn du es nicht rekursiv machst, brauchst du einen Stack, der dir die entsprechende Stelle im Verzeichnisbaum markiert. Wird also schwieriger.
-
Ja dachte ich mir schon. Ich habe mir mal eine rekursive Suchfunktion für einen Treeview geschrieben. Unter Benutzung der Funktionen TreeView_GetChild, TreeView_GetNextSibling und TreeView_GetParent ging das dann auch recht übersichtlich. Leider biete die Winapi diese Funktionen nicht für die Registry. Also hab ich mich jetzt dran gemacht diese Funktionen analog für die Registry zu schreiben. Damit sollte das Parsen in der Regestry mit nicht zu aufwendigem Code realisierbar sein. Bin mal gespannt auf die Performance, das ganze Zugegreif auf die Registry soll ja ziemlich rechenintensiv sein, siehe auch: http://blogs.msdn.com/oldnewthing/archive/2006/02/22/536920.aspx