科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网安全频道Windows系统进程信息不可用解决办法

Windows系统进程信息不可用解决办法

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

大家知道,如果怀疑某个进程是病毒、木马或者间谍软件等恶意程序带来的,那么首先就需要了解该可疑进程的路径、大小等详细信息。这就需要用“系统信息”组件查看当前正在运行任务的详细信息。

作者:巧巧读书 来源:巧巧读书 2008年8月27日

关键字: 进程 系统进程 进程管理

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共2页)

  和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进程的详细信息。然后可以用类似的方法,修改其他进程的访问权限。

  可以借助WindowsServerResource 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这两个“伪”进程之外)。(在本文撰写的过程中,得到尤杨和张康宗两位MicrosoftMVP的帮助,在此表示感谢。)

  图7

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章