Ganz konkret:
- Zwei Benutzer, "localUser" und "localAdmin". Ersterer gehört nicht zur Gruppe "Administratoren", letzterer schon
- Eine aktive Sitzung im Benutzer "localUser". Der Benutzer doppelklickt unseren Prozess
- Der Prozess hat in seinem Manifest, wie wohl so ziemlich jeder,
Delphi-Quellcode:
requestedExecutionLevel
level="asInvoker"
- Der Prozess soll nun das Verzeichnis C:\Program Files\Watzn erstellen.
Kann er das?
asInvoker bezieht sich auf
UAC, welches bekanntlich nur wenig mit Sicherheit zu tun hat (siehe auch
hier).
Bei standardmäßig gesetzten Zugriffslisten (ACLs) sollte das nicht erfolgreich sein. Aaaaber, es gibt noch die
UAC File Virtualization (der entsprechende Minifilter kann per fltmc unter dem Eintrag luafv gefunden werden), welche den Zugriff transparent auf einen anderen Ordner umleitet auf den der (unprivilegierte) Anwender sehr wohl Zugriff hat (
UAC muß dafür natürlich aktiviert sein).
Ich weiß also noch immer nicht, ob es dir um Admin (entsprechende Benutzerrechte und Gruppenzugehörigkeit), oder um Elevation (
UAC) oder um Mandatory Integrity Control (MIC) geht.
Dein Beitrag liest sich so als ginge das.
Unter der genannten Bedingung kann das gehen, ja.
Dein Delphicode sollte auch das tun was man annimmt, da sich der Admin ja über LogonUser dem System gegenüber ausweist. Kommt natürlich auf die involvierten Integrity-Level an. Sprich: zwar kann ein einzelner Thread "Admin werden", aber er unterliegt trotzdem noch MIC.
Selbst bei TeamViewer kann man das beobachten: Der Benutzer führt einen TeamViewer-QuickSupport aus. Authentifiziert sich jemand von außen mit den Kontodaten eines Administrator-Accounts startet TeamViewer sich selbst noch einmal und beendet sich dann. So kannte ich es bislang.
Genau, das klingt jetzt wiederum stark nach MIC.