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 Elevated Programm soll Funktion non-elevated ausführen (https://www.delphipraxis.net/142628-elevated-programm-soll-funktion-non-elevated-ausfuehren.html)

CodeX 31. Okt 2009 14:58


Elevated Programm soll Funktion non-elevated ausführen
 
Ich möchte aus einem Programm, das unter Vista oder Win7 elevated (also mit Admin-Rechten läuft) eine Funktion ausführen, die NICHT elevated ist. Das brings zwar keine Sicherheitsbedenken mit sich (ich möchte ja weniger Rechte und nicht mehr...) aber das funktioniert dann wohl doch nicht so einfach.

Auf eine extra-Exe Datei, wo die Funktionen entsprechend ausgelagert sind, sollte möglichst verzichtet werden.

Wahrscheinlich ist eine Lösung mit JWSCL irgendwie möglich. Aber ich habe keinen Ansatzpunkt gefunden. Bin für jede Hilfe dankbar. :)

Apollonius 31. Okt 2009 15:13

Re: Elevated Programm soll Funktion non-elevated ausführen
 
In deinem eigenen Prozess wird das nicht gehen. Du kannst zwar einem einzelnen Thread ein eingeschränktes Token zuweisen (Impersonation), aber dieser Thread kann jederzeit RevertToSelf aufrufen und damit wieder das Prozess-Token erhalten.

CodeX 31. Okt 2009 23:22

Re: Elevated Programm soll Funktion non-elevated ausführen
 
Ich habe jetzt nochmal mit Tokens herumgespielt.
Ich bin mir nach wie vor nicht sicher, wie ich das Token des eigenen Prozesses im non-elevated Status bekomme, wenn er gerade elevated läuft. Ich nehme jetzt einfach das Token des Explorers. Das hat jetzt in allen Tests funktioniert. Ob das allerdings die beste Lösung ist, weiß ich nicht...

Delphi-Quellcode:
var
  ExplorerToken : TJwSecurityToken;
begin
  ExplorerToken := TJwSecurityToken.CreateCompatibilityQueryUserToken(MAXIMUM_ALLOWED, 'explorer.exe');
  TJwAutoPointer.Wrap(ExplorerToken);

  ExplorerToken.ImpersonateLoggedOnUser;

  //do stuff

  ExplorerToken.RevertToSelf;
end;
Bei besseren Ideen, bitte Bescheid geben.

Apollonius 1. Nov 2009 13:57

Re: Elevated Programm soll Funktion non-elevated ausführen
 
Du könntest auch dein eigenes Token nehmen und eine eingeschränkte Version davon erstellen (CreateRestrictedToken), aber das ist ziemlich kompliziert, weil du die richtigen Rechte entfernen musst - insofern scheint mir dein Versuch eine gangbare Lösung zu sein.

himitsu 1. Nov 2009 15:20

Re: Elevated Programm soll Funktion non-elevated ausführen
 
och, dann starte ich mir einfach eine explorer.exe mit Adminrechnten :angel2:


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:32 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