AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Verständnisfrage Elevation und Impersonation
Thema durchsuchen
Ansicht
Themen-Optionen

Verständnisfrage Elevation und Impersonation

Ein Thema von Der schöne Günther · begonnen am 21. Feb 2014 · letzter Beitrag vom 21. Feb 2014
 
Der schöne Günther
Online

Registriert seit: 6. Mär 2013
6.197 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Verständnisfrage Elevation und Impersonation

  Alt 21. Feb 2014, 13:06
Nein, das ist definitiv nicht der Fall. Beispiel: Textdatei direkt auf C:\ schreiben.

Delphi-Quellcode:
procedure TForm20.Button1Click(Sender: TObject);
var
   strings: TStrings;
begin
   strings := TStringList.Create();
   strings.Append('Hallo Welt');
   strings.SaveToFile('c:\textfile.txt');
end;
Führt man das als "normaler Benutzer" aus: Zugriff verweigert. Führt man das mit einem normalen Administratorkonto aus: Geht.

Soweit alles wie erwartet.

Gebe ich mich vor dem Schreibvorgang als Admin aus:

Delphi-Quellcode:
procedure TForm20.Button1Click(Sender: TObject);
var
   strings: TStrings;
begin
   strings := TStringList.Create();
   strings.Append('Hallo Welt');

   if not TWindowsUser.Impersonate(
      'admin',
      '1234567890'
   ) then
      Beep();

   try
      strings.SaveToFile('c:\textfile.txt');
   finally
      RevertToSelf();
   end;
end;
funktioniert es weder ("Zugriff verweigert"), wenn ich die Datei als normaler Benutzer starte, noch als Admin. Das verstehe ich auch nicht.


--
Die Methode "Impersonate" habe ich glaube ich einfach von Luckie gestohlen
Delphi-Quellcode:
class function TWindowsUser.Impersonate(
   const username: String;
   const password: String;
   const domain: String = Para_Impersonate_domain
): Boolean;
var
   LogonType: Integer;
   LogonProvider: Integer;
   TokenHandle: THandle;

   strAdminUser: string;
   strAdminDomain: string;
   strAdminPassword: string;
begin
   LogonType := LOGON32_LOGON_INTERACTIVE;
   LogonProvider := LOGON32_PROVIDER_DEFAULT or LOGON32_PROVIDER_WINNT50;

    {TODO -oJM -cDoc : ActionItem}

   // Token für den gewünschten Benutzer holen
   Result := LogonUser(
      PChar(username),
      PChar(domain),
      PChar(password),
      LogonType,
      LogonProvider,
      TokenHandle
   );

   // Wenn das Token in Erfahrung gebracht werden konnte...
   if Result then begin
      Result := ImpersonateLoggedOnUser(TokenHandle);
      CloseHandle(TokenHandle);
   end;
end;
  Mit Zitat antworten Zitat
 

 

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 11:59 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