De onde vêm as variáveis de ambiente para um processo cmd.exe elevado?

1

As variáveis de ambiente mostradas pelo comando SET podem ser notavelmente diferentes dependendo da nível de privilégio da sessão do prompt de comando. Além disso, parece que qualquer programa executado com As credenciais administrativas do mesmo usuário podem criar variáveis de ambiente que persistirão por muito tempo após o término do processo e serão definidas em qualquer processo elevado subsequente lançado por esse usuário (e SOMENTE nesses processos elevados). Eu não consegui encontrar essas variáveis na guia Ambiente mostrada pelo Process Explorer para qualquer processo associado com a sessão de login do usuário. Minha pergunta é: onde estão esses valores armazenados e por que O Process Explorer não consegue acessá-los (é claro, já que o Process Explorer é executado padrão essas variáveis aparecem em sua própria guia Ambiente)? Ou eu acabei de ignorá-los?

    
por kreemoweet 20.09.2012 / 08:34

2 respostas

1

Where do the environment variables for an elevated cmd.exe process come from?

Como todos os processos, ele obtém seu ambiente do processo que gerou a instância do prompt de comando.

Quando um processo gera outro processo, o processo filho herda o ambiente pai. Se o pai foi privilegiado, provavelmente tem mais / diferentes variáveis do que se não for. Quando gera um processo filho, o filho recebe o mesmo conjunto para começar.

The environment variables shown by the SET command can be notably different depending on the privilege level of the command prompt session.

Como o Explorer não gera processos privilegiados, o CSRSS sim. Quando você executa um programa “como admin”, você recebe um prompt do UAC que escurece a tela. Isso ocorre porque o CSRSS é um processo do sistema que manipula prompts do UAC e elevação de processos. Portanto, enquanto o Explorer e seus processos filhos têm um ambiente, um prompt de comando elevado (que é gerado pelo processo do sistema de alto privilégio no comando do Explorer) recebe um conjunto ligeiramente diferente com algum extra / diferente variáveis.

Moreover, it seems that any program run with administrative credentials by the same user can create environment variables that will persist long after that process ends and will be set in any subsequent elevated process launched by that user (and ONLY in those elevated processes).

Não. O comando set é somente de sessão. Depois de fechar esse prompt de comando, todas as alterações feitas serão feitas. Para fazer alterações persistentes, você deve usar uma ferramenta externa como um utilitário de terceiros ou o programa de ferramentas da Microsoft setx . Isso é verdade até mesmo em prompts de comando elevados; O comando set simplesmente não possui funcionalidade para modificar o ambiente no registro.

I have not been able to find those variables in the Environment tab shown by Process Explorer for any process associated with the user login session.

Porque todas as alterações que você fizer com set serão visíveis apenas no prompt de comando específico e em quaisquer processos que você iniciar a partir desse prompt de comando específico ; as mudanças não se propagam para outros processos.

My Question is where are those values stored, and why is Process Explorer unable to access them (of course, since Process Explorer runs elevated by default those variables appear in its own Environment tab)? Or did I just overlook them?

As variáveis da sessão são armazenadas no ambiente específico do prompt de comando. O Process Explorer pode vê-los para essa instância específica de cmd , mas eles não estarão em nenhum outro processo. Se você iniciar um programa a partir desse prompt de comando, poderá ver essas mudanças na guia Ambiente do processo filho no Process Explorer porque ele as herdou desse prompt de comando.

Se você usar um programa como setx para definir uma variável persistente, elas serão armazenadas no registro. Se você definir uma variável no nível do usuário (para o usuário atual), ela será armazenada em HKCU\Environment (ou HKU\<USER>\Environment para outros usuários). Se você definir uma variável no nível do sistema, ela será armazenada em HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment .

Lembre-se de que, se você modificar manualmente o ambiente por meio do registro, apenas novos processos selecionarão as alterações. Para obter o processo existente para ver as alterações, você deve reiniciá-las ou transmitir uma mensagem WM_SETTINGCHANGE . (Ferramentas como setx transmitem a mensagem para todas as janelas de nível superior.)

    
por 08.12.2013 / 05:28
0

Acho que a saída de SET só pode ser diferente quando você não está conectado como membro do grupo Administrador. É por isso que você é solicitado a usar um usuário / senha. Nesse caso, você realmente faz login como administrador desse processo.

Se você já é um membro do grupo de administradores, a saída de SET é a mesma em ambos os casos para mim.

Portanto, se minha hipótese for verdadeira, as variáveis de privilégio elevado serão definidas como Variáveis de usuário para administrador.

    
por 12.04.2013 / 22:08