manifest导致XP SP2崩溃问题跟踪说明
来源:互联网 发布:android 启动优化 编辑:程序博客网 时间:2024/06/05 03:20
Microsoft更新了KB 921337知识库文章,介绍了一下这个问题的具体成因是由于编译器造成的,并且说明这个问题将在 Visual Studio 2005 SP1里面得到解决。数天以前,Visual Studio 2005 SP1发布并修正了这个问题。
问题解决了,那么为什么会造成这个问题呢?
故障原因:
究其原因是由于Visual Studio 2005 RTM自带的一个组件mt.exe自作聪明的(或者就是这样设计的)在编译的时候修改了用户添加的UAC manifest内容,同时,由于Windows XP SP2的SXS.DLL模块在解析被Visual Studio 2005 RTM修改以后的UAC manifest时存在一个访问越界的BUG导致崩溃。由于这2个原因,最终导致了在manifest里面加入Windows Vista UAC所用信息以后可能导致Windows XP SP2崩溃的问题。
根据Microsoft UAC 开发文档,应用程序可以在manifest里面添加关于UAC的相关描述信息,如下所示:
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="highestAvailable"
uiAccess="false"
/>
</requestedPrivileges>
</security>
</trustInfo>
上述内容添加到manifest以后,将由mt.exe添加到PE文件里面,使用Visual Studio 2005 RTM编译以后生成的manifest内容如下(可以使用Resource Hacker查看EXE文件里面的manifest内容):
<ms_asmv3:trustInfo xmlns:ms_asmv3="urn:schemas-microsoft-com:asm.v3" xmlns="urn:schemas-microsoft-com:asm.v3"><ms_asmv3:security xmlns:ms_asmv3="urn:schemas-microsoft-com:asm.v3">
<requestedPrivileges>
<requestedExecutionLevel level="highestAvailable" uiAccess="false">
</requestedExecutionLevel>
</requestedPrivileges>
</ms_asmv3:security>
</ms_asmv3:trustInfo>
遗憾的是,由于Visual Studio 2005自带的mt.exe的BUG,mt.exe在编译的时候将一个错误的标记附加给了上述内容,出现了2个schema:
<ms_asmv3:trustInfo xmlns:ms_asmv3="urn:schemas-microsoft-com:asm.v3"
xmlns="urn:schemas-microsoft-com:asm.v3">
正是由于这2个schema的存在,最终导致了Windows XP SP2的SXS.DLL崩溃和Windows的蓝屏。
解决方法:
使用Microsoft Windows Vista SDK 里面的mt.exe替换 Visual Studio 2005 RTM 里面的mt.exe
操作方法:
从Microsoft下载Microsoft Windows Vista SDK,安装以后在C:\Program Files\Microsoft SDKs\Windows\v6.0\Bin\mt.exe获得文件。
打开Visual Studio 2005 RTM安装目录,使用Windows Vista SDK里面的mt.exe替换以下的同名文件即可:
C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\mt.exe
C:\Program Files\Microsoft Visual Studio 8\VC\bin\mt.exe
安装Visual Studio 2005 SP1
操作方法:
从Microsoft下载Visual Studio 2005 SP1,安装即可。
无论使用上述那个方法,都可以解决由于manifest问题而导致的Windows XP SP2蓝屏现象。
最后,让我们看看使用新版本mt.exe以后编译UAC Manifest 产生的内容。使用Resource Hacker打开编译好以后的PE文件,然后选择24节点,查看内容可以发现使用新版本mt.exe以后编译UAC Manifest 产生的内容和当初在manifest里面添加的内容完全一致。新版本mt.exe再没有自作主张的修改manifest内容了。
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
- manifest导致XP SP2崩溃问题跟踪说明
- manifest导致XP SP2重启
- 调试:GetOpenFileName()在装有Adobe Acrobat 7.0的SP2以上XP系统上调用时的崩溃问题
- ds3.1 在 xp sp2 的问题
- xp sp2上rose2003的安装问题
- XP SP2与 SP3引起的问题
- Windows XP Professional (专业版)SP2服务说明
- Visual Studio 清单(manifest)导致的问题
- windows xp sp2 补丁与激活的问题
- Windows 2000/XP SP2验证码显示问题
- ArcGIS 9.0 在Windows XP SP2 上安装的问题
- 在xp sp2上部署asp.net3.5的问题
- 解决GHOST XP SP2 安装 IIS5.1 失败的问题
- 解决GHOST XP SP2 安装 IIS5失败的问题
- 解决windows xp sp2双任务栏的问题
- 在XP SP2下安装Visual Studio 2010 问题
- vector小问题导致程序崩溃
- ListView 添加footView导致崩溃的问题
- zoj 3212
- 问题杂集
- 分数类中的运算符重载(第八周任务三)
- 关于计算机如何做加法
- Shell脚本语法 条件测试:test
- manifest导致XP SP2崩溃问题跟踪说明
- 聊斋志异的夜叉国很有时代色彩
- 炮兵阵地(acm.pku1185)解法
- 结构体定义 typedef struct 用法详解和用法小结
- C++基于TCP和UDP的socket通信
- (oracle数据库基础)第五章 PL/SQL基础
- 声音
- nyoj 301 递推求值 和 nyoj 148 fibonacci数列(二) 【矩阵】
- 实现分数类的重载