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

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 Luckie
Luckie

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

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
 
#2

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
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 5. Jan 2012, 08:50
Hallo Luckie,

auch Dir ein erfolgreiches 2012!

Ich danke Dir für den Hinweis und die superschnelle Umsetzung eines Beispiel-Codes. Ich habe es jetzt auch noch nicht getestet. Nur wie ich die Sache sehe, benötige ich doch wieder den Benutzernamen des eingeschränkten Nutzers. Den weiß das Programm doch aber nicht, wenn es sofort als Admin gestartet wird.

Besser wäre es doch, wenn ich den Benutzernamen des tatsächlich geöffneten Windows-Benutzers erhalte, obwohl ich die Software als Admin starte. Sonst habe ich nur wieder den Admin-Nutzernamen. Oder verstehe ich das jetzt falsch?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

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

  Alt 5. Jan 2012, 08:58
Natürlich brauchst du Name und Passwort des Benutzers auf dessen Registry Hive zu zugreifen willst. Sonst könnte ja jeder als Administrator agieren. Und was ist für dich der "tatsächlich geöffneten Windows-Benutzer"? An einem Windows System können viele Benutzer angemeldet sein und arbeiten. Woher soll das Programm wissen, welcher Benutzer gemeint ist? Wenn ein Benutzer ein Programm unter anderen Konto startet, dann ist das für das gestartete Programm so, als ob der Nutzer mit dem andren Konto es gestartet hätte.
Michael
Ein Teil meines Codes würde euch verunsichern.
  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, 09:22
Code:
Wenn ein Benutzer ein Programm unter anderen Konto startet, dann ist das für das gestartete Programm so, als ob der Nutzer mit dem andren Konto es gestartet hätte.
Das wollte ich doch nur wissen Ich dachte, es gäbe eine Möglichkeit, dies auszulesen. So in der Art: das Adminkonto wurde von einem eingeschränkten Benutzerkonto, wie hieß das?

Dem ist also nicht so! Somit steht also fest, dass Programme, die unter einem eingeschränkten Windows-Nutzer ohne Adminrechte als "Administrator ausgeführt" werden, nie richtig funkionieren werden, wenn sie eigentlich auf die Nutzer-Registry zugreifen müssen, oder Nutzzer-Standardpfade %UserProfiles%, %Documents% bzw. den Desktop CSIDL_DESKTOPDIRECTORY auslesen müssen. Denn dann erhält man immer die Daten des Adminkontos.

Ist das korrekt?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.667 Beiträge
 
Delphi 12 Athens
 
#6

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

  Alt 5. Jan 2012, 09:25
Starte doch einfach mal cmd.exe als Administrator und schau, was SET so ausgibt.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  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, 09:33
Man könnte höchstens den Benutzer des Elternsprozesses ermitteln. Aber dann fehlt dir ja immer noch das Passwort.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 02:31 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