¿De dónde provienen las variables de entorno para un proceso cmd.exe elevado?

¿De dónde provienen las variables de entorno para un proceso cmd.exe elevado?

Las variables de entorno que muestra el comando SET pueden ser notablemente diferentes según el nivel de privilegio de la sesión del símbolo del sistema. Además, parece que cualquier programa ejecutado con credenciales administrativas por el mismo usuario puede crear variables de entorno que persistirán mucho después de que finalice ese proceso y se configurarán en cualquier proceso elevado posterior iniciado por ese usuario (y SÓLO en esos procesos elevados). No he podido encontrar esas variables en la pestaña Entorno que muestra Process Explorer para ningún proceso asociado con la sesión de inicio de sesión del usuario. Mi pregunta es: ¿dónde se almacenan esos valores y por qué Process Explorer no puede acceder a ellos (por supuesto, dado que Process Explorer se ejecuta elevado de forma predeterminada, esas variables aparecen en su propia pestaña Entorno)? ¿O simplemente los pasé por alto?

Respuesta1

¿De dónde provienen las variables de entorno para un proceso cmd.exe elevado?

Como todos los procesos, obtiene su entorno del proceso que generó la instancia del símbolo del sistema.

Cuando un proceso genera otro proceso, el proceso hijo hereda el entorno del padre. Si el padre tenía privilegios, entonces probablemente tenga más variables diferentes que si no lo tuviera. Cuando genera un proceso hijo, el niño obtiene el mismo conjunto para empezar.

Las variables de entorno que muestra el comando SET pueden ser notablemente diferentes según el nivel de privilegio de la sesión del símbolo del sistema.

Porque cuando Explorer en realidad no genera procesos privilegiados, CSRSS sí lo hace. Cuando ejecuta un programa "como administrador", aparece un mensaje de UAC que atenúa la pantalla. Esto se debe a que CSRSS es un proceso del sistema que maneja las indicaciones de UAC y la elevación de procesos. Entonces, si bien Explorer y sus procesos secundarios tienen un entorno, un símbolo del sistema elevado (que es generado por el proceso del sistema de altos privilegiosa instanciasof Explorer) obtiene un conjunto ligeramente diferente con algunas variables adicionales/diferentes.

Además, parece que cualquier programa ejecutado con credenciales administrativas por el mismo usuario puede crear variables de entorno que persistirán mucho después de que finalice ese proceso y se configurarán en cualquier proceso elevado posterior iniciado por ese usuario (y SÓLO en esos procesos elevados).

No. El setcomando es sólo de sesión. Una vez que cierre el símbolo del sistema, cualquier cambio que haya realizado desaparecerá. Para realizar cambios persistentes, debe utilizar una herramienta externa como una utilidad de terceros o el programa de herramientas de Microsoft setx. Esto es cierto incluso para las indicaciones de comando elevadas; el setcomando simplemente no tiene funcionalidad para modificar el entorno en el registro.

No he podido encontrar esas variables en la pestaña Entorno que muestra Process Explorer para ningún proceso asociado con la sesión de inicio de sesión del usuario.

Debido a que cualquier cambio que realice setsolo será visible enese especificosímbolo del sistema y cualquier proceso que inicie desdeese especificosímbolo del sistema; los cambios no se propagan a otros procesos.

Mi pregunta es ¿dónde se almacenan esos valores y por qué Process Explorer no puede acceder a ellos (por supuesto, dado que Process Explorer se ejecuta elevado de forma predeterminada, esas variables aparecen en su propia pestaña Entorno)? ¿O simplemente los pasé por alto?

Las variables de sesión se almacenan en el entorno de ese símbolo del sistema específico. Process Explorer puede verlos para esa instancia específica de cmd, pero no estarán en ningún otro proceso. Si inicia un programa desde ese símbolo del sistema, podrá ver esos cambios en el proceso secundario.Ambientepestaña en Process Explorer porque los habrá heredado de ese símbolo del sistema.

Si utiliza un programa como setxpara establecer una variable persistente, se almacenarán en el registro. Si configura una variable a nivel de usuario (para el usuario actual), se almacenará en HKCU\Environment(o HKU\<USER>\Environmentpara otros usuarios). Si configura una variable a nivel de sistema, se almacenará en HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment.

Tenga en cuenta que si modifica manualmente el entorno a través del registro, sólo los procesos nuevos recogerán los cambios. Para que el proceso existente vea los cambios, debe reiniciarlos o transmitir un WM_SETTINGCHANGEmensaje. (Herramientas como setxtransmitir el mensaje a todas las ventanas de nivel superior).

Respuesta2

Creo que el resultado de SETsolo puede ser diferente cuando no has iniciado sesión como miembro del grupo Administrador. Es por eso que se le solicita un usuario/contraseña; en ese caso, en realidad inicia sesión como administrador para ese proceso.

Si ya es miembro del grupo de administradores, entonces el resultado de SET es el mismo en ambos casos para mí.

Por lo tanto, si mi hipótesis es cierta, las variables de privilegios elevados se definen como Variables de usuario para Administrador.

Respuesta3

No está muy claro exactamente cómo se configuran las variables de entorno en un proceso elevado recién creado, pero la mayoría de ellas provienen del conjunto existente del usuario actual (como lo muestra el comando SET cmd.exe no elevado), así como cualquiera que existen en la clave de registro HKCU/Volatile Environment del usuario, que se han creado desde el inicio de la sesión de inicio de sesión actual (¿o la instancia actual de Explorer?) y no se muestran en la lista SET no elevada. Hay algunas variables en mi Windows 10 que aparecen en la lista no elevada pero no en la elevada.

Esta pregunta fue motivada por el comportamiento de versiones anteriores de Macrium Reflect, que se analiza enhttps://forum.macrium.com/Topic752-1.aspxLa versión actual de ese programa ahora crea esas variables problemáticas en HKU/.DEFAULT/Volatile Environment (también conocido como HKU/S-1-5-18/Volatile Environment) en lugar de bajo la clave HKCU.

información relacionada