在上一篇中,写过一个KillProcessAndWait函数,这个函数是用来终止一个进程并等待进程退出的函数,我们使用这个函数,可以关闭同一个用户下的进程,但是,即使以管理员权限运行程序,我们发现也无法终止系统的进程(比如系统桌面管理器dwm.exe)!这是为什么呢。
另外,在写一篇中获取进程映像路径中,也会出现此问题。
甚至只要是访问那些进程,即使是管理员权限都会出问题!
其实,管理员权限完全可以关闭系统中运行的任何用户模式下的进程,但是为何无法关闭呢,是因为Windows有一项机制叫“强制完整性控制”,IE保护模式处于低完整性,标准用户进程和管理员以标准用户权限运行时处于中完整性,管理员权限进程有高完整性,SYSTEM权限进程是系统完整性,强制完整性控制要优先于访问控制和安全描述符,所以管理员权限的程序依然不能直接访问服务程序的进程,只有获取了Debug权限,才可以以高完整性访问系统完整性的进程。
可能有人没有听说过强制完整性控制,但想必知道UIPI(用户界面特权隔离)吧,其实UIPI不是根据用户权限来隔离Windows消息的!而是通过强制完整性控制!哈哈,其实以前我也不知道,而且有些资料对于这个UIPI也是知其然但不知其所以然,说的很含糊,误导了很多人。
如何获取Debug特权呢?
首先用OpenProcessToken获取自身的