Pregunta

Me preguntaba si hay una manera sencilla para un servicio para crear un proceso de sesión de usuario?

Mi servicio se ejecuta como una cuenta de usuario (administrador) y no como un acount LocalSystem, por lo tanto, no puedo utilizar la función WTSQueryUserToken.

He intentado llamar

OpenProcessToken(GetCurrentProcess,TOKEN_ALL_ACCESS,TokenHandle);

Pero cuando se utiliza este símbolo para ejecutar

 CreateProcessAsUser(TokenHandle,.....)

mi proceso todavía se está ejecutando en la sesión 0. ¿Cómo puedo resolver este problema?

Estoy usando una automatización Ole, así que no me importa en qué sesión el proceso se ejecuta en, siempre que no sea la sesión 0 - porque el Ole desde alguna razón no crea sus procesos (winword .exe por ejemplo) en la sesión 0, sino que los crea en otras sesiones de usuario.

Cualquier sugerencia será bienvenida. Gracias de antemano.

¿Fue útil?

Solución

Me han sido capaces de resolver este problema a mí mismo, gracias a todos los que han mirado a esta pregunta.

La autorización, así como he mencionado anteriormente - el simbólico pertenece a un proceso que se está ejecutando en la sesión 0 ...

Así que lo que he hecho ... se busca una muestra de un proceso que no se está ejecutando en la sesión 0. cuando se toma es identificador de proceso como el parámetro para OpenProcessToken. que el CreateProcessAsUser creará el proceso en la misma sesión (y probablemente con los mismos cridentals como el proceso que ha elegido);

El problema era que yo no podía tener ningún obtener detalles sobre la mayoría de los procesos que utilizan la función: QueryFullProcessImageName - porque tiene un error, y que no funciona en la intervención en procesos que se crean a partir de una ruta que contiene espacios ( como C: \ archivos de programa, por ejemplo) y otro problema con esa función, supongo que es porque estoy corriendo el proceso original usando un cridentals usuario no puede acceder a la información de un proceso que se ejecuta utilizando la cuenta del sistema local. que es bastante malo porque quería tomar el winlogon.exe como mi proceso (ya que indican una nueva sesión abierta).

También con el fin de succeeed en ese truco, hay que jugar un poco con la seguridad del sistema, con el fin de permitir que el proceso para pedir seguridad elevada: lo que he elegido para ser elevada por es: SeDebugPrivilege - para encontrar información sobre los procesos que se ejecutan SeAssignPrimaryTokenPrivilege - con el fin de ejecutar un nuevo proceso con el token extraje del proceso de sesión de usuario (es decir explorer.exe) SeCreateTokenPrivilege - no sé si es necesario, pero lo hice de todos modos porque suena relacionado

.

con el fin de tener éxito en la elevación de esta privilegios - debe agregar el usuario que ejecuta el proceso a los usuarios relevantes en todo esto privilegios de Run-> gpedit.msc Run-> secpol.msc o (bajo Directiva de equipo local \ configuración del equipo \ Windows \ configuración de seguridad \ LocalPolicies \ Asignación de derechos de usuario)

añadir a su cuenta los siguientes derechos (compaitable con los previleges arriba):
Crear un objeto testigo
Programas de depuración
Reemplazar un testigo de proceso

y eso es todo! :) que ha estado trabajando Gran! Por cierto, es posible que desee desactivar todas las cosas UAC ... no sé si está relacionado o no, pero se ha hecho el trabajo con menos dolorosas 2008 -. No hay ventanas emergentes más molestos

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