了解Windows心中的秘密——让系统信息显示更多进程

技巧与实践

“系统信息”组件可以收集并显示出本地和远程计算机的系统配置信息,在“运行”栏中使用“Winmsd”命令打开组件窗口,通过“软件环境”中的“正在运行任务”选项右侧窗口,可以看到当前系统中运行的部分进程信息,包括进程名称、路径和系统分配给每个进程的版本和优先权等等,这比Windows任务管理器中显示的要详细。本文中介绍的几种方法,可以让“系统信息”中显示更多的进程,这样更有助于系统管理员排除系统故障。

一、不能显示的原因

为什么“系统信息”窗口中不能显示所有的进程呢?要明白这一点,需要从两个方面来解释:一是System和System Idle Process进程并没有对应的进程映像文件,所以它们不是真正意义上的进程,故而“系统信息”程序无法找到它们的进程信息,这是正常的。二是一些没有显示的进程,因为其定义的访问控制列表不允许“系统信息”组件访问它们,所以不能在这里显示。例如,Csrss.exe进程就不允许“系统信息”组件访问其详细信息。

如果想查看进程的访问控制列表,可以借助Subinacl命令来实现,此命令可以通过网址http://download.cpcw.com下载。

以管理员组成员的身份登录WinXP后,运行下载的Subinacl.msi文件,在“X:\Program Files\Windows Resource Kits\Tools\”文件夹中安装“Subinacl.exe”命令。在命令提示符窗口中进入“X:\Program Files\Windows Resource Kits\Tools\”文件后,键入“Subinacl”命令可以查看到该命令的语法等信息。以查看Csrss.exe进程的访问控制列表为例,只须使用“Subinacl /process Csrss.exe /display=dacl”命令即可。

在访问结果中,如下信息说明了Csrss.exe进程仅允许SYSTEM账户访问,所以“系统信息”组件无法获得该进程的详细信息。

=======================

+Process csrss.exe - 492

=======================

/perm. ace count =1

/pace =system ACCESS_ALLOWED

_ACE_TYPE-0x0 AccessMask=0x20c79

二、显示更多进程

由于System和System Idle Process并非真正的进程,所以以下两种方法只适用于因访问控制原因导致的无法显示问题。

方法一:以SYSTEM身份启动

SYSTEM即系统账户组,其成员是操作系统本身,它在计算机中拥有最高权限。通过网址http://download.cpcw.com下载PsExec工具后,将它解压并存放到“C:\”根目录下。在命令提示符窗口中,进入C盘根目录后,输入以下命令并按“Enter”键执行Psexec -d -i -s “%CommonProgramFiles%\

Microsoft Shared\MSInfo\msinfo32.exe”。

在输入命令后,将会启动“系统信息”窗口。现在的“系统信息”组件将以SYSTEM账户身份启动。现在,就可以在“正在运行任务”项的右侧窗格中,看到除了System和System Idle Process之外的所有进程的详细信息了(如图)。

38-f14-02.jpg

方法二:修改进程的访问控制列表

除了使用SYSTEM账户打开系统信息窗口的方法外,系统管理员还可以借助Subinacl命令,通过修改alg.exe、csrss.exe等进程的访问控制列表,进而允许“系统信息”组件能够访问这些进程。这里以显示Csrss.exe进程为例,需要执行如下操作:

以管理员组的成员身份登录WinXP,假设当前登录的账户名为Shyzhong。在命令提示符窗口中进入“X:\Program Files\Windows Resource Kits\Tools\”文件夹后,需要键入以下命令并按Enter键执行:

Subinacl /process csrss.exe /grant=shyzhong=F

通过命令执行的结果,可以看到当前登录的管理员账户Shyzhong已经拥有对Csrss.exe进程的完全控制权限(如图)。

38-f14-03.jpg

现在再以Shyzhong身份启动“系统信息”,就可以在“正在运行任务”右侧窗格的列表中看到Csrss.exe进程了。使用同样的方法,可以修改alg.exe、wdfmgr.exe、wmiprvse.exe和svchost等进程的访问控制列表。