Frage

Ich habe mich gefragt, ob es eine einfache Möglichkeit für einen Dienst gibt, einen Prozess in der Benutzersitzung zu erstellen?

Mein Dienst wird als Benutzerkonto (Administrator) ausgeführt und nicht als Lokalsystem ACOUNT. Daher kann ich die WTSQueryErertoken -Funktion nicht verwenden.

Ich habe versucht anzurufen

OpenProcessToken(GetCurrentProcess,TOKEN_ALL_ACCESS,TokenHandle);

Aber wenn ich dieses Token benutze, um zu laufen

 CreateProcessAsUser(TokenHandle,.....)

Mein Prozess wird noch in Sitzung 0 ausgeführt. Wie kann ich dieses Problem lösen?

Ich verwende eine Ole -Automatisierung, damit es mir egal ist, auf welcher Sitzung der Prozess ausgeführt wird, da es nicht die Sitzung 0 ist - da der OLE aus irgendeinem Grund seine Prozesse nicht erstellt (WinWord.exe für Instanz) in Sitzung 0, aber es schafft sie in anderen Benutzersitzungen.

Alle Vorschläge sind willkommen. Danke im Voraus.

War es hilfreich?

Lösung

Ich konnte dieses Problem selbst lösen, danke für alle, die sich diese Frage angesehen haben.

Ok, wie ich oben erwähnt habe - gehört das Token zu einem Prozess, der in Sitzung 0 ausgeführt wird ...

Was ich also getan habe ... sucht nach einem Token eines Prozesses, der in Sitzung 0 nicht ausgeführt wird. Wenn Sie seine Prozess -ID als Parameter für OpenProcessoken einnehmen. als der CreateRCessasuser erstellt den Prozess in derselben Sitzung (und wahrscheinlich mit denselben Crightals wie der von Ihnen gewählte Prozess);

Das Problem war, dass ich mithilfe der Funktion keine Details zu den meisten Prozessen erhalten konnte: Abfragenprozessimagename - weil es einen Fehler hat und nicht auf Prozessen funktioniert, die aus einem Pfad erstellt werden, der Räume enthält (wie C: C: Programmdateien zum Beispiel) und ein weiteres Problem mit dieser Funktion ist, dass ich, da ich den ursprünglichen Prozess mit einem Benutzercrächer ausführe, nicht auf die Informationen eines Prozesses zugreifen kann, der mit dem lokalen Systemkonto ausgeführt wird. Was ziemlich schlecht ist, weil ich den Winlogon.exe als meinen Prozess nehmen wollte (weil es eine neue geöffnete Sitzung angibt).

Auch um diesen Trick zu erfolgreich zu erfüllen, müssen Sie ein wenig mit der Sicherheit des Systems spielen, damit der Prozess nach einer erhöhten Sicherheit verlangen kann: Was ich entschieden habe, um erhöht zu werden, ist: SEDEBUGPRIVILEGE - zum Auffinden von Informationen über Die laufenden Prozesse SeassignPrimaryTokenPrivilege - Um einen neuen Prozess mit dem aus dem Benutzersitzungsprozess extrahierten Token auszuführen (dh Explorer.exe) SecreateTokenPrivilege - Ich weiß nicht, ob es benötigt wird, aber ich habe es trotzdem getan, weil es zusammenhört.

Um diese Berechtigungen zu erhöhen, müssen Sie den Benutzer, der den Prozess den zuständigen Benutzern in all diesen Berechtigungen ausführt, in run-> gpedit.msc oder run-> secpol.msc (unter lokaler Computerrichtlinie Computerkonfiguration Windows -Einstellungen Sicherheitseinstellungen LocalPolicies Benutzerrechtszuweisungen)

Fügen Sie Ihr Konto zu den folgenden Rechten hinzu (mit den oben genannten Vorräten):
Erstellen Sie ein Token -Objekt
Debugg -Programme
Ersetzen Sie einen Prozessstufe -Token

und das ist alles! :) Es hat großartig funktioniert! Übrigens, Sie möchten vielleicht alle UAC -Dinge deaktivieren ... Ich weiß nicht, ob es verwandt ist oder nicht, aber es hat die Arbeit mit 2008 weniger schmerzhaft gemacht - keine nervigen Popups mehr.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top