CreateProcessAsUser vs ShellExecute

necesitoShellExecute algo como otro usuario, actualmente comienzo un proceso auxiliar conCreateProcessAsUser eso llamaShellExecute, pero eso parece demasiado hack (proceso padre incorrecto, etc.) ¿Hay una mejor manera de hacer esto?

@PabloG: ImpersonateLoggedOnUser no 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);

simplemente iniciará calc como el usuario conectado, no "otro usuario"

@ 1800 INFORMACIÓN:CreateProcess/CreateProcessAsUser no es lo mismo queShellExecute, con UAC en Vista,CreateProcess es inútil cuando no tienes control sobre qué programa está ejecutando el usuario (CreateProcess volverá con un error si le da un archivo exe con un manifiesto marcado como requireAdmin)

@Brian R. Bondy: Ya conozco esta información (y no me malinterpreten, es algo bueno), pero está fuera de tema (en mi humilde opinión), estoy pidiendo unShellExecuteAsUser, no se trata de iniciar procesos como otro usuario, ya sé cómo hacerlo.

Respuestas a la pregunta(4)

Su respuesta a la pregunta