CreateProcessAsUser vs ShellExecute

eu precisoShellExecute algo como outro usuário, atualmente inicio um processo auxiliar comCreateProcessAsUser que chamaShellExecute, mas isso parece muito complicado (processo pai errado etc.) Existe uma maneira melhor de fazer isso?

@PabloG: ImpersonateLoggedOnUser não funciona:

HANDLE hTok;
VERIFY(LogonUser("otheruser",0,"password",LOGON32_LOGON_INTERACTIVE,LOGON32_PROVIDER_DEFAULT,&hTok));
VERIFY(ImpersonateLoggedOnUser(hTok));
ShellExecute(0,0,"calc.exe",0,0,SW_SHOW);
RevertToSelf();
CloseHandle(hTok);

irá apenas iniciar o calc como o usuário logado, não "otheruser"

@ 1800 INFORMAÇÃO:CreateProcess/CreateProcessAsUser não é o mesmo queShellExecute, com o UAC no Vista,CreateProcess é inútil quando você não tem controle sobre o programa que o usuário está executando (CreateProcess retornará com um erro se você fornecer um arquivo exe com um manifesto marcado como requireAdmin)

@ Brian R. Bondy: Eu já conheço essa informação (e não me entenda mal, é uma coisa boa), mas está fora de tópico (IMHO), estou pedindo umaShellExecuteAsUser, não sobre iniciar processos como outro usuário, eu já sei como fazer isso.