AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Registrierung rekursiv durchsuchen, warum zugriffsverletzung
Thema durchsuchen
Ansicht
Themen-Optionen

Registrierung rekursiv durchsuchen, warum zugriffsverletzung

Ein Thema von mumu · begonnen am 11. Mär 2004 · letzter Beitrag vom 11. Mär 2004
Antwort Antwort
mumu

Registriert seit: 28. Okt 2003
Ort: Bamberg
519 Beiträge
 
#1

Registrierung rekursiv durchsuchen, warum zugriffsverletzung

  Alt 11. Mär 2004, 17:45
jedesmal wenn ich diese procedure aufruf, dann erhalte ich nach einiger zeit eine zugriffsverletzung. woran kann das liegen? hat jemand ne idee?

Delphi-Quellcode:
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;
wenn ich jedoch, die zeilen am anfang mit rein nehm, dann funktioniert das ganze problemlos. es muss also irgendwas mit den ordnern
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002
usw...
zu tun haben.

hat jemand eine idee?
  Mit Zitat antworten Zitat
mumu

Registriert seit: 28. Okt 2003
Ort: Bamberg
519 Beiträge
 
#2

Re: Registrierung rekursiv durchsuchen, warum zugriffsverlet

  Alt 11. Mär 2004, 22:45
das ganze ruf ich dann so auf:

reg.rootkey := HKEY_LOCAL_MACHINE;
Registry_durchsuchen('', 'test);
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.179 Beiträge
 
Delphi 12 Athens
 
#3

Re: Registrierung rekursiv durchsuchen, warum zugriffsverlet

  Alt 11. Mär 2004, 22:54
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;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz