Pregunta

Desde el sitio web de Microsoft (ver msdn.microsoft. com / es-es / library / ms683502 (VS.85) .aspx ) que claramente dice "Los servicios no pueden interactuar directamente con un usuario como de Windows Vista".

Así que decidí probar esto mediante el uso de "psexec -s cmd.exe". Por lo que yo sé, "psexec" crea un servicio con el fin de abrir un símbolo del sistema. No hace falta decir que funcionó. Entonces me decidí a utilizar "EnumWinSta GUI" en combinación con psexec a cambiar al escritorio Winlogon. Para mi sorpresa, podría incluso comenzar "cmd.exe" en este escritorio. ¿Significa esto un nuevo proceso creado a partir de un servicio puede ser interactivo?

O es porque psexec hace algún tipo de magia negro? Si es así, ¿cómo lo hace?

Estoy tratando de mostrar una ventana de pantalla completa de un servicio en el objeto de escritorio Winlogon en Vista, así como XP.

¿Fue útil?

Solución

código que se ejecuta dentro de un servicio no puede interactuar directamente con una sesión interactiva.

Sin embargo, el código se ejecuta como un servicio con privilegios suficientes puede crear un nuevo proceso que se ejecuta en el escritorio de un usuario específico - conseguir token y llamando CreateProcessAsUser del usuario de la sesión interactiva, por ejemplo

.

Puede utilizar WTSGetActiveConsoleSessionID para obtener la sesión de consola activa, la sesión del usuario que está realmente en la máquina. WTSQueryUserToken continuación, se puede utilizar para obtener el token.

Su servicio también se puede utilizar notificaciones de cambio de sesión en su función de controlador para ver cuando los usuarios inician sesión / cierre de sesión, desbloquear la sesión, y así sucesivamente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top