Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi ShellExecute vererbt (neuerding?) Admin-Rechte (https://www.delphipraxis.net/182440-shellexecute-vererbt-neuerding-admin-rechte.html)

Bernhard Geyer 24. Okt 2014 10:12

ShellExecute vererbt (neuerding?) Admin-Rechte
 
Ich verwende schon ewig ShellExecute um eine andere Exe zu starten.
Und ich bin mir fast zu 100% sicher das früher das Admin-Recht nicht vererbt hat.

Also eine (Installer-)Exe die Adminrechte hat starte mit ShellExecute eine zweite Exe. Diese hatte immer keine Adminrechte.
Jetzt scheint es aber so zu sein das sich hier die WinAPI geändert hat und der neue Prozess Adminrechte hat.

Die Frage ist nun: Wie startet man korrekt eine andere Exe ohne das die Rechte vererbt werden. Der gestartete Prozess soll nur die Rechte bekomme die er hätte wenn sein Icon auf dem Desktop gestartet wird?

DeddyH 24. Okt 2014 10:18

AW: ShellExecute vererbt (neuerding?) Admin-Rechte
 
Ich finde es auf die Schnelle nicht wieder, aber IIRC gab es im Bezug auf die Rechte einen Unterschied, ob man ShellExecute oder CreateProcess benutzt.

Bernhard Geyer 24. Okt 2014 10:20

AW: ShellExecute vererbt (neuerding?) Admin-Rechte
 
Zitat:

Zitat von DeddyH (Beitrag 1277275)
Ich finde es auf die Schnelle nicht wieder, aber IIRC gab es im Bezug auf die Rechte einen Unterschied, ob man ShellExecute oder CreateProcess benutzt.

Bei CreateProcess wurden die Rechte (immer?) vererbt. Bei ShellExecute nicht (hier wird die Shell beauftragt den Prozess zu starten).
Jedenfalls war ich bisher immer Felsenfest davon überzeugt das es so ist.

mkinzler 24. Okt 2014 10:30

AW: ShellExecute vererbt (neuerding?) Admin-Rechte
 
Ist das System vollständig gepacht?
https://technet.microsoft.com/library/security/ms14-027

hathor 24. Okt 2014 10:32

AW: ShellExecute vererbt (neuerding?) Admin-Rechte
 
Weil SHELLEXECUTE keine Rechte erbt, gibt es RUNASADMIN mit SHELLEXECUTEEX:
Das damit gestartete Programm hat dann die mitgegebenen Rechte.

Delphi-Quellcode:
// RunAsAdmin(Handle, ExtractFilepath (Application.ExeName) + 'FileAccessCopy.exe', strParams);
procedure RunAsAdmin(hWnd: HWND; aFile: string; aParameters: string);
var sei: TShellExecuteInfo;
begin
     FillChar(sei, SizeOf(sei), 0);
     sei.cbSize := sizeof(sei);
     sei.Wnd := hWnd;
     sei.fMask := SEE_MASK_FLAG_DDEWAIT or SEE_MASK_FLAG_NO_UI;
     sei.lpVerb := 'runas';
     sei.lpFile := PChar(aFile);
     sei.lpParameters := PChar(aParameters);
     sei.nShow := SW_HIDE; // SW_SHOWNORMAL; SW_HIDE;
     if not ShellExecuteEx(@sei) then RaiseLastOSError;
end;

mkinzler 24. Okt 2014 10:36

AW: ShellExecute vererbt (neuerding?) Admin-Rechte
 
das geht auch mit dem normalen ShellExecute mit 'runas' statt 'open'.
Aber sein Problem ist ja genau das Gegenteil, Rechte werden vererbt, was er nicht will.

Bernhard Geyer 24. Okt 2014 10:46

AW: ShellExecute vererbt (neuerding?) Admin-Rechte
 
Zitat:

Zitat von hathor (Beitrag 1277281)
Weil SHELLEXECUTE keine Rechte erbt, gibt es RUNASADMIN mit SHELLEXECUTEEX:

Das ist ja das Problem. ShellExecute vererbt ja die Elevation.


Hab da einen Eintrag gefunden der das Problem beschreibt: http://sourceforge.net/p/nsis/feature-requests/520/

Und im Verlinkten Blog-Eintrag http://blogs.msdn.com/b/aaron_margos...vated-app.aspx gibt ein Beispielprojekt das eine 100 (!) Zeilen-Lösung aufzeigt eben das nicht zu vererben.

Bernhard Geyer 24. Okt 2014 10:52

AW: ShellExecute vererbt (neuerding?) Admin-Rechte
 
Bei MS gibt auch einen Eintrag: http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx

Leider wurden die Links auf dem Server wieder alle umgestellt so das man das einfache Beispiel nicht mehr findet. :cry:
Und jetzt das SDK zu installieren wollte ich vermeiden ...

himitsu 24. Okt 2014 10:59

AW: ShellExecute vererbt (neuerding?) Admin-Rechte
 
Beim Befehl (nicht Operation) RUNAS kann man auch den Benutzer angeben, welcher natürlich nicht unbedingt der Administrator sein muß.

Ansonsten halt CreateProcess, mit einem Token der Rechte des Benutzers.

Bernhard Geyer 24. Okt 2014 11:06

AW: ShellExecute vererbt (neuerding?) Admin-Rechte
 
Zitat:

Zitat von himitsu (Beitrag 1277288)
Beim Befehl (nicht Operation) RUNAS kann man auch den Benutzer angeben, welcher natürlich nicht unbedingt der Administrator sein muß.

Und wie genau? Normal gibt man ja nur "runas" an. Aber wie gibt man "runas 'mit Useraccount mit der Installer gestartet wurde'"

OK. Befehl(!) überlesen ....


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:11 Uhr.
Seite 1 von 2  1 2      

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