Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Registry key lesen (https://www.delphipraxis.net/128088-registry-key-lesen.html)

msickel 23. Jan 2009 22:26


Registry key lesen
 
Hallo,

ich verwende folgenden Code um den Winlogon aus der Registry zu lesen.
Das geht auch solange wie ich lokal oder als admin angemeldet bin, als normaler User gehts nicht warum?

Gibt es eine andere Möglichkeit?

Delphi-Quellcode:

uses Registry;

procedure TForm1.Button1Click(Sender: TObject);
 begin
    with TRegistry.Create do
    begin
      RootKey := HKEY_LOCAL_MACHINE;
      OpenKey( 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon', False );
      ShowMessage(ReadString('DefaultDomainName'));
    end;
 end;
Martin

craash 23. Jan 2009 22:54

Re: Registry key lesen
 
hi,

dass ein normaler user keine registryeinträge lesen/ändern kann liegt (wahrscheinlich) in der gruppenrichtlinie begründet.

gpedit.msc > Benutzerkonfiguration > Administrative Vorlagen > System > "Programme zum Bearbeiten der Registrierung deaktivieren" (win2000) / "Zugriff auf Programme zur Bearbeitung der Registrierung verhindern" (xp) o.ä.

wie das bei vista bearbeitet werden kann weiß ich leider nicht sicher :S


mfg


/edit: bei vista gehts per regedit > Bearbeiten > Berechtigungen

Ralf Kaiser 23. Jan 2009 23:03

Re: Registry key lesen
 
Zitat:

Zitat von msickel
Hallo,

ich verwende folgenden Code um den Winlogon aus der Registry zu lesen.
Das geht auch solange wie ich lokal oder als admin angemeldet bin, als normaler User gehts nicht warum?

Halli Hallo,

Erst einmal: die OpenKey-Methode gibt dir ein boolean zurück um anzuzeigen, dass der Aufruf erfolgreich war. Dieses Ergebis wertest du nicht aus! (der Rückgabewert wird nicht ohne Grund geliefert! :wink: )

Zu deinem Problem:

Delphi (bzw. die Unit "Registry") fordert beim öffnen eines Registry Keys normalerweise volle Rechte an (also auch Schreibrechte). Um das zu verhindern kann man das Property "Access := KEY_READ" setzen. Also so:

Delphi-Quellcode:
procedure TForm1.Button_1Click(Sender: TObject);
begin
  with TRegistry.Create do begin
    RootKey := HKEY_LOCAL_MACHINE;
    Access := KEY_READ;
    if OpenKey('SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon', False) then
      ShowMessage(ReadString('DefaultDomainName'))
    else
      ShowMessage('Ooops...')
  end;
end;
Dann klappt das Lesen auch als normaler Benutzer (aber man kann keine schreibenden Funktionen mehr verwenden!!!)

Ciao,
Ralf

Luckie 23. Jan 2009 23:05

Re: Registry key lesen
 
Zitat:

Zitat von msickel
Das geht auch solange wie ich lokal oder als admin angemeldet bin, als normaler User gehts nicht warum?

Delphi öffnet die Reistry dummerweise mit ALL_ACCESS also zum Lesen UND Schreiben. Da du als normaler Bneutzer auch lesen kannst, musst du nur den Schlüssel explizit zum Lesen öffnen. Das kannst du machen, in dem du im Konstrukor von TRegistry die entsprechende Konstante übergibst oder ... Mist, es gibt noch eine andere Möglichkeit, die fällt mir nur gerade nicht ein.

Andreas L. 23. Jan 2009 23:18

Re: Registry key lesen
 
Oder OpenKeyReadOnly verwenden. Siehe Delphi-Hilfe.

Luckie 23. Jan 2009 23:25

Re: Registry key lesen
 
Zitat:

Zitat von Andreas L.
Oder OpenKeyReadOnly verwenden. Siehe Delphi-Hilfe.

Genau das ist mir nicht eingefallen.

Hawkeye219 24. Jan 2009 01:27

Re: Registry key lesen
 
Hallo,

zum Thema "Konstruktor" fällt mir immer "Destruktor" ein...

Gruß Hawkeye

Luckie 24. Jan 2009 10:33

Re: Registry key lesen
 
Zitat:

Zitat von Hawkeye219
Hallo,

zum Thema "Konstruktor" fällt mir immer "Destruktor" ein...

Oh ja. Machen wir es jetzt wie bei Dalli Dalli? :mrgreen: Mir fällt noch "Ressourcenschutzblock" ein.

msickel 24. Jan 2009 13:07

Re: Registry key lesen
 
Super, vielen Dank für die Antworten!

Martin

Andreas L. 25. Jan 2009 20:13

Re: Registry key lesen
 
Zitat:

Zitat von Alfi001

Delphi (bzw. die Unit "Registry") fordert beim öffnen eines Registry Keys normalerweise volle Rechte an (also auch Schreibrechte). Um das zu verhindern kann man das Property "Access := KEY_READ" setzen. Also so:

Delphi-Quellcode:
procedure TForm1.Button_1Click(Sender: TObject);
begin
  with TRegistry.Create do begin
    RootKey := HKEY_LOCAL_MACHINE;
    Access := KEY_READ;
    if OpenKey('SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon', False) then
      ShowMessage(ReadString('DefaultDomainName'))
    else
      ShowMessage('Ooops...')
  end;
end;

Sollte man Access nicht vor RootKey setzen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:51 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