高架cmd.exe进程的环境变量来自何处?


2

根据命令提示会话的权限级别,SET命令显示的环境变量可能会有显着差异。此外,似乎任何由同一用户使用管理凭据运行的程序都可以创建在该进程结束后很长时间内持久存在的环境变量,并且将在该用户启动的任何后续提升进程中设置(并且仅在那些提升的进程中)。对于与用户登录会话关联的任何进程,我无法在Process Explorer显示的Environment选项卡中找到这些变量。我的问题是:这些值存储在哪里,以及为什么Process Explorer无法访问它们(当然,因为Process Explorer默认运行升级,这些变量出现在它自己的Environment选项卡中)?或者我只是忽略了它们?

Answers:


2

高架cmd.exe进程的环境变量来自何处?

与所有进程一样,它从生成命令提示符实例的进程中获取其环境。

当进程生成另一个进程时,子进程将继承父进程的环境。如果父级具有特权,那么它可能具有比不存在更多/不同的变量。当它生成子进程时,子进程将获得相同的集合。

根据命令提示会话的权限级别,SET命令显示的环境变量可能会有显着差异。

因为当Explorer实际上没有产生特权进程时,CSRSS会这样做。当您以“管理员”身份运行程序时,会出现UAC提示,使屏幕变暗。这是因为CSRSS是一个处理UAC提示和进程提升的系统进程。因此,虽然资源管理器及其子进程有一个环境,但提升的命令提示符(由资源管理器的命令下的高权限系统进程生成)会得到一个稍微不同的集合,其中包含一些额外/不同的变量。

此外,似乎任何由同一用户使用管理凭据运行的程序都可以创建环境变量,这些变量将在该过程结束后持续很长时间,并将在该用户启动的任何后续升级过程中设置(并且仅在那些提升的过程中)。

不。该set命令仅限会话。关闭该命令提示符后,您所做的任何更改都会失败。要进行持久更改,必须使用外部工具,如第三方实用程序或Microsoft工具程序setx。即使是提升的命令提示也是如此; 该set命令根本没有修改注册表中环境的功能。

对于与用户登录会话关联的任何进程,我无法在Process Explorer显示的Environment选项卡中找到这些变量。

因为您所做的任何更改set只会在该特定命令提示符和您从该特定命令提示符启动的任何进程中可见; 更改不会传播到其他进程。

我的问题是存储这些值的位置,以及为什么Process Explorer无法访问它们(当然,因为默认情况下Process Explorer运行提升,这些变量出现在它自己的Environment选项卡中)?或者我只是忽略了它们?

会话变量存储在该特定命令提示符的环境中。Process Explorer可以查看它们的特定实例cmd,但它们不会出现在任何其他进程中。如果从该命令提示符启动程序,则可以在Process Explorer 的子进程“ 环境”选项卡中看到这些更改,因为它将从该命令提示符继承它们。

如果您使用类似setx设置持久变量的程序,那么它们将存储在注册表中。如果设置用户级变量(对于当前用户),则将其存储在HKCU\Environment(或HKU\<USER>\Environment用于其他用户)。如果设置系统级变量,则将其存储在HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

请注意,如果通过注册表手动修改环境,则只有新进程才会获取更改。要使现有进程查看更改,您必须重新启动它们或广播WM_SETTINGCHANGE消息。(像setx向所有顶级窗口广播消息的工具。)


0

我认为SET当您没有以Administrator组成员的身份登录时,输出只能是不同的。这就是为什么在这种情况下要求您输入用户/密码的原因,您实际上是以该进程的管理员身份登录的。

如果您已经是管理员组的成员,那么两种情况下SET的输出都是相同的。

因此,如果我的假设为真,则提升的权限变量被定义为管理员的用户变量。


0

目前还不是很清楚在新创建的提升过程中如何设置环境变量,但大多数来自当前用户的现有集(如非提升的cmd.exe SET命令所示),以及任何存在于用户的HKCU / Volatile Environment注册表项中,该注册表项是从当前登录会话(或Explorer的当前实例?)开始创建的,并且未显示在非提升的SET列表中。我的Windows 10中有一些变量出现在非提升列表中但不是高架列表中。

这个问题是由旧版本的Macrium Reflect的行为推动的,该版本在https://forum.macrium.com/Topic752-1.aspx上讨论。该程序的当前版本现在在HKU / .DEFAULT /创建那些有问题的变量易变环境(AKA HKU / S-1-5-18 /易变环境)而非HKCU密钥。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.