BUG:在manifest里面加入Windows Vista UAC所用信息以后可能导致Windows XP SP2崩溃
BUG描述
以前我曾经发现,如果在一个可执行文件或DLL文件的manifest文件里面加入Windows Vista UAC模块所必须采用的权限描述性说明信息以后,如果该程序在Windows XP SP2下运行,有一定的几率导致系统蓝屏。错误提示为Unknown Hard Error。发生的模块是CSRSS.EXE。
今天我在微软知识库里面确认了这个问题的确存在,详情见:http://support.microsoft.com/kb/921337/en-us
关于 Windows Vista 下对可执行文件或DLL文件修改 manifest 文件的原因:
- 由于Windows Vista 需要对进程进行权限检查,默认情况下(UAC支持启动的时候)进程只能够拿到最小的令牌(UAC Token),如果一个进程需要Full Token,则必须经过UAC组件的认证。通过UAC组件认证以后,LSA会将剩余的令牌信息颁发给该进程。
- 在Windows Vista里面,进程所用令牌的检查工作是由系统自动确定的(如果需要Full Token,则会在该程序的图标上显示一个Windows安全中心的图标),但是微软还提供的另外一种方法即强行指定所需的权限,操作方法就是在manifest里面加入新的一个节,类似于下面的内容:
- 当加入上述节内容以后,系统会从manifest里面知道该进程需要管理员权限才能正常工作,于是会通过LSA将完整的管理员令牌颁发给该进程。
由于Windows XP SP2的缺陷,如果在一个可执行文件或DLL文件的manifest文件里面加入Windows Vista UAC模块所必须采用的权限描述性说明信息以后,如果该程序在Windows XP SP2下运行,有一定的几率导致系统蓝屏。错误提示为Unknown Hard Error。发生的模块是CSRSS.EXE。