Das Problem warum das Code-Beispiel so lang ist ist was anderes. Man kann über lpStartupInfo festlegen welcher WindowStation/Desktop ein Prozess zugeordnet wird. Allerdings muss der Benutzer bzw die LogonSession des Benutzers unter dem der Prozess lauft auch Zugriff auf die jeweilige WindowStation und den Desktop haben. Und damit das auch der Fall ist müssen die DACLs entsprechend angepasst werden...
Ich empfehle zu diesem Thema "Programming Windows Security" von Keith Brown.
Edit: schau dir mal das an:
http://www.pluralsight.com/keith/sec.../cmdasuser.zip
da is alles drinnen was du brauchst um einen Prozess unter einem anderen Benutzer zu starten..!