Keine Ahnung.
Via
SetThreadDesktop kann man jedenfalls den Desktop umschalten, aber nur, wenn vorher noch keine Komponente (CreateWindow und sowas) in diesem Thread erstellt wurde. Egal, ob die inzwischen noch existieren, oder ob sie schon wieder freigegeben wurden. (Vermutung: Beim ersten Erstellen wird die Queue eingerichtet beim Umschalten darf es noch Keine geben)
Bei Services, sind die, seit einer Weile, vom Desktop getrennt und man muß beim Service, oder beim Installieren des Service, explizit angeben, ob der Service Interaktionen mit dem Benutzer machen darf. (also z.B. Dialoge anzeigen)
Ansonsten ist das dem Service einfach verboten.
Und bei SetThreadDesktop steht auch noch "desktop apps only".
Im Prinzip kann man so einen Thread starten, darin erstellt man einen eigenen Desktop, switcht den Thread auf diesen Desktop um, erstellt ein Fenster
und kann nun den Desktop umschalten. (danach Desktop wieder zurückschalten und natürlich Dialog und Desktop löschen)
Und schon hätte man seinen eigene "geschützten" Desktop, für z.B. eigene "sichere" Benutzerrückfragen, welche nur vom Benutzer gelesen und bedient werden können und nicht von irgendwelchen "bösen" Anwendungen, wenn man anderen Anwendungen/Threads den Zugriff auf diesen Desktop verbietet.