Puh. Das ist etwas komplexer. Unter Windows NT / 2000 / XP gibt es so genannte
Windows Stations und diese beinhalten
Desktops. Genau wie Windows bei der Authenmtifizierung session orientiert vorgeht, geht es auch beim User Interface sessionen orientiert vor mittles Windows Stations. Damit nicht jedes
GDI Objekt jedes mal an die Authetifizierung gebunden ist, stellt Windows eine geschütze Umgebung bereit, in dem ein
GDI Objekt existieren kann, ohne sich jedes mal authentifizieren zu müssen. Und dies ist eine Windows Station. Der Sicherheitbeschreiber eines Objektes ist dann mit einer Windows Sation verbunden und erlaubt es so seinem Besitzer bestimmte Aspekte seiner Umgebung zu kontrollieren. Zum Beispiel das Erstellen von Fenstern, Menüs und Desktops oder die Zwischenablage einzusehen.
Eine Windows Station ist also so was wie eine Sandbox für Fenster. Wann immer ein Fenster erstellt wird, ist es für immer an diese Windows Station gebunden. Demzufolge können Fenster in anderen Windows Stations nicht auf Fenster in anderen Windows Stationen zugreifen.
Im System gibt es jetzt nur eine interaktive Windows Station für den Benutzer und das ist die WinSta0. In dieser Windows Station befindet sich auch der default Desktop auf dem sich der Benutzer bewegt. Ein Service hat nun weitergehende Rechte als ein Benutzer und läuft demnach in einer anderen Windows Station, die ihm mehr Rechte zu gesteht. Jetzt kann man einen interaktiven Service schreiben, dieser Service hat dann außnahmsweise die Möglichkeit mit der interaktiven Windows Station des Benutzers zu kommunizieren mittels eines Fensters. Und jetzt wird auch das Sicherheitsloch deutlich bei einem interaktiven Service, gelingt es mir Code in den Service einzuschleusen, durch einen BufferOverflow zum Beispiel, wird dieser Code im Sicherheitskontext des Services ausgeführt und das ist potentiell gefährlich.
Dies ist auch die Erklärung warum man zum Beispiel mit FindWindow nicht das Fenster findet, welches erscheint, wenn man unter Windows 2000 Strg+Alt+Entf drückt, es läuft auf einem anderen Desktop. Oder warum es problematisch ist mit EnumWindows in einem Sevice Fenster auf dem Desktop des Benutzers aufzulisten.
Ich hoffe, das war ausführlich und verständlich genug.