Tengo una aplicación que se ejecuta como usuario normal y un servicio que se ejecuta como sistema local. Quiero que la aplicación pueda decirle al servicio que vuelva a iniciar la aplicación, una vez que el servicio haya hecho otras cosas. (De modo que la aplicación no se ejecutará mientras el servicio lo está haciendo). Para que el servicio pueda iniciar la aplicación como el usuario que la inició por primera vez, necesita un token de usuario. La aplicación envía el token al servicio antes de que se cierre, pero el token/handle no es válido cuando el servicio intenta usarlo. (Lo primero que hace con él es DuplicateTokenEx para obtener un token primario.)¿Cómo obtengo un token de usuario válido para CreateProcessAsUser?
¿Es un token de usuario siempre solo válido en el proceso que llamó OpenProcessToken?
¿Hay alguna otra manera de que esto se pueda hacer? No quiero que el usuario tenga que "iniciar sesión" en la aplicación con logonuser. Eso sería simplemente tonto. Supongo que podría entregar un identificador de proceso para "explorer.exe" de la aplicación al servicio, que el servicio podría usar para obtener un token de usuario, pero eso requeriría el derecho PROCESS DUP HANDLE. No estoy entusiasmado con esa solución, pero tal vez es la forma de hacerlo?
Gracias, voy con el primer artículo, creando un token con ZwCreateToken. Es un poco complicado empacar todo lo que necesito en un mensaje, pero aparentemente ha funcionado para otros ... –
El primer artículo parece tener algunos errores, el segundo parece bastante bueno.Pero no estoy seguro de por qué usaría ZwCreateToken (un método no documentado, no compatible y no del todo estable) cuando existen métodos documentados para hacer lo que desea. –
Lo siento, quise decir segundo. Ni siquiera pude encontrar el primero. Estoy haciendo algo como http://www.apnilife.com/E-Books_apnilife/Windows%20Programming_apnilife/Windows%20NT%20Undocumented%20APIs/1996%20Ch08_apnilife.pdf. ¿Está refiriéndose a CreateToken? –