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 JWSCL: Prozess von Dienst starten im Benutzerkontext (https://www.delphipraxis.net/160343-jwscl-prozess-von-dienst-starten-im-benutzerkontext.html)

Zacherl 9. Mai 2011 12:40

JWSCL: Prozess von Dienst starten im Benutzerkontext
 
Hallo,

ich habe folgenden Code gefunden, welcher einen Prozess mit erhöhten Rechten aus einem Dienst heraus startet:
http://www.delphipraxis.net/793777-post29.html

Dies funktioniert soweit wunderbar, bis auf eine kleine Sache. Der Neue Prozess läuft im SYSTEM Kontext. Problemstellung ist ein unsigniertes Autostart Programm, welches zwingend Adminstratorrechte benötigt ohne UAC Fenster zu starten. Auf eingeschränkten Konten muss dies nicht funktionieren.

:arrow: Kenne mich auf dem Gebiet nicht besonders aus, aber ist es irgendwie möglich das Token so zu modifizieren / zu erstellen, dass der vom Service gestartete Child Prozess im Kontext des angemeldeten Benutzers ausgeführt wird?

Bisher entdeckte Probleme beim SYSTEM Kontext waren, z.b. falsche Rückgabe von GetUserName(). Gut, das ist bisher nichts Großartiges, aber ich vermute es könnten da durchaus noch weitere Probleme anfallen.

Viele Grüße
Zacherl

himitsu 9. Mai 2011 12:50

AW: JWSCL: Prozess von Dienst starten im Benutzerkontext
 
Das geht ja auch schon fast in diese Richtung
http://www.delphipraxis.net/160220-%...st-heraus.html
und von da kommt man dann hierhin
http://www.delphipraxis.net/109191-p...ich-mal-3.html :angle2:

Zacherl 9. Mai 2011 12:55

AW: JWSCL: Prozess von Dienst starten im Benutzerkontext
 
Das ist ja der Code, den ich gefunden habe und verwende :D

Hier wird zwar der Environment Block mit allen Benutzerpfaden wie %userprofile% und so weiter schön übernommen, bloß läuft der Child Prozess im SYSTEM Kontext und nicht in dem des Benutzers.

Sagen wir mal so: Wenn mir jemand, der sich auskennt, mit hoher Wahrscheinlichkeit vorraussagen kann, dass ich außer mit GetUserName() keine weiteren großartigen Probleme haben werde, dann bin ich auch zufrieden mit der jetzigen Lösung :)

Luckie 9. Mai 2011 13:08

AW: JWSCL: Prozess von Dienst starten im Benutzerkontext
 
Falsche Beutzerordner, falscher Registry Hive, falsche Benutzerrechte, ... Eben alles was dir mit einem falschen Benutzer passiert.

Zacherl 9. Mai 2011 13:23

AW: JWSCL: Prozess von Dienst starten im Benutzerkontext
 
Zitat:

Zitat von Luckie (Beitrag 1099703)
Falsche Beutzerordner, falscher Registry Hive, falsche Benutzerrechte, ... Eben alles was dir mit einem falschen Benutzer passiert.

Okay dann muss ich auf jeden Fall eine andere Lösung finden. Irgendwie muss es ja schließlich möglich sein den Prozess zwar UAC elevated aber im richtigen Benutzerkontext zu starten.

rollstuhlfahrer 9. Mai 2011 15:33

AW: JWSCL: Prozess von Dienst starten im Benutzerkontext
 
Also die angegebenen Funktionen bringen bei mir eine Anwendung zu Tage, die (WinXP) als Administrator (bin ich) läuft aus einem Dienst, der eindeutig unter System läuft. Außerdem stimmt bei mir auch der Environment-Block (Dienst schreibt den nämlich richtig in eine Log-Datei). Den Reg-Hive hab ich noch nicht getestet, aber da das auch unter Win7 läuft, denke ich mal, dass mein Code funktioniert hat.

Zitat:

Zitat von Zacherl (Beitrag 1099711)
Irgendwie muss es ja schließlich möglich sein den Prozess zwar UAC elevated aber im richtigen Benutzerkontext zu starten.

Das sollte das schwerere sein. Hat die Anwendung das richtige Manifest?


Bernhard

Zacherl 9. Mai 2011 15:45

AW: JWSCL: Prozess von Dienst starten im Benutzerkontext
 
Bei mir unter Win 7 64 Bit ist sowohl der Service als auch der neue Prozess unter SYSTEM im Taskmanager angezeigt. Der Child Prozess gibt SYSTEM auch bei GetUserName() zurück. Das Benutzerverzeichnis wird korrekt verwendet, der Registry Hive ist allerdings komplett falsch gesetzt, also unbrauchbar für mich.

Das ganze soll ohne Manifest und ohne Dialog ablaufen.

Ich habe gelesen, dass ein normales Token ab Vista immer ein LinkedToken besitzt. Wenn man dieses an CreateProcessAsUser() übergibt, SOLLTE der Prozess elevated gestartet werden. Das Problem ist nur, dass folgender Code:
Delphi-Quellcode:
Result := WTSQueryUserToken(WTSGetActiveConsoleSessionId, hUserToken);
  if (not Result) then Exit;
  Result := GetTokenInformation(hUserToken, TokenLinkedToken, @hLinkedToken,
    SizeOf(hLinkedToken), ReturnLength);
jedes Mal mit FehlerCode 1312 "A specified logon session does not exist. It may already have been terminated." abbricht. Eventuell liegt es daran, dass ich die UAC deaktiviert habe? Ich teste das gleich mal auf ner VM. Bin für weitere Vorschläge dankbar!

rollstuhlfahrer 9. Mai 2011 15:47

AW: JWSCL: Prozess von Dienst starten im Benutzerkontext
 
Leider kann ich das Problem nicht nachvollziehen. Alle Programme, die MEIN Dienst startet, sagen mir auch, dass sie unter dem aktuellen Benutzernamen laufen (höhere Rechte hab ich jetzt nicht geprüft).
Hast du vielleicht einen Fehler in deinem Code? - Hat CreateProcessAsUser das UNICODE-Flag? - Dump mal den Environment-Block. Steht da wenigstens alles richtig drin?

Bernhard

PS: Mit aktueller Benutzername ist auch gemeint, dass sowohl ProcessExplorer, TaskManager als auch GetUserName() das gleiche Ergebnis liefern.

Zacherl 9. Mai 2011 16:13

AW: JWSCL: Prozess von Dienst starten im Benutzerkontext
 
Fuuuuu :wall: Ich hätts wissen müssen. Das Ermitteln des LinkedTokens schlägt nur deshalb fehl, weil ich die UAC aus habe. Trotzdem vielen Dank an den aussagekräftigen Fehlercode Windows :x

Ich poste gleich mal einen funktionierenden Code mit ordentlicher Überprüfung:
http://www.delphipraxis.net/160355-s...xt-starten.htm

rollstuhlfahrer 9. Mai 2011 20:05

AW: JWSCL: Prozess von Dienst starten im Benutzerkontext
 
Zitat:

Zitat von Zacherl (Beitrag 1099784)
... weil ich die UAC aus habe.

Schäme dich dafür. ^^

Bernhard


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