Frage

Von der Microsoft-Website (siehe msdn.microsoft. com / en-us / library / ms683502 (VS.85) aspx ) es sagt klar "Service mit einem Benutzer ab Windows Vista nicht direkt interagieren kann."

Also habe ich beschlossen, dies zu testen, indem Sie „psexec es cmd.exe“. Soweit ich weiß, „psexec“ erstellt einen Dienst, um eine Eingabeaufforderung zu öffnen. Unnötig zu sagen, es hat funktioniert. Ich habe dann beschlossen, mit psexec zum winlogon Desktop wechseln „EnumWinSta GUI“ in Kombination zu verwenden. Zu meiner Überraschung konnte ich sogar „cmd.exe“ auf diesem Desktop starten. Bedeutet dies, einen neuen Prozess von einem Dienst erstellt wird, kann interaktiv sein?

Oder ist es, weil psexec eine Art von schwarzer Magie tut? Wenn ja, wie es es tut?

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

War es hilfreich?

Lösung

-Code innerhalb eines Dienstes ausgeführt wird, kann nicht direkt mit einer interaktiven Sitzung in Wechselwirkung treten.

Allerdings Code als Dienst mit ausreichenden Rechten ausgeführt wird, kann einen neuen Prozess innerhalb eines bestimmten Benutzers Desktop ausgeführt erstellen - die interaktiven Sitzung des Benutzers Token und riefen CreateProcessAsUser bekommen, zum Beispiel

.

Sie kann WTSGetActiveConsoleSessionId verwenden, um die aktive Konsolensitzung zu bekommen, um die Sitzung des Benutzers, der tatsächlich an der Maschine ist. WTSQueryUserToken kann dann verwendet werden, um das Token zu erhalten.

Ihr Dienst kann auch Sitzungsänderungsbenachrichtigungen in seiner Handler-Funktion verwenden, um zu sehen, wenn Benutzer / Abmelde anmelden, entsperren ihre Sitzung, und so weiter.

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