Hola
yelian.
La forma más sencilla de realizar un "ejecutar como" es usar
ShellExecute con un truquito. Utilizar en el parámetro
lpOperation la opción no documentada "runas":
Código:
ShellExecute(NULL, "runas", "Notepad", 0, NULL, SW_SHOWNA);
Pero para lo que tu pretendes tenemos dos opciones más potentes, las APIs
CreateProcessWithLogonW y
CreateProcessAsUser. Personalmente creo que es más fácil de usar la primera:
Código:
PROCESS_INFORMATION piProcInfo;
STARTUPINFOW siStartInfo;
// Set up members of STARTUPINFO structure.
ZeroMemory(&siStartInfo, sizeof(STARTUPINFO));
siStartInfo.cb = sizeof(STARTUPINFO);
HRESULT hRes = CreateProcessWithLogonW(
L"User", // El usuario
L".", // El dominio
L"Password", // El password
LOGON_WITH_PROFILE,
NULL,
L"Notepad.exe", // Nombre de la aplicación
NULL, // flags
NULL, // entorno
L"C:\\", // use parent's current directory
&siStartInfo, // puntero STARTUPINFO
&piProcInfo // PROCESS_INFORMATION (valor devuelto)
);
Espero que esto sea lo que buscas.
Saludos.