首先,如果把Windows 7自带的某个组件(例如Notepad)复制到其他路径,其数字签名实际上是不会变的。这可以用SigCheck命令进行检测:
尽管Notepad已经更改了路径,但是其数字签名是不会变化的。其Publisher还是显示“Microsoft Corporation”。但是为什么UAC对话框上显示其为未知发布方呢?
UAC和路径有关?
更具体的来猜测,应该是UAC在显示对话框时,会对其路径进行判断,如果路径已经改变,则不管数字签名是否有变,一律弹出橙黄色报警对话框,以便提醒用户,在提升权限时要注意!
其实这个特性在Windows Vista里也存在。
另外,对于某些特殊的Windows组件,例如IE浏览器,不管是否移动路径,如果试图用管理员权限运行的话,系统也一律弹出橙黄色报警的UAC对话框,显示发布方为未知,以提醒我们注意,因为IE浏览器属于高危险的组件,如果用完全管理员权限运行,会有很大的风险。
就目前而言,严格来说,并非所有的Windows组件都可以默认在Windows 7里自动提升权限,例如Notepad本身就不能自动提升权限(哪怕没有更改路径),也会弹出UAC对话框(但是能够正确显示发布方为微软公司),其他的例子还有注册表编辑器等。
哪些Windows自带组件才能自动提升权限?
根据Rafael Rivera的说法,是由这些组件内嵌的程序清单(manifest)所控制的,可以做一个实验:
我们知道,如果在Windows 7里运行服务、组策略、磁盘管理等管理单元时,并不会弹出UAC对话框,这说明其主进程mmc.exe位于UAC的白名单上。
请用记事本或者别的工具打开MMC.exe文件,然后仔细查看,会发现其中有一段语句:
<autoElevate>true</autoElevate>
这就是为什么运行组策略编辑器等工具时,Windows并不会弹出UAC对话框的原因。
小结:严格来说,如果某个Windows组件位于UAC的白名单时,系统还是会“弹出”UAC对话框的,我们可以通过Process Monitor监控到其进程consent.exe,只是该进程并没有UI显示在用户桌面上而已。