Laden...

Dienst - CreateProcessAsUser als lokaler Admin in einer Benutzersitzung

Erstellt von niceGuy vor einem Jahr Letzter Beitrag vor einem Jahr 460 Views
N
niceGuy Themenstarter:in
8 Beiträge seit 2022
vor einem Jahr
Dienst - CreateProcessAsUser als lokaler Admin in einer Benutzersitzung

Hallo zusammen,

Situation
Ein Windows Dienst läuft als SYSTEM im Hintergrund.
Der Dienst soll in einer aktiven Benutzersitzung eine Applikation starten.
Diese Applikation soll mit den Rechten eines ++dritten ++Benutzers gestartet werden.

Beteiligte
SYSTEM: Der Dienst ist standardmässig installiert ohne jegliche Spezialkonfiguration
Benutzer A: Angemeldet mit einer eigenen Windows Sitzung. Seine SessionID wird verwendet um darin eine Applikation unter dem Benutzer B zu starten.
Benutzer B: Wird mit

LogonUser

an Windows angemeldet. Sein Token wird dann für

CreateProcessAsUser

verwendet.

Aktueller Stand
Ich habe eine Funktion geschrieben welche eine Applikation in der Benutzersitzung starten kann.
Diese erwartet Parameter wie: applicationName, commandline und die impersonation Informationen.

Was läuft?
Der Start einer Applikation aus einem Dienst heraus in eine laufende Benutzersitzung. Die Applikation läuft unter dem SYSTEM Konto oder unter dem gleichen Konto wie der angemeldete Benutzer.

Was geht nicht?
Der Start einer Applikation aus einem Dienst heraus in eine laufende Benutzersitzung. Die Applikation läuft unter einem weiteren Benutzerkonto.

Der aktuelle Code liegt im Anhang.

Vielen Dank für Eure Hilfe!

N
niceGuy Themenstarter:in
8 Beiträge seit 2022
vor einem Jahr
So wird der Code aufgerufen

// = Prepare callback
helper.AppLauncher.PROCESS_INFORMATION procInfo;

// = Prepare impersonation
helper.AppLauncher.ImpersonationInfo impersonationInfo = new helper.AppLauncher.ImpersonationInfo();

// = 2: Start a process as specified user
impersonationInfo.LogonType = 2;        // Service = 0, CurrentUser = 1, LogonUser = [2]
impersonationInfo.LogonName = "derLokaleBenutzermitAdminrechten";
impersonationInfo.LogonPassword = "meinGeheimesP@sswort";
helper.AppLauncher.StartProcessInCurrentUserSession("cmd.exe", null, true, impersonationInfo, out procInfo);

Wenn ich das so ausführe, dann erhalte ich eine gestartete CMD.exe aber diese kann nicht bedient werden:
--> Siehe Screenshot