Einzelnen Beitrag anzeigen

Benutzerbild von Luckie
Luckie

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

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