注册
 找回密码
 注册
江西广告网
查看: 205|回复: 0
打印 上一主题 下一主题

manifest导致XP

[复制链接]

该用户从未签到

1
跳转到指定楼层
发表于 2008-12-14 11:22:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
我在Windows XP SP2下运行一个含有Windows Vista UAC manifest内容的程序时,系统突然蓝屏了。重启以后我发现这个蓝屏不是由于驱动程序造成的,而是由于CSRSS.EXE 崩溃导致的。

<P>  Microsoft更新了KB 921337知识库文章,介绍了一下这个问题的具体成因是由于编译器造成的,并且说明这个问题将在 Visual Studio 2005 SP1里面得到解决。数天以前,Visual Studio 2005 SP1发布并修正了这个问题。</P>

<P>  问题解决了,那么为什么会造成这个问题呢?</P>

<P><STRONG>  故障原因:</STRONG></P>

<P>  究其原因是由于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崩溃的问题。</P>

<P>  根据Microsoft UAC 开发文档,应用程序可以在manifest里面添加关于UAC的相关描述信息,如下所示:  </P>

<P><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: Consolas" twffan="done"><SPAN style="COLOR: blue" twffan="done">





<TR>

<TD style="WORD-WRAP: break-word" bgColor=#f3f3f3>&lt;trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"&gt;  <BR>&lt;security&gt;  <BR>&lt;requestedPrivileges&gt;  <BR>&lt;requestedExecutionLevel  <BR>level="highestAvailable"  <BR>uiAccess="false"  <BR>/&gt;  <BR>&lt;/requestedPrivileges&gt;  <BR>&lt;/security&gt;  <BR>&lt;/trustInfo&gt;</TD></TR></SPAN></SPAN>  </TRUSTINFO></P>

<P>  上述内容添加到manifest以后,将由mt.exe添加到PE文件里面,使用Visual Studio 2005 RTM编译以后生成的manifest内容如下(可以使用Resource Hacker查看EXE文件里面的manifest内容):  </P>

<P><?xml:namespace prefix = ms_asmv3 /><ms_asmv3:trustInfo xmlns="urn:schemas-microsoft-com:asm.v3" xmlns:ms_asmv3="urn:schemas-microsoft-com:asm.v3">





<TR>

<TD style="WORD-WRAP: break-word" bgColor=#f3f3f3>&lt;ms_asmv3:trustInfo xmlns:ms_asmv3="urn:schemas-microsoft-com:asm.v3" xmlns="urn:schemas-microsoft-com:asm.v3"&gt;  <BR>&lt;ms_asmv3:security xmlns:ms_asmv3="urn:schemas-microsoft-com:asm.v3"&gt;  <BR>&lt;requestedPrivileges&gt;  <BR>&lt;requestedExecutionLevel level="highestAvailable" uiAccess="false"&gt;  <BR>&lt;/requestedExecutionLevel&gt;  <BR>&lt;/requestedPrivileges&gt;  <BR>&lt;/ms_asmv3:security&gt;  <BR>&lt;/ms_asmv3:trustInfo&gt;</TD></TR> </ms_asmv3:trustInfo></P>

<P>  遗憾的是,由于Visual Studio 2005自带的mt.exe的BUG,mt.exe在编译的时候将一个错误的标记附加给了上述内容,出现了2个schema: </P>

<P><ms_asmv3:trustInfo xmlns="urn:schemas-microsoft-com:asm.v3" xmlns:ms_asmv3="urn:schemas-microsoft-com:asm.v3"></P>

<P>





<TR>

<TD style="WORD-WRAP: break-word" bgColor=#f3f3f3>

<P>&lt;ms_asmv3:trustInfo xmlns:ms_asmv3="urn:schemas-microsoft-com:asm.v3" </P>

<P>xmlns="urn:schemas-microsoft-com:asm.v3"&gt;</P></TD></TR>  正是由于这2个schema的存在,最终导致了Windows XP SP2的SXS.DLL崩溃和Windows的蓝屏。</P>

<P></p><p align='center'><b>[1] [2] 下一页 </b></p> <

                </P>

<P><STRONG>       解决方法:</STRONG></P>

<P>  使用Microsoft Windows Vista SDK 里面的mt.exe替换 Visual Studio 2005 RTM 里面的mt.exe</P>

<P>  <STRONG>操作方法:</STRONG></P>

<P>  从Microsoft下载Microsoft Windows Vista SDK,安装以后在C:\Program Files\Microsoft SDKs\Windows\v6.0\Bin\mt.exe获得文件。</P>

<P>  打开Visual Studio 2005 RTM安装目录,使用Windows Vista SDK里面的mt.exe替换以下的同名文件即可:</P>

<P>  C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\mt.exe</P>

<P>  C:\Program Files\Microsoft Visual Studio 8\VC\bin\mt.exe</P>

<P>  <STRONG>安装Visual Studio 2005 SP1</STRONG></P>

<P><STRONG>  操作方法:</STRONG></P>

<P>  从Microsoft下载Visual Studio 2005 SP1,安装即可。</P>

<P>  无论使用上述那个方法,都可以解决由于manifest问题而导致的Windows XP SP2蓝屏现象。</P>

<P>  最后,让我们看看使用新版本mt.exe以后编译UAC Manifest 产生的内容。使用Resource Hacker打开编译好以后的PE文件,然后选择24节点,查看内容可以发现使用新版本mt.exe以后编译UAC Manifest 产生的内容和当初在manifest里面添加的内容完全一致。新版本mt.exe再没有自作主张的修改manifest内容了。</P>

<P>  





<TR>

<TD style="WORD-WRAP: break-word" bgColor=#f3f3f3>&lt;trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"&gt;  <BR>&lt;security&gt;  <BR>&lt;requestedPrivileges&gt;  <BR>&lt;requestedExecutionLevel  <BR>level="highestAvailable"  <BR>uiAccess="false"  <BR>/&gt;  <BR>&lt;/requestedPrivileges&gt;  <BR>&lt;/security&gt;  <BR>&lt;/trustInfo&gt;</TD></TR></P></ms_asmv3:trustInfo></p><p align='center'><b>上一页  [1] [2] </b></p> <
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表