用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