2009-05-20 5 views
1

Auf der Microsoft-Website (siehe msdn.microsoft.com/en-us/library/ms683502(VS.85).aspx) heißt es eindeutig "Dienste können nicht direkt mit einem Benutzer als Windows Vista interagieren".Können Benutzer mit Diensten direkt auf Microsoft Vista interagieren?

Also entschied ich mich, dies zu testen, indem Sie "psexec -s cmd.exe" verwenden. Soweit ich weiß, erstellt "psexec" einen Dienst, um eine Eingabeaufforderung zu öffnen. Unnötig zu sagen, dass es funktioniert hat. Ich entschied mich dann, "EnumWinSta GUI" in Kombination mit psexec zu verwenden, um zum winlogon Desktop zu wechseln. Zu meiner Überraschung konnte ich sogar "cmd.exe" auf diesem Desktop starten. Bedeutet dies, dass ein neuer Prozess, der aus einem Service erstellt wurde, interaktiv sein kann?

Oder ist es, weil psexec irgendeine Art von schwarzer Magie tut? Wenn ja, wie macht es das?

Ich versuche, ein Vollbild-Fenster von einem Dienst in das Winlogon-Desktop-Objekt in Vista sowie XP anzuzeigen.

+1

Warum möchten Sie den Winlogon Desktop mit einem Vollbildfenster verdecken? Das klingt wie Malware versucht, die Anmeldebenutzeroberfläche zu fälschen. – Michael

+0

Es ist für Notfallbenachrichtigungen wie ein Feuer im Gebäude ... –

Antwort

3

Code, der in einem Dienst ausgeführt wird, kann nicht direkt mit einer interaktiven Sitzung interagieren.

Code, der als Dienst mit ausreichenden Berechtigungen ausgeführt wird, kann jedoch einen neuen Prozess erstellen, der auf dem Desktop eines bestimmten Benutzers ausgeführt wird. Beispielsweise wird das Token der interaktiven Sitzung abgerufen und CreateProcessAsUser aufgerufen.

Sie können WTSGetActiveConsoleSessionId verwenden, um die aktive Konsolensitzung abzurufen, die Sitzung des Benutzers, der sich tatsächlich auf dem Computer befindet. WTSQueryUserToken kann dann zum Abrufen des Tokens verwendet werden.

Ihr Dienst kann in seiner Handlerfunktion auch Sitzungsänderungsbenachrichtigungen verwenden, um zu sehen, wann sich Benutzer an-/abmelden, ihre Sitzung entsperren usw.

+0

Wie bekomme ich das Benutzer-Token der interaktiven Sitzung? –