首页
关于我们
服务项目
作品展示
服务支持
联系我们
友情链接
网站地图
 您当前位置:网络学院 -> 系统问题系-> 操作系统-> Windows 综合
Windows系统进程信息不可用解决办法
作者:admin 来源:网络
日期: 2007-3-13
站内搜索
文章页数:[1] 

大家知道,如果怀疑某个进程是病毒、木马或者间谍软件等恶意程序带来的,那么首先就需要了解该可疑进程的路径、大小等详细信息。这就需要用“系统信息”组件查看当前正在运行任务的详细信息。有网友认为,如果在“系统信息”组件里,某些进程的详细信息显示为不可用,那么这些进程很可能就是恶意程序─果真是这样吗─请继续往下看。

问题描述

Windows XP中启动“系统信息”程序窗口,在左侧控制台树中展开“软件环境”“正在运行任务”,发现有9个进程的路径、最小(最大)工作设置、版本、大小、开始时间、文件日期等项均显示为不可用,(如图1)所示。这些进程包括:alg.exe、csrss.exe、wdfmgr.exe、wmiprvse.exe、system、system idle process和3个svchost.exe进程。

图1

需要注意的是,在默认情况下,Windows XP可能有5个svchost.exe进程,其中有3个svchost.exe进程的详细信息显示为不可用。根据计算机软硬件环境的差异,可能还有其他进程的详细信息显示为不可用。

进程解释

接下来简单介绍这些进程:

system和system idle process并不是真正意义上的进程,它们并没有对应的进程映像文件,例如system进程并不存在一个对应的system.exe进程映像文件。所以“系统信息”程序无法找到它们的进程信息,这是正常的。system进程实际上是代表内核模式系统线程的总和;system idle process只是用来统计空闲的CPU时间,它的CPU占有率越高,表明当前系统的CPU越空闲。

csrss.exe进程是Windows子系统的用户模式部分,该进程工作在Local System帐户下。

svchost.exe进程是服务的宿主程序,这3个详细信息不可用的svchost.exe进程工作在network service或者local service帐户下。可以参考以下的微软知识库文章,了解svchost.exe进程的详细信息:http://support.microsoft.com/kb/314056/zh-cn。

alg.exe、wdfmgr.exe和wmiprvse.exe这三个进程,都是服务所对应的可执行文件,它们都工作在network service或者local service帐户下。

原因分析

需要理解,进程是一个很奇妙的东西,它具有“双重性格”。就像文件夹和打印机一样,可以对进程指定访问权限,例如指定谁可以查询进程的信息、谁可以终止这个进程等等,也就是说每一个进程都可以关联一个访问控制列表(ACL)。然而和文件夹与打印机不一样的是,进程不但可以有ACL,同时还具有一个访问令牌(Access Token),访问令牌包含该进程所属的帐户SID列表和该进程所具有的一组特权(Privilege)。

可以把进程想象成类似于高中物理所学的“光的波粒二相性”,这样就不会忘记进程的这种“双重性格”。

当“系统信息”这个进程试图访问其他进程的详细信息时,“系统信息”进程首先需要出示其访问令牌。然后Windows的安全子系统就会根据其他进程的访问控制列表,来比较“系统信息”进程的访问令牌,以确认是否允许“系统信息”有权限访问该进程的详细信息。

实验查看

实验工具

Process Explorer:可以利用该工具来查看进程的访问令牌,还可以查看和设置进程的访问控制列表,可以到以下站点下载该工具:

http://www.mydown.com/soft/265/265210.html

PsExec:可以利用该工具以其他帐户身份启动某个进程,可以到以下站点下载该工具:

http://www.mydown.com/

SubInAcl:可以查看和设置进程的权限,可以到以下微软官方站点下载该工具:

http://www.mydown.com/

查看“系统信息”进程的访问令牌

以管理员帐户登录系统,启动“系统信息”程序窗口,然后打开Process Explorer。双击“系统信息”的对应进程HelpCtr.exe,在打开的属性对话框里切换到“Security”标签页,这就是“系统信息”进程所获得的访问令牌,(如图2)所示。

图2

这里需要注意的是,尽管“系统信息”程序的对应Image文件应该是msinfo32.exe,但是通过Process Explorer监控发现,其对应的进程实际是HelpCtr.exe。

查看csrss.exe的访问控制列表

以csrss.exe进程为例。在Process Explorer中双击该csrss.exe进程,在打开的属性对话框里切换到“Security”标签页。然后单击其右下角的“Permission”按钮,即可查看csrss.exe进程的访问权限设置。可以看到该进程只允许Local System帐户访问。单击打开对话框上的“高级”按钮,还可以查看Local System帐户具有的详细权限,(如图3)所示。

图3

这样就可以解释为什么无法查看csrss.exe进程信息,原来只有Local System帐户才有权限访问csrss.exe进程,而系统进程的访问令牌里并不包含Local System帐户。

查看svchost.exe的访问控制列表

接下来查看三个详细信息不可用的svchost.exe进程的访问控制列表。

在“系统信息”窗口里记下这三个svchost.exe进程的PID,然后在Process Explorer窗口里打开该进程的属性对话框,查看其安全权限,(如图4)所示。

图4

和csrss.exe进程相比,除了Local System帐户外,svchost.exe进程的访问控制列表中还包含了一个未知SID(本例是S-1-5-5-0-35860),实际上这是该svchost进程的Logon SID,也就是该svchost进程所在登录会话的SID。也就是说,只要是在同一个登录会话里运行的进程,就可以访问该svchost.exe进程的信息。

和图2作比较,会发现“系统信息”进程的Logon SID是S-1-5-5-0-40881,和svchost.exe进程的Logon SID不同,所以“系统信息”无法访问这些svchost.exe进程的详细信息。

用同样的方法,可以找到alg和wdfmgr.exe的进程信息不可用的原因。

用subinacl.exe命令行工具查看进程的访问控制列表

我们还可以利用subinacl.exe命令行工具,查看进程的访问控制列表,这里以csrss.exe进程为例。打开命令提示符窗口,运行以下命令:

subinacl /process csrss.exe /display=dacl

命令的部分结果类似如下显示:

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

+Process csrss.exe - 940

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

/perm. ace count =1

/pace =system ACCESS_ALLOWED_ACE_TYPE-0x0 AccessMask=0x20c79

命令结果表明csrss.exe进程仅允许SYSTEM帐户访问,所以“系统信息”组件无法获得该进程的详细信息。

解决方案

对于system和system idle process这两个进程来说,由于它们并非真正的进程,所以无需解决办法。而对于其他详细信息“不可用”的进程,可以用以下两种方法解决:

方法1:以Local System帐户身份启动“系统信息”组件

由于详细信息“不可用”的进程,都允许Local System帐户访问其进程信息,所以这里我们尝试用Local System帐户的身份启动“系统信息”进程,然后查看是否可以正常显示进程的信息。

要以Local System帐户身份启动进程,可以借助PsExec,可以在CMD窗口运行以下命令,以Local System帐户的身份启动“系统信息”进程:

PsExec -d -i -s "%CommonProgramFiles%\Microsoft Shared\MSInfo\msinfo32.exe"

可以看到,现在可以访问几乎所有进程的信息(除system和system idle process之外),(如图5)所示。

图5

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

用Process Explorer修改进程访问权限

这里以csrss.exe进程为例进行介绍。在Process Explorer程序窗口里双击打开csrss.exe进程的属性对话框,并切换到“Security”标签页。然后单击其右下角的“Permission”按钮,打开该进程的安全权限设置对话框,单击其上的“添加”按钮,添加当前的登录帐户(假设是Admin)。回到安全权限设置对话框,单击其上的“高级”按钮,在打开的权限项目对话框里,确保勾选以下三个权限项目,(如图6)所示:Read Memory、Query Information和Read Permission。依次单击确定按钮,保存所作的设置。

图6

现在应该可以在系统信息窗口看到csrss.exe进程的详细信息。然后可以用类似的方法,修改其他进程的访问权限。

用SubInAcl命令行工具设置访问权限

可以借助Windows Server Resource Kit Tools工具包中的SubInAcl来设置进程的访问权限。打开命令提示符窗口,运行以下命令:

subinacl /process csrss.exe /grant=Admin=F

接下来运行以下命令,查看alg.exe进程现在的权限设置:

subinacl /process csrss.exe /display

命令的部分结果如下:

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

+Process csrss.exe - 940

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

/control=0x0

/owner =local service

/primary group =local service

/audit ace count =0

/perm. ace count =3

/pace =S-1-5-5-0-55078 ACCESS_ALLOWED_ACE_TYPE-0x0 AccessMask=0x1f0fff

/pace =system ACCESS_ALLOWED_ACE_TYPE-0x0 AccessMask=0x100201

/pace =testxp\admin ACCESS_ALLOWED_ACE_TYPE-0x0 AccessMask=0x1f0fff

可以看到,现在Admin帐户对csrss.exe进程具有完全控制权限。打开“系统信息”窗口,现在可以看到csrss.exe进程的详细信息了。

这里需要说明的是,尽管采用subinacl命令行工具可以很方便地设置进程的访问权限。但是这里还是推荐用Process Explorer程序,不仅操作起来方便,而且可以给进程赋予最小的访问权限,而subinacl命令行工具则只能给进程赋予完全控制权限。

疑难解答

Process Explorer为什么可以查看所有进程的详细信息?原来Process Explorer借助AdjustTokenPrivileges这个API函数,在自己进程的访问令牌里激活了SeDebugPrivilege(调试程序)特权,(如图7)所示。由于这个SeDebugPrivilege(调试程序)特权的存在,使得Process Explorer能够绕过其他所有进程的访问控制列表,查看其他所有进程的详细信息(当然除了system和system idle process这两个“伪”进程之外)。(在本文撰写的过程中,得到尤杨和张康宗两位Microsoft MVP的帮助,在此表示感谢。)

图7
文章页数:[1] 
放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·IE7下Https网站访问故障巧排除
·Win2000/XP/Vista解决繁体字最佳方法
·打造另类的Windows操作系统登录界面
·网页打不开 Windows的Hosts表是祸首
·看看你电脑里面有多少垃圾文件浪费内存
·大内存时代 如何最大限度提升虚拟内存性能
·如何让电脑硬盘运行更快
·打造“完美浏览器”(上篇)
·技巧 右键的世界很“精彩”
·远程文件共享的常用方法
最新文章
·特别奉献:Windows 这20年(第三部分)
·特别奉献:Windows 这20年(第二部分)
·特别奉献: Windows 这20年 (第一部分)
·看看你电脑里面有多少垃圾文件浪费内存
·打造“完美浏览器”(上篇)
·打造“完美浏览器”(中篇)
·打造“完美浏览器”(下篇)
·如何让电脑硬盘运行更快
·浏览器执行exe文件的探讨
·用组策略强化Windows系统的三大技巧
相关主题
版权申明:除部分特别声明不要转载,或者授权本站独家播发的文章外,大家可以自由转载本站的原创文章,但原作者和来自本站的链接必须保留(非本站原创的,按照原来自一节,自行链接)。文章版权归本站和作者共有。
转载要求:转载之图片、文件,链接请不要盗链到本站,且不准打上各自站点的水印,亦不能抹去本站水印。
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
发表评论  打印  刷新  推荐给朋友  返回顶部  关闭

网上大名: