![]() |
Re: Prüfen, ob RegistryKey vorhanden ist?
Schon klar das in Name der Name der Form drinsteht. Ist schließlich nichts anderes wie Self.Name und Self ist eben die Form. Wo hast du x denn definiert? Global?
|
Re: Prüfen, ob RegistryKey vorhanden ist?
Warum denn?
Steht doch drin: Name:= ('HKEY_Current_User.......'); Ja x ist global definiert. |
Re: Prüfen, ob RegistryKey vorhanden ist?
Zitat:
Wenn du es soc machen willst, musst du mit
Delphi-Quellcode:
arbeiten.
with reg do begin
//... end; |
Re: Prüfen, ob RegistryKey vorhanden ist?
Ok. funktioniert jetzt beides.
Letztes Manko: Wenn ich den Schlüssel mit dem Value: KeyName in HKEY_Current_User hab, gehts, und er liefert den richtigen Wert zurück. Wenn ich den Schlüssel aber in HKEY_Local_Machine (also ein x-wert 1 rauskommen müsste,) kommt nix raus. Findet entweder den Value nicht oder geht garnicht erst in die Schleife. Das verstehe ich nicht. |
Re: Prüfen, ob RegistryKey vorhanden ist?
Existiert er dort denn??
|
Re: Prüfen, ob RegistryKey vorhanden ist?
Kann es sein, dass die ganzen Ratschläge von oben wieder über Bord geworfen wurden? Ich versuch es mal aus der hohlen Hand:
Delphi-Quellcode:
Außerdem würde ich nicht auf globale Variablen zugreifen wollen, sondern x und Name eher als var-Parameter übergeben.
function RegCheck():Boolean;
begin result:= false; reg:= TRegistry.Create(KEY_READ); //nur zum Lesen öffnen <-- fehlte try reg.RootKey:= HKEY_Local_Machine; if reg.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\',false) then try if reg.ValueExists('KeyName') then begin Name:= ('HKEY_Local_Machine\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\KeyName'); result:= True; x:= 1; end; finally Reg.CloseKey; //das hab ich in den oberen Codes komplett vermisst end; reg.RootKey:= HKEY_Current_User; if reg.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\', False) then try if reg.ValueExists('KeyName') then begin Name:= ('HKEY_Current_User\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\KeyName'); result:= True; x:= 2; end; finally Reg.CloseKey; //s.o. end; finally reg.Free; end; end; |
Re: Prüfen, ob RegistryKey vorhanden ist?
100%ig.
Der ist da. Aber irgendwie bekomme ich die Rückgabe: Alles in Ordnung. Soll eigentlich eine Art Removal Tool für einen bestimmten Virus werden. Einen Trojaner, der sich an einer Stelle mit einem bestimmten Value in die Registry schreibt, nämlich entweder in HKEY_Current_User oder in den Local_Machine. Pfad ist der Selbe. Ich will nur den Key abfragen und dann in einem 2. Schritt bei existenz löschen. |
Re: Prüfen, ob RegistryKey vorhanden ist?
Zitat:
|
Re: Prüfen, ob RegistryKey vorhanden ist?
Die Arbeit würd ich auch den Antiviren Tools überlassen ;)
Glaub mir das ist sicherer ;) |
Re: Prüfen, ob RegistryKey vorhanden ist?
Ob sowas sicher ist oder nicht lasst lieber meine Sorge sein. Ich bin mir sicher, dass es 100% funktionieren wird, da das Ding einfach schlecht programmiert ist und zumindest das letzte offizielle Build immer die gleichen Sachen benutzt. Dependencies löschen geht schon, die .exe an sich mit Taskkill und on Reboot auch. Einziges Problem ist, dass ich dne Registry-Eintrag beseitigt haben will, damit ich wirklich 100% sicher sein kann.
Ich glaube, dass wir hier nicht über den Sinn diskutieren sollten. Tatsache ist: - Der Key ist existent (hat nix drinstehen nur den Value 'KeyName' - Wenn der in CurrentUser abgelegt ist kann der gefunden und gelöscht werden, nur in HKEY_LOCAL_MACHINE findet der den nicht - x: Integer und reg: TRegistry sind global definiert. nochmal der aktuelle Code:
Delphi-Quellcode:
Leider funktioniert dieser Code auch nicht, ich denke es ist der selbe Fehler, dieser Code sollte den Key löschen aber anscheinend geht er nicht in die Schleife ich weiß nicht warum. Dort steht dann nur Starting removal dependencies... und die procedure ist beendet.
function RegCheck():Boolean;
begin result:= false; reg:= TRegistry.Create; try reg.RootKey:= HKEY_LOCAL_MACHINE; if reg.KeyExists('\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\') then begin if reg.ValueExists('KeyName') then begin Names:= ('HKEY_Local_Machine\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\KeyName'); result:= True; x:= 1; end; end; reg.RootKey:= HKEY_Current_User; if reg.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\', False) then begin if reg.ValueExists('KeyName') then begin Names:= ('HKEY_Current_User\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\KeyName'); result:= True; x:= 2; end; end; finally reg.Free; end; end;
Delphi-Quellcode:
Danke für euer Verständnis und eure Hilfe
if Res1 = True then
begin sMemo1.Lines.Add('Starting removal dependencies...'); if x = 1 then begin reg:= Tregistry.Create; try reg.RootKey:= HKEY_Local_Machine; if reg.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\', False) then begin sMemo1.Lines.Add(''); sMemo1.Lines.Add('Getting values...'); sMemo1.Lines.Add('Deleting trojan from registry...'); reg.DeleteValue('KeyName'); if reg.ValueExists('KeyName') then begin sMemo1.Lines.Add(''); sMemo1.Lines.Add('Failed to delete.'); sMemo1.Lines.Add('Maybe you have no admin rights?'); sMemo1.Lines.Add('You can also delete it manually using the ''''regedit''''command'); sMemo1.Lines.Add(''); end; end; finally reg.Free; end; if x = 2 then begin reg:= Tregistry.Create; try reg.RootKey:= HKEY_Current_User; if reg.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\', False) then begin sMemo1.Lines.Add(''); sMemo1.Lines.Add('Getting values...'); sMemo1.Lines.Add('Deleting trojan from registry...'); reg.DeleteValue('KeyName'); if reg.ValueExists('KeyName') then begin sMemo1.Lines.Add(''); sMemo1.Lines.Add('Failed to delete.'); sMemo1.Lines.Add('Maybe you have no admin rights?'); sMemo1.Lines.Add('You can also delete it manually using the ''''regedit''''command'); sMemo1.Lines.Add(''); end; end; finally reg.Free; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:28 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