Am besten verwendest du
CreateProcessAsUser. Dies verwendest du folgendermaßen:
1. Hole dir mit
WTSQueryUserToken das Token des aktuell angemeldeten Benutzers - du willst dein Programm vermutlich nicht mit den Rechten des Diensts starten lassen. Falls doch, kannst du einfach mit
DuplicateToken das Token des Diensts duplizieren. Beachte, dass du für WTSQueryUserToken als System laufen musst, da du sonst kaum das TCB-Privileg haben wirst.
2. Setze mit
SetTokenInformation die Session-ID des Tokens auf
WTSGetActiveConsoleSessionId - damit erreichst du, dass das Programm auch mit dem Benutzer interagieren kann.
3. Starte mit CreateProcessAsUser dein Programm. In der STARTUPINFO-Struktur solltest du lpDesktop auf WinSta0\Default setzen, damit das Programm auf dem normalen Desktop landet.
Diese Hinweise sind nicht getestet.