ich kann mich noch dunkel erinnern, wie es UltraVNC macht.
1. Service installieren (TCB) und Thread erstellen
2. Eingabedesktop suchen (OpenInputDesktop) und für Thread setzen (SetThreadDesktop)
3. GetPixel(GetDC(Null)) verwenden um Pixel zu lesen.
Problem : Funktioniert nicht mehr unter Vista, weil SystemDienste nun in einer eigenen Session 0 (nicht interaktiv) laufen.
Was kann man machen?
A. Mirror Treiber
B. Über Einschleussen von Prozessen in die interaktive Sitzung (für jeden Desktop, auch wenn er später erstellt wird)
Kommunikation über Pipes, Shared Memory, Sockets oder RPC.
Keine Gewähr zur Funktion!
P.S.
Ich frage mich gerade, ob mit Session, LogonSession gemeint ist oder WinStation oder was anderes?
Kennt jemand eine grafische Darstellung, wie Sessions (evt. LogonSessions), WinStation und Desktops in Beziehung stehen?
Zu B.
Wenn Session = LogonSession könnte man ja auch einen Thread in die Session 1 oder höher impersonieren, und damit auf den Desktop zugreifen können.
siehe diesen
MSDN Artikel zu
FUS