Pergunta

Eu queria saber se existe uma maneira simples de um serviço criar um processo na sessão do usuário?

Meu serviço está sendo executado como uma conta de usuário (administrador) e não como uma conta do sistema local, portanto, não posso usar a função WTSQUERYUSTOKEN.

Eu tentei ligar

OpenProcessToken(GetCurrentProcess,TOKEN_ALL_ACCESS,TokenHandle);

Mas quando eu uso este token para correr

 CreateProcessAsUser(TokenHandle,.....)

Meu processo ainda está em execução na sessão 0. Como posso resolver esse problema?

Estou usando uma automação OLE, então não me importo com qual sessão o processo estará em execução, desde que não seja a sessão 0 - porque o ole por algum motivo não cria seus processos (winword.exe para Instância) na sessão 0, mas sim cria -os em outras sessões de usuário.

Quaisquer sugestões serão bem -vindas. Desde já, obrigado.

Foi útil?

Solução

Consegui resolver esse problema, obrigado por todos aqueles que analisaram essa pergunta.

Ok, então, como mencionei acima - o token pertence a um processo que está em execução na sessão 0 ...

Então, o que eu fiz ... é procurado por um processo de um processo que não está em execução na sessão 0. Quando você pega o ID do processo como parâmetro para o OpenProcessToken. do que o CreateProcesasUser criará o processo na mesma sessão (e provavelmente com os mesmos crdenses que o processo que você escolheu);

O problema era que eu não poderia ter detalhes sobre a maioria dos processos usando a função: QueryfullProcessimagename - porque ele tem um bug e não funciona em processes criados a partir de um caminho que contém espaços (como C: Arquivos de programas, por exemplo) e outro problema com essa função, acho que, porque estou executando o processo original usando um usuário do usuário, não consigo acessar as informações de um processo em execução usando a conta do sistema local. O que é muito ruim porque eu queria considerar o WinLogon.exe como meu processo (porque indica uma nova sessão aberta).

Além disso, a fim de ser péssimo nesse truque, você deve jogar um pouco com a segurança do sistema, a fim de permitir que o processo peça uma segurança elevada: o que eu escolhi para me elevar é: sedebugprivilege - para encontrar informações sobre Os processos de execução SeasSignPrimaryTokenPrivilege - para executar um novo processo com o token que extraí do processo de sessão do usuário (ou seja, explorer.exe) secreateTokenPrivilege - não sei se é necessário, mas o fiz de qualquer maneira, porque parece relacionado.

Para ter sucesso em elevar esses privilégios-você deve adicionar o usuário que executa o processo aos usuários relevantes em todos esses privilégios no run-> gpedit.msc ou run-> secpol.msc (em Política local de computador Configuração do computador Configurações do Windows Configurações de Segurança LocalPolicies Atribuições de Direitos do Usuário)

Adicione sua conta aos seguintes direitos (compensável com as prevenas acima):
Crie um objeto simbólico
Programas de depuração
Substitua um token de nível de processo

E é isso! :) tem funcionado muito bem! BTW, você pode desativar todas as coisas da UAC ... eu não sei se está relacionado ou não, mas tornou o trabalho com 2008 menos doloroso - sem pop -ups mais irritantes.

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