AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Zugriff auf Registry eines eingeschränkten Benutzerkontos mit Adminrechten
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriff auf Registry eines eingeschränkten Benutzerkontos mit Adminrechten

Ein Thema von amigage · begonnen am 15. Dez 2011 · letzter Beitrag vom 7. Jan 2012
Antwort Antwort
Benutzerbild von MGC
MGC

Registriert seit: 15. Mai 2008
Ort: Helsa
106 Beiträge
 
Turbo Delphi für Win32
 
#1

AW: Zugriff auf Registry eines eingeschränkten Benutzerkontos mit Adminrechten

  Alt 19. Dez 2011, 11:00
ja, das könnte ich mir eher vorstellen als die Anforderung von Admin-Rechten für das eingeschränkte Konto.
Marc
Programmieren ist wie Chemie:
1. Wenn man alles einfach nur zusammenschmeisst kommt es zu unerwarteten Reaktionen.
2. Wenn es plötzlich anfängt zu qualmen, muss man eben noch mal von vorn anfangen.
  Mit Zitat antworten Zitat
amigage

Registriert seit: 11. Nov 2005
Ort: Leipzig
274 Beiträge
 
Delphi 12 Athens
 
#2

AW: Zugriff auf Registry eines eingeschränkten Benutzerkontos mit Adminrechten

  Alt 19. Dez 2011, 11:32
Zitat:
Unter wessen Account läuft der Dienst, ist es ein Dienst den Du im Source hast, bzw. den Du anpassen kannst?
@Bummi: der Dienst meldet sich als Netzerkdienst an und ich habe den Dienst nicht in der Source.

Zitat:
Und wenn du einfach den derzeitigen Benutzernamen vor dem Starten des Admin-Programms einfach irgendwo zwischenzpeicherst, wo ihn das Admin-Programm auch wieder auslesen kann? Irgendwo in einer Datei in CSIDL_COMMON_APPDATA oder Ähnlichem?
@blackfin: Dachte ich mir auch schon, aber der Anwender kann ja theoretisch das Programm gleich als Admin ausführen. Da kann ich den Benutzernamen leider nicht zwischenspeichern.

Zitat:
Vielleicht bekommt man auch einfach raus, zu welchem Benutzer der Desktop gehört, auf welchem das Programm grade sichtbar ist.
@himitsu: Bleibt nur die Frage: wie?

Ich dachte ja, dass man mit der von mir genannten Funktion GetCallerSID() genau die SID des Nutzers erhält, der die Software aufgerufen hat. Ich weiß nur nicht, wie ich diese anzuwenden habe.

@himitsu + MGC: Ich gehe eher von dem lokalen Einsatz auf einem Standalone-Rechner aus, bei dem der Anwender aus Gründen der Sicherheit beim Web-Surfen eher auf einen eingeschränkten Benutzer zurückgreift.
  Mit Zitat antworten Zitat
amigage

Registriert seit: 11. Nov 2005
Ort: Leipzig
274 Beiträge
 
Delphi 12 Athens
 
#3

AW: Zugriff auf Registry eines eingeschränkten Benutzerkontos mit Adminrechten

  Alt 3. Jan 2012, 11:01
Hallo,

leider habe ich bisher keine Lösung für mein Problem finden können.

Den Zugriff auf die Registry kann man ja wirklich noch umgehen, indem man "unprofessioneller Weise" den eingeschränkten Nutzernamen abspeichert und dann als Admin ausliest. Somit erhält man den richtigen SID für den HKEY_USERS Registryzweig.

Problematischer ist es da schon, wenn man auf Standardpfade zugreifen will:

Delphi-Quellcode:
  try
    SetLength(lPath, MAX_PATH);
    if SHGetSpecialFolderPath(0, @lPath[1], CSIDL_APPDATA, False) then
    begin
      SetLength(lPath, pos(#0, lPath) - 1);
      Result := lpath;
    end;
  except
    // ...
  end;
Hier erhält man wirklich nur die Pfade des Adminkontos statt des eingeschränkten Kontos! Oder kann man dies irgendwie korrigieren?
  Mit Zitat antworten Zitat
Benutzerbild von MGC
MGC

Registriert seit: 15. Mai 2008
Ort: Helsa
106 Beiträge
 
Turbo Delphi für Win32
 
#4

AW: Zugriff auf Registry eines eingeschränkten Benutzerkontos mit Adminrechten

  Alt 4. Jan 2012, 22:06
Erstmal noch frohes neues Jahr!

Wenn ich diesen Thread noch richtig im Kopf habe, startest Du Dein Programm von einem eingeschränkten Nutzerkonto aus und startest dann für bestimmte Vorgänge das Admin-Konto.
Wie wäre es demnach, wenn Du die Pfade ausliest bevor Du in den Adminmodus wechselst?
Marc
Programmieren ist wie Chemie:
1. Wenn man alles einfach nur zusammenschmeisst kommt es zu unerwarteten Reaktionen.
2. Wenn es plötzlich anfängt zu qualmen, muss man eben noch mal von vorn anfangen.
  Mit Zitat antworten Zitat
amigage

Registriert seit: 11. Nov 2005
Ort: Leipzig
274 Beiträge
 
Delphi 12 Athens
 
#5

AW: Zugriff auf Registry eines eingeschränkten Benutzerkontos mit Adminrechten

  Alt 5. Jan 2012, 07:31
Hallo,

Dir auch ein frohes neues Jahr.

Zitat:
Wie wäre es demnach, wenn Du die Pfade ausliest bevor Du in den Adminmodus wechselst?
Das wäre kein Problem, wenn der Nutzer die Software nicht schon von selbst als Admin startet bzw. es direkt in den Eigenschaften der exe fest hinterlegt.

Ich habe zwar für mein Problem eine andere Lösung gefunden, so dass ich nicht mehr in den Admin-Modus muss, aber interessieren würde es mich schon, wie man das hinbekommt, ohne vorher Daten über den Windows-Benutzernamen und Standardpfade in einer Datei abzulegen.

Geändert von amigage ( 5. Jan 2012 um 08:44 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

AW: Zugriff auf Registry eines eingeschränkten Benutzerkontos mit Adminrechten

  Alt 5. Jan 2012, 08:06
Zitat:
The correct way to load and manipulate a specific user's Registry hive is to having your calling thread impersonate that user
http://stackoverflow.com/questions/8...ve-with-delphi

Zusammen mit http://michael-puff.de/Programmierun...ersonate.shtml sollte das Problem lösbar sein.
Michael
Ein Teil meines Codes würde euch verunsichern.

Geändert von Luckie ( 5. Jan 2012 um 08:10 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

AW: Zugriff auf Registry eines eingeschränkten Benutzerkontos mit Adminrechten

  Alt 5. Jan 2012, 08:43
Delphi-Quellcode:
{-----------------------------------------------------------------------------
Project      : -
Description  : Enhancement of TRegistry for impersonating the registry
Author      : Michael Puff [http//michael-puff.de]
Date        : 2012-01-05
-----------------------------------------------------------------------------}


unit RegistryEx;

interface

uses
  Windows, SysUtils, Registry;

type
  TRegistryEx = class(TRegistry)
    private
      FUser: string;
      FPassword: String;
      function Impersonate: Boolean;
    public
      destructor Destroy; override;
      procedure ImpersonateUser(UserName: string; Password: string);
  end;

implementation

{ TRegistryEx }

destructor TRegistryEx.Destroy;
begin
  if not RevertToSelf then
    Halt; // if revert fails kill process for safty reason
  inherited;
end;

procedure TRegistryEx.ImpersonateUser(UserName: string; Password: string);
begin
  FUser := UserName;
  FPassword := Password;
  if not Impersonate then
    RaiseLastOSError;
end;

function TRegistryEx.Impersonate: Boolean;
var
  LogonType : Integer;
  LogonProvider : Integer;
  TokenHandle : THandle;
begin
  LogonType := LOGON32_LOGON_INTERACTIVE;
  LogonProvider := LOGON32_PROVIDER_DEFAULT or LOGON32_PROVIDER_WINNT50;
  Result := LogonUser(PChar(FUser), nil, PChar(FPassword), LogonType, LogonProvider, TokenHandle);
  if Result then
  begin
    Result := ImpersonateLoggedOnUser(TokenHandle);
    CloseHandle(TokenHandle);
  end;
end;

end.
Delphi-Quellcode:
uses
  RegistryEx;

procedure TForm1.btn1Click(Sender: TObject);
var
  reg: TRegistryEx;
begin
  reg := TRegistryEx.Create;
  try
    reg.ImpersonateUser('user', 'pw');
    
  finally
    reg.Free;
  end;
end;
Probier das mal. Habe es eben nur mal blind getippt, kann es leider hier nicht testen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  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 01:21 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