Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Aktion mit anderen User rechten ausführen (https://www.delphipraxis.net/67428-aktion-mit-anderen-user-rechten-ausfuehren.html)

renekr 14. Apr 2006 10:27


Aktion mit anderen User rechten ausführen
 
Hallo,
folgendes Thema:
Ich bin eingeloggt als User und habe den Lokale Admin und Passwort.


CreateProcessasuser geht nicht weil ich keinen anderen Process machen will.


ImpersonateLoggedOnUser???

Hat da schon mal jemand damit gearbeitet?

PS: Ich will nicht einen anderen Prozess mit anderen Rechten starten,alles soll im Programm drin sein nur mit anderen Security Rechten.
Danke.

Luckie 14. Apr 2006 10:30

Re: Aktion mit anderen User rechten ausführen
 
Zitat:

Zitat von renekr
ImpersonateLoggedOnUser???

Entwerder das oder MSDN-Library durchsuchenImpersonateSelf.

Basilikum 14. Apr 2006 11:12

Re: Aktion mit anderen User rechten ausführen
 
Zitat:

Zitat von renekr
ImpersonateLoggedOnUser???

Hat da schon mal jemand damit gearbeitet?

PS: Ich will nicht einen anderen Prozess mit anderen Rechten starten,alles soll im Programm drin sein nur mit anderen Security Rechten.

mit Hilfe der APIs LogonUser/ImpersonateLoggedOnUser und RevertToSelf lasse ich einzelne Threads eines Server-Dienstes im Kontext eines anderen Users (!= SYSTEM) laufen; in meinem Fall, damit sie auf Network-Shares zugreifen können...
bei älteren Windows-Versionen hat es Probleme bezüglich des benötigten SE_TCB_NAME-Privileg gegeben (nur Dienste haben dieses Privileg) - unterdessen müsste dies jedoch auch in "normalen" Prozessen funktionieren, sofern der anzumeldende User ein Administrator ist (so verstehe ich den Text bei MSDN)...

Luckie 14. Apr 2006 11:14

Re: Aktion mit anderen User rechten ausführen
 
Delphi-Quellcode:
const
  USER             = 'Hansbambel';
  PW               = 'geheim';

function GetCurrUserName: string;
var
  Size             : DWORD;
begin
  Size := MAX_COMPUTERNAME_LENGTH + 1;
  SetLength(Result, Size);
  if GetUserName(PChar(Result), Size) then
    SetLength(Result, Size)
  else
    Result := '';
end;

function Impersonate(const User, PW: string): Boolean;
var
  LogonType        : Integer;
  LogonProvider    : Integer;
  TokenHandle      : THandle;
  strAdminUser     : string;
  strAdminDomain   : string;
  strAdminPassword : string;
begin
  LogonType := LOGON32_LOGON_INTERACTIVE;
  LogonProvider := LOGON32_PROVIDER_DEFAULT;
  strAdminUser := USER;
  strAdminDomain := '';
  strAdminPassword := PW;
  Result := LogonUser(PChar(strAdminUser), nil,
    PChar(strAdminPassword), LogonType, LogonProvider, TokenHandle);
  if Result then
  begin
    Result := ImpersonateLoggedOnUser(TokenHandle);
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  if Impersonate(USER, PW) then
  begin
    ShowMessage(GetCurrUserName);
    RevertToSelf;
    ShowMessage(GetCurrUserName);
  end
  else
    MessageBox(0, PChar(SysErrorMessage(GetLastError)), '', 0);
end;
Zur Kontrolle gebe ich den Benutzernamen aus. Funktioniert unter Windows XP SP2 mit eingeschränkten Benutzerrechten. Unter Windows 2000 dürfte es, wie Basilikum schon bemerkt hat, Probleme mit den Privilegien geben, da dort das Privileg SE_TCB_NAME erforderlich ist, welches in der Regel nur Dienste Besitzen.

renekr 14. Apr 2006 19:01

Re: Aktion mit anderen User rechten ausführen
 
Hi,
vielen Dank euch zwei.
werde es gleich mal testen.

Gibt es dann ne möglichkeit für W2K oder ist es generell nur ab XP möglich?

Danke.

renekr 15. Apr 2006 20:07

Re: Aktion mit anderen User rechten ausführen
 
Hi,
weiß jemand ob man damit auch in einer Domäne arbeiten kann?

Also auf einem PC den Login von einem Domänen User nehmen,der in der Localen Admin Gruppe enthalten ist ?

@Luckie : Du hast mir ja schon mal geantwortet das deine MPUntuser nur Local gedacht ist.

Weiß jemand wie oder ob es sowas für die Arbeiten mit domänen Accounts gibt?

wäre euch dankbar.

Basilikum 15. Apr 2006 22:11

Re: Aktion mit anderen User rechten ausführen
 
Zitat:

Zitat von renekr
Hi,
weiß jemand ob man damit auch in einer Domäne arbeiten kann?

Also auf einem PC den Login von einem Domänen User nehmen,der in der Localen Admin Gruppe enthalten ist ?

@Luckie : Du hast mir ja schon mal geantwortet das deine MPUntuser nur Local gedacht ist.

Weiß jemand wie oder ob es sowas für die Arbeiten mit domänen Accounts gibt?

wäre euch dankbar.

bei dem im obigen Post angesprochenen Server-Dienst werden Domain-User-Accounts verwendet - funktioniert problemlos... siehe 2. Parameter von LogonUser...

renekr 16. Apr 2006 10:33

Re: Aktion mit anderen User rechten ausführen
 
Hi,
Danke.

Ich glaube ich hatte Eier auf den Augen.
Oder es einfach überlesen das Domäne!!!

Vielen Dank.

Luckie 17. Apr 2006 13:14

Re: Aktion mit anderen User rechten ausführen
 
Ich habe auf meiner Homepage dazu noch mal etwas geschrieben: http://www.michael-puff.de/Developer...ersonate.shtml
Wichtig: In meinem obigen Code hat ein CloseHandle gefehlt und natürlich der Hinweis auf RevertToSelf!

renekr 17. Apr 2006 20:03

Re: Aktion mit anderen User rechten ausführen
 
Hi Luckie,

Vielen Dank.

Ich muss dir heir an dieser Stelle mal ein Lob aussprechen.
Ich habe schon sehr oft deine Arbeit in meinen Tools brauchen können und diese haben auch immer Super funktioniert.
Auch der nötige Support oder Kleine Denkanstöße waren immer da.


PS: Wie ist es eigentlich wenn ich zb einen PC der in einer Domäne ist ausserhalb der Domäne betreibe.
Dann melde ich mich Local an windows an aber an der Domäne ,weil zuvor schon ein Logon geschehen ist ( an der domäne ) sind die User Daten Temp. vorhanden .

Wenn ich nun Impersonate mache mit dem Domänen USer geht es nicht. Fehler Falscher User oder Passwort.:
Werde es morgen im Betrieb mal Testen wenn ich die domäne connected habe.


Danke.

:hello: :hello:


Alle Zeitangaben in WEZ +1. Es ist jetzt 10: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 by Thomas Breitkreuz