ImpersonateLoggedOnUser e iniciar un nuevo proceso que utiliza OCX falla
Pregunta
I escribir una aplicación Windows de C ++ (A), que utiliza LogonUser, LoadUserProfile y ImpersonateLoggedOnUser para obtener los derechos de otro usuario (Y). Es decir, la A comienza con el usuario que ha iniciado sesión en la estación de trabajo (X). Si el usuario quiere elevar sus derechos que sólo puede presionar un botón y de inicio de sesión como otro usuario sin tener que conectarse a sí mismo fuera de las ventanas y de nuevo.
La situación actual es (de acuerdo con los valores de retorno de las funciones): funciona LogonUser, LoadUserProfile funciona y ImpersonateLoggedOnUser funciona tan bien
.Después de la suplantación de empezar otro proceso. Este proceso es una aplicación (B) que necesita un control OCX. Esta falla y la aplicación me dice que el archivo .oxc no está instalado correctamente.
La cosa es, si comienzo B directamente como el usuario que ha iniciado sesión en la máquina (X), funciona. Si comienzo B directamente como el usuario (Y) a la que quiero elevar mis derechos usando A, funciona.
Si estoy conectado como (X) y seleccione "Ejecutar como" (Y) en el explorador, funciona!
¿Usted sabe qué pasos tengo que hacer para hacer lo mismo que el "Ejecutar como" de diálogo de las ventanas?
Solución 2
Gracias a todos por su ayuda.
El siguiente fue capaz de resolver el problema para mí:
Comienzo el proceso deseado usando CreateProcessWithLogonW () .
Para conseguir que la función de funcionar correctamente tengo que RevertToSelf () antes de que llame y haga la suplantación de nuevo después.
Así que la secuencia es ahora:
LogonUser()
LoadUserProfile()
ImpersonateLoggedOnUser()
// work with the app
RevertToSelf()
CreateProcessWithLogonW()
// do the impersonation stuff again
Otros consejos
No estoy seguro, pero parece que no es suficiente suplantación - suplantación se refiere únicamente al procedimiento (A), en lugar de tratar con CreateProcess ProcessAttributes / ThreadAttributes establece explícitamente en usuario suplantado de ACL de Windows'