2007年10月20日星期六

Windows Vista UAC的一处严重的愚蠢设计

你有见过验证一个可执行文件的数字签名还需要把这个文件拷到系统盘的临时目录的OS吗?开了UAC的Windows Vista就是一个!

今天试图在Vista下运行一个500多M的大安装包,结果系统盘(F区)空间只有300多M。结果,运行了之后硬盘响了半天,愣是没看到那可爱又可恨的UAC提示,反而出来个对话框说“磁盘空间不足”。结果一看,F区没空间了。Windows Explorer自己的“磁盘清理”功能一弄,系统日志一清,各浏览器缓存一清,只清空出大概200兆空间。到处找了半天,找到了F:\Windows\temp——所谓“全局”临时目录下躺着个300多兆的临时文件。winhex打开一对比,结果此文件就是那个安装包的截断版本。

我做了个小实验。把F盘再腾出几百兆空间,再次运行那个安装程序。

硬盘又一阵稀里哗啦的狂响。20秒后,在UAC窗口闪烁在任务栏的时候,怪物也出现在了temp目录中:

切换到UAC窗口,随手点“取消”。这时候这个临时文件也突然消失了。再试了个别的安装程序(日文WPS2007 Beta安装包),结果也差不多,文件还是被复制到了F:\windows\temp下。

那如果系统盘的空间不足会怎样呢?再测试一下。。

结果。硬盘空间一下就被吃光,出现了那个“磁盘空间不足”的窗口。

具有讽刺意义的是,这个被截断的临时文件,默认还是TrustedInstaller组权限下的东西,你想删掉它,还要再过一次UAC。

这可以算是Vista的一个严重BUG了。验证数字签名,有必要放到自己的领地里来吗?当磁盘空间不足的时候,也没有进行任何的防护措施,最后出错后那临时文件也摆在那里了。

没有评论:

发表评论