Zitat von
NicoDE:
Ja und nein.
Ja, weil Dienste auch in einem Desktop-Objekt einer WindowStation ausgeführt werden und weil jeder Thread (auch ohne Fenster) eine Message-Queue haben kann.
Nein, weil Du wahrscheinlich versuchen willst, mit dem Fenster vom interaktiven Desktop aus (womit einer der aktuellen Benutzer arbeitet) zu kommunizieren. Das wird deshalb schwierig, weil Fenster-Nachrichten auf den aktuellen Desktop beschränkt sind. Zudem sollten Dienste, welche unter dem Systemkonto ausgeführt werden (aus Sicherheitsgründen) nicht 'interaktiv' (eine Verbindung zum interaktiven Desktop) sein - und somit werden sie in einem eigenen, nicht-interaktiven Desktop ausgeführt.
Sollte man das nicht insofern einschränken, als ein Dienst zwar nicht das Flag "Interaktiv" tragen sollte, jedoch ein Zugang über das Anpassen des WinSta/Desktop-
ACL durchaus legitim ist?! Gegebenenfalls kann man sogar über Impersonation zusätzlich Sicherheit einbauen. Dazu sollte es schon reichen, wenn die Hook-
DLL von einem Thread geladen wird, welcher unter anderem Benutzerkontext läuft.
Die meisten scheuen es doch nur, weil die APIs zum Modifzieren der ACLs, SDs usw. usf. etwas friemelig sind
Ich vergaß die Stichworte:
-
SetThreadDesktop (mit Beispiel "Interacting with the User in a Service").
-
OpenDesktop
-
SetProcessWindowStation (mit Beispiel "Interacting with the User in a Service").
-
SetSecurityInfo
-
SetNamedSecurityInfo