Pergunta

A partir do site da Microsoft (ver msdn.microsoft. com / en-us / library / ms683502 (VS.85) .aspx ) diz claramente "serviços podem não diretamente interagir com um usuário como do Windows Vista".

Então eu decidi testar isso usando "psexec -s cmd.exe". Tanto quanto eu sei, "psexec" cria um serviço, a fim de abrir um prompt de comando. Escusado será dizer que ele trabalhou. Eu, então, decidiu usar "EnumWinSta GUI" em combinação com psexec para mudar para o ambiente de trabalho de início de sessão. Para minha surpresa, eu poderia até mesmo começar "cmd.exe" neste desktop. Será que isso significa um novo processo criado a partir de um serviço pode ser interativo?

Ou é porque psexec faz algum tipo de magia negra? Se sim, como ele faz isso?

Eu estou tentando exibir uma janela de tela cheia de um serviço para o objeto de ambiente de trabalho de início de sessão no Vista, assim como XP.

Foi útil?

Solução

código em execução dentro de um serviço não pode diretamente interagir com uma sessão interativa.

No entanto, o código em execução como um serviço com privilégios suficientes pode criar um novo processo em execução dentro desktop de um usuário específico -. Recebendo token e chamando CreateProcessAsUser do usuário da sessão interativa, por exemplo

Você pode usar WTSGetActiveConsoleSessionID para obter a sessão de console ativa, a sessão do usuário que é realmente na máquina. WTSQueryUserToken pode então ser usado para obter o token.

O serviço também pode usar notificações de alteração de sessão na sua função manipulador para ver quando os usuários logon / logoff, desbloquear a sua sessão, e assim por diante.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top