![]() |
Regestry durchscannen
Hi DPler
Ich wollte mal die Regestry durchscannen und alle Schlüssel mit Value auslesen und in eine Datei schreiben. Mit allen HKEY ist des auch wundervoll gegangen nur nicht mit HKEY_LOCAL_MASCHINE. Ich glaube weil in dem HKEY zu viele Werte stehen und ich auf meine Variante einen Stack überlauf bekomme:
Code:
Es ist mir klar des es nicht die schönste Variante mit den ganzen fors ist aber ich wüsste ich nicht wie ich es anders machen könnte. :wall:
procedure TForm1.Search_Reg(Root : HKEY; Dir : String; var Liste : TStringList);
var reg : TRegistry; List, List2 : TStringList; I, I2 : Integer; begin Application.ProcessMessages; sleep(0); Reg := TRegistry.Create; try reg.RootKey := Root; if reg.OpenKey(Dir, false) = false then exit; List := TStringList.Create; List2 := TStringList.Create; reg.GetKeyNames(List); reg.GetValueNames(List2); for I := 0 to List.Count-1 do begin Liste.Add(Dir+'\'+List[I]); for I2 := 0 to List2.Count-1 do begin Liste.Add(Dir+'\'+List[I]+'\'+List2[I2]{+'='+reg.ReadString(List[I2])}); end; Search_Reg(Root, Dir+'\'+List[I], Liste); end; finally reg.Free; end; end; Vieleicht könntet ihr mir auch ein stückchen Code preisgeben. gsh [edit=Christian Seehase]Pushen erst nach 24 Stunden :!: Mfg, Christian Seehase[/edit] |
DP-Maintenance
Dieses Thema wurde von "Christian Seehase" von "Windows 9x / ME / 2000 / XP / 2003" nach "Windows API" verschoben.
Es ist ein Programmierproblem |
Re: Regestry durchscannen
Hat den keiner eine Idee ?
|
Re: Regestry durchscannen
Von welchem Betriebssystem reden wir denn?
|
Re: Regestry durchscannen
Hi!
Welcher Fehler kam denn bei deinem Versuch? Und an welcher Stelle des Codes? Ciao Frederic |
Re: Regestry durchscannen
@Assarbad : Win XP SP2
@fkerber : Das Problem ist mit den vielen for schleifen den die Function ruft sich selber wieder auf (um die unterverzeichnisse zu erstellen). Bei for schleifen merkt sich das betriebsystem dir rücksprungadresse im Stack und deshalb bekomme ich einen Stack-Überlauf. PS: Wenn ich die Function nicht wieder selber aufrufen lasse dann geht alles nur hat er dann keine unterverzeichnisse. :wall: |
Re: Regestry durchscannen
Code:
Jede Instanz der Funktion hat ein eigenes Registry-Objekt, hat zwei eigene Stringlists, sorry, da wunderst du dich? Sowas sollte man als Parameter übergeben um den Stackframe klein zu halten.
reg : TRegistry;
List, List2 : TStringList; |
Re: Regestry durchscannen
Ich würde es auf eine Iterative Funktion umbauen, ist auch garnicht weiter wild.
1. Du erstellst eine StringListe in der alle zu verarbeitenden Schlüssel abgelegt werden. 2. Du fügst der Liste den Root Pfad (vermutlich '/' oder '' hinzu) 3. Du nimmst den ersten Schlüssel aus der Stringliste und öffnest diesen 4. Du ermittelst alle direkten Unterschlüssel. Diese fügst du ans Ende der Stringliste ein. Natürlich mit Kompletten Pfad (also '/Software/Microsoft' ... usw). 5. Zu dem geöffneten Schlüssel gibts du die ganzen Values aus. 6. Du löschst den ersten Eintrag aus der Stringliste. 7. Du springst zurück zu Punkt 3 und machst das solange, bis kein Schlüssel mehr in der Stringliste steht. Wenn man etwas Hierachie in die Ausgabedatei bringen möchte kannst du bei Punkt 4 den neuen Schlüssel auch nach dem Ersten Eintrag einfügen. Dann wird der neue Schlüssel nach dem aktuellen abgearbeitet. |
Re: Regestry durchscannen
Hoi
Zitat:
Gruss Shaman |
Re: Regestry durchscannen
Gut, Objekte selber nicht (nur die Objektpointer liegen aufm Stack). Aber es reicht für eine außerordentliche Belastung des Speichers. IMO sollte er erstmal dahingehend etwas korrigieren.
Wenn's dann immer noch nicht geht, kann man noch weiter gehen. Außerdem wäre eine solche Funktion bei mir keine Methode. So muß nämlich auch noch der Self-Pointer mitgeschleppt werden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz