![]() |
Registrierung rekursiv durchsuchen, warum zugriffsverletzung
jedesmal wenn ich diese procedure aufruf, dann erhalte ich nach einiger zeit eine zugriffsverletzung. woran kann das liegen? hat jemand ne idee?
Delphi-Quellcode:
wenn ich jedoch, die zeilen am anfang mit rein nehm, dann funktioniert das ganze problemlos. es muss also irgendwas mit den ordnern
Procedure Registry_durchsuchen(Schluessel, suchen: string);
var i, a: integer; regkeys: tstringlist; regvalues: tstringlist; wert: string; value: string; begin //if pos(uppercase('\System\ControlSet'), uppercase(schluessel)) <> 1 then //begin if reg.OpenKey(Schluessel, False) then begin regkeys := tstringlist.Create; try reg.Access := KEY_EXECUTE; reg.GetKeyNames(regkeys); for i:=0 to regkeys.count-1 do begin regvalues := tstringlist.create; try if reg.OpenKey(IncludeTrailingBackslash(Schluessel)+regkeys.Strings[i], False) then begin reg.GetValueNames(regvalues); for a:=0 to regvalues.count-1 do begin if reg.GetDataType(regvalues.Strings[a]) = rdString then begin value := reg.ReadString(regvalues.Strings[a]); if pos(suchen, value) <> 0 then begin form1.listbox1.items.Add(IncludeTrailingBackslash(Schluessel)+IncludeTrailingBackslash(regkeys.Strings[i])+'|'+regvalues.strings[a]); application.ProcessMessages; end; end; end; end; finally regvalues.Free; end; wert := IncludeTrailingBackslash(Schluessel)+regkeys.Strings[i]; registry_durchsuchen(wert, suchen); end; finally regkeys.Free; end; end; //end; end; HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001 HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002 usw... zu tun haben. hat jemand eine idee? |
Re: Registrierung rekursiv durchsuchen, warum zugriffsverlet
das ganze ruf ich dann so auf:
reg.rootkey := HKEY_LOCAL_MACHINE; Registry_durchsuchen('', 'test); |
Re: Registrierung rekursiv durchsuchen, warum zugriffsverlet
Code:
Procedure Registry_durchsuchen(Schluessel, suchen: string);
var i, a: integer; regkeys: tstringlist; regvalues: tstringlist; wert: string; value: string; begin //if pos(uppercase('\System\ControlSet'), uppercase(schluessel)) <> 1 then //begin if reg.OpenKey(Schluessel, False) then begin regkeys := tstringlist.Create; try reg.Access := KEY_EXECUTE; reg.GetKeyNames(regkeys); for i:=0 to regkeys.count-1 do begin regvalues := tstringlist.create; try if reg.OpenKey(IncludeTrailingBackslash(Schluessel)+regkeys.Strings[i], False) then begin reg.GetValueNames(regvalues); for a:=0 to regvalues.count-1 do begin if reg.GetDataType(regvalues.Strings[a]) = rdString then begin value := reg.ReadString(regvalues.Strings[a]); if pos(suchen, value) <> 0 then begin form1.listbox1.items.Add(IncludeTrailingBackslash(Schluessel)+IncludeTrailingBackslash(regkeys.Strings[i])+'|'+regvalues.strings[a]); application.ProcessMessages; end; end; end; end; finally regvalues.Free; end; [color=red]if (regkeys.Count > i) and (regkeys.Strings[i] > '') then begin[/color] wert := IncludeTrailingBackslash(Schluessel)+regkeys.Strings[i]; registry_durchsuchen(wert, suchen); [color=red]end;[/color] end; finally regkeys.Free; end; end; //end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:11 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