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 Programm mit weniger Rechten starten (https://www.delphipraxis.net/148512-programm-mit-weniger-rechten-starten.html)

Ralf Kaiser 3. Mär 2010 08:20


Programm mit weniger Rechten starten
 
Hallo,

ich habe ein Programm das, per Manifest angefordert, immer mit erhöhten Rechten läuft. Dieses Programm muss nun eine andere EXE starten die aber "normale", also weniger, Rechte haben soll. Bei allen meinen Versuchen erbte die neu gestartete EXE natürlich die Rechte des aufrufenden Prozesses.

Kann mir jemand einen Tipp geben wie man beim Start eines anderen Programms dieses sozusagen "runter stufen" kann?

Danke schon mal,
Ralf

Bernhard Geyer 3. Mär 2010 08:30

Re: Programm mit weniger Rechten starten
 
Zitat:

Zitat von Alfi001
Bei allen meinen Versuchen erbte die neu gestartete EXE natürlich die Rechte des aufrufenden Prozesses.

Was hast du gemacht? Bei Aufruf mit ShellExecute werden Rechte nicht vererbt.

Ralf Kaiser 3. Mär 2010 08:39

Re: Programm mit weniger Rechten starten
 
Zitat:

Zitat von Bernhard Geyer
Zitat:

Zitat von Alfi001
Bei allen meinen Versuchen erbte die neu gestartete EXE natürlich die Rechte des aufrufenden Prozesses.

Was hast du gemacht? Bei Aufruf mit ShellExecute werden Rechte nicht vererbt.

Also wenn ich mit ShellExecute starte dann hat das gestartete Programm hinterher ebenfalls Adminrechte!! Ich habe dazu ein kleines Testprogramm gebaut das sich selbst per Buttonklick nochmal startet. In dem Programm zeige ich an, ob adminrechte vorliegen und ob das Programm im Status "elevated" ist.

Wenn ich das Programm mit Adminrechten starte dann erbt die 2.Instanz die Rechte (bei ShellExecute!!!)

himitsu 3. Mär 2010 08:45

Re: Programm mit weniger Rechten starten
 
In welchem OS hast'n das getestet und wie hast du die Rechte geprüft?

Ralf Kaiser 3. Mär 2010 08:50

Re: Programm mit weniger Rechten starten
 
Zitat:

Zitat von himitsu
In welchem OS hast'n das getestet und wie hast du die Rechte geprüft?

Im Moment Windows 7


Elevation hab ich mit einer Funktion aus der JCL getestet:

Delphi-Quellcode:
function IsElevated: Boolean;
const
  TokenElevation = TTokenInformationClass(20);
type
  TOKEN_ELEVATION = record
    TokenIsElevated: DWORD;
  end;
var
  TokenHandle: THandle;
  ResultLength: Cardinal;
  ATokenElevation: TOKEN_ELEVATION;
begin
  if (IsWinVista or IsWinServer2008 or IsWin7 or IsWinServer2008R2) then
  begin
    TokenHandle := 0;
    if OpenProcessToken(GetCurrentProcess, TOKEN_QUERY, TokenHandle) then
    begin
      try
        ResultLength := 0;
        if GetTokenInformation(TokenHandle, TokenElevation, @ATokenElevation, SizeOf(ATokenElevation), ResultLength) then
          Result := ATokenElevation.TokenIsElevated <> 0
        else
          Result := False;
      finally
        CloseHandle(TokenHandle);
      end;
    end
    else
      Result := False;
  end
  else
    Result := IsAdministrator;
end;
Das Ergebnis stimmt auch, bei einem UAC-bestätigten Start wird der Status korrekt erkannt.

Ralf Kaiser 3. Mär 2010 10:20

Re: Programm mit weniger Rechten starten
 
Ich habe jetzt, hier in der DP (wo sonst????), doch noch eine Möglichkeit gefunden:

Thread der sich mit "CreateProcessAsUser" befasst (Der Thread fängt zwar mit einem Problem an, die Lösung steht dann weiter unten...)


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:37 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz