Das CreateToken Privileg, welches für ZwCreateToken benötigt wird, ist ab Vista nicht mehr automatisch einem Dienst gegeben.
Außerdem, RunAsSys von
JEDI funktioniert auch ohne.
ShellExecute sollte man nicht von einem Dienst aus nutzen, sondern stattdessen einen Prozess in die Session starten mit WTSGetActiveConsoleSession->WTSQueryUserToken->CreateProcessAsUser und dort dann nutzen.