![]() |
Registry HK_LM ReadOnly ohne Adminrechte ?
Hallo Leute,
ich versuche gerade unter Win7 64Bit, einen Wert unter : [SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserLis t] zu Lesen. Das ich ohne Admin-Rechte dort nicht Schreiben kann ist mir klar, aber Lesen sollte doch wohl gestattet sein ?! Mein Code:
Delphi-Quellcode:
Habe ich irgendeinen Fehler den ich gerade übersehe ?
function HiddenUserAccountExist : Boolean;
const cRegKey = 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList'; cKEY_WOW64_64KEY = $0100; // Notwendig, weil dieses Projekt noch unter D7 "läuft" var Reg : TRegistry; begin Result := False; Reg := TRegistry.Create(KEY_READ or cKEY_WOW64_64KEY); try Reg.RootKey := HKEY_LOCAL_MACHINE; Reg.Access := KEY_READ or cKEY_WOW64_64KEY; // normal zum Test manuell setzen, aber Access-Wert ist davor auch schon derselbe if Reg.KeyExists(cRegKey) then begin if Reg.OpenKeyReadOnly(cRegKey) then begin //if Reg.OpenKey(cRegKey,false) then begin // auch OpenKey Variate nützt nichts, denn KeyExists steigt vorher schon mit false aus Result := Reg.ValueExists('SomeUserName'); Reg.CloseKey; end else begin OutputDebugString(PChar(SysErrorMessage(GetLastError))); end; end else OutputDebugString(PChar('"'+cRegKey+'" nicht vorhanden')); // Landet jetzt immer hier, obwohl der Key definitiv existiert ... finally Reg.Free; end; end; Oder ist LOCAL_MACHINE wirklich ohne Adminrechte nicht mehr verfügbar ? Ich möchte doch "nur" überprüfen, ob ein bestimmer versteckter Benutzeraccount existiert ... Greetz Data |
AW: Registry HK_LM ReadOnly ohne Adminrechte ?
Kann es sein daß noch ein Reg.KeyExists fehlt?
|
AW: Registry HK_LM ReadOnly ohne Adminrechte ?
@Brummi:
Eigentlich war ich der Meinung das KeyExist nicht notwendig ist, denn wenn der Key nicht existiert, darf das ganze ruhig fehlschlagen. Zur Sicherheit habe ich es jetzt aber doch eingebaut, s. modifizierten Code oben. Jetzt sagt er mir doch tatsächlich das der Key nicht existiert, obwohl dieser definitiv existiert, habe hier mal eben den Registry-Schlüssel exportiert:
Code:
Werde ich langsam alt, bin ich blind oder was ist hier los ?
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList] "SomeUser"=dword:00000000 Danke & Gruß Data |
AW: Registry HK_LM ReadOnly ohne Adminrechte ?
Ich vermute Du willst einen 64-Bit Schlüssel mit einer 32-Bitanwendung lesen.
Schau mal ob Du damit was anfangen kannst ![]() [Edit] Sorry für meine Dummheit ... Du benötigst wahrscheinlich
Delphi-Quellcode:
[/Edit]
Reg := TRegistry.Create(KEY_READ or KEY_WOW64_64KEY);
|
AW: Registry HK_LM ReadOnly ohne Adminrechte ?
Die ganze Redirection ist aber etwas übertrieben für diesen Fall. Hier reicht es für den Zugriff auf den 64-bit-Teil eigentlich, das Property Access anzupassen (Stichwort KEY_WOW64_64KEY). Wenn ich mich recht erinnere, hatte OpenKeyReadOnly da auch noch Bugs. Eventuell also lieber OpenKey und vorher Access := KEY_READ or KEY_WOW64_64KEY (o.ä.).
|
AW: Registry HK_LM ReadOnly ohne Adminrechte ?
habe obrigen Sourcecode nochmals angepasst, leider immer noch erfolglos.
Besonders zu erwähnen ist vielleicht die Entwicklung unter D7 bei diesem Projekt. Des Weiteren tritt das Problem wahrscheinlich nur auf meiner Entwicklungsmaschine W7 64Bit auf, produktiv brauche ich definitiv im Moment nur Zugriff auf 32Bit XP-Registry. Trotzdem würde ich der Ursache gerne auf den Grund gehen. Ich komme im obrigen Code ja gar nicht zum OpenKey / OpenKeyReadOnly, der Aufruf Reg.KeyExist schläfgt immer fehl .... Noch Ideen ? Danke & Gruß Data |
AW: Registry HK_LM ReadOnly ohne Adminrechte ?
Habe jetzt selber die Lösung gefunden,
wenn mann TRegistry nicht benutzt und dann die schon oben genannten Tipps berücksichtigt, dann klappt's auch mit dem Nachbarn ;-)
Delphi-Quellcode:
Danke nochmal an alle die sich beteilgt haben,
function HiddenUserAccountExist : Boolean;
const cRegKey = 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList'; cKEY_WOW64_64KEY = $0100; // <--- für ältere Delphi Versionen var aKey : HKEY; dwType : DWORD; dwLen : DWORD; iRes : Integer; begin Result := False; iRes := RegOpenKeyEx(HKEY_LOCAL_MACHINE, cRegKey, 0, KEY_READ or cKEY_WOW64_64KEY, aKey); if iRes = ERROR_SUCCESS then begin try Result := RegQueryValueEx(aKey,'SomeUser', nil, @dwType, nil, @dwLen) = ERROR_SUCCESS; finally RegCloseKey(aKey); end; end; end; Greetz Data |
AW: Registry HK_LM ReadOnly ohne Adminrechte ?
Nur mal so als Nachtrag: auch bei der Registry kann man genau wie bei Dateien Berechtigungen vergeben. Ob man also lesen oder schreiben kann, kann man ermitteln in dem man einfach auf Berechtigungen klickt.
Das sollte zwar kaum passieren, aber man kann auch sich selbst, ohne Adminrechte, Rechte entziehen. Und was ich kann, kann aber auch jedes böse Programm. Sollte zwar kaum passieren, aber wer weiß. Also zuerst gucken, kostet nichts. |
AW: Registry HK_LM ReadOnly ohne Adminrechte ?
Zitat:
Bei D2007 habe ich keine Probleme gehabt (in Software-UpToDate), einen Key nur lesend in 64bit zu öffnen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:18 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