欢迎光临 Enjoy IT (ITECN.NET) 登录 | 注册 | 帮助

关于 manifest 导致 Windows XP SP2 崩溃问题的跟踪说明

在 2006年7月21日 的时候,我曾经撰写过一篇 blog :《BUG:在manifest里面加入Windows Vista UAC所用信息以后可能导致Windows XP SP2崩溃》 来说明在给 EXE、DLL 等文件增加 Windows Vista manifest 内容以后,被添加 manifest 以后的 EXE、DLL文件如果在 Windows XP SP2 上运行,那么会导致 Windows XP SP2 崩溃的问题。

近日,Microsoft 已经对这个问题进行了进一步的说明,并且给出了一个解决办法。使用这个解决办法,可以解决给 EXE、DLL 文件增加UAC manifest内容以后导致系统崩溃的问题。

故障现象以及解释:

大多数情况下,我们编写的manifest文件类似于下面这样:
//The section between >>>>> and <<<< is the problematic section. <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="Synergex.Synergyde.lm" type="win32">
assemblyIdentity>
<dependency>
<dependentAssembly>
<assemblyIdentity
type
="win32" name="Microsoft.VC80.CRT" version="8.0.50608.0" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b">
assemblyIdentity>
dependentAssembly>
dependency>

>>>>>>>>>>>

<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="requireAdministrator" uiAccess="false">
requestedExecutionLevel>
requestedPrivileges>
ms_asmv3:security>
ms_asmv3:trustInfo>

<<<<<<<<<<<

assembly>
在上述的 manifest 内容里面,注意一句话:
<ms_asmv3:trustInfo xmlns:ms_asmv3="urn:schemas-microsoft-com:asm.v3" xmlns="urn:schemas-microsoft-com:asm.v3">
可以注意到,在上述代码里面在一个 tag 里面出现了2个 schema 标记,由于 Windows SxS.DLL 模块的BUG,导致在解析到上述 tag 的时候产生了一个内存冲突,导致 SxS.DLL 模块崩溃了。由于 SxS.DLL 是运行在 CSRSS.EXE 进程空间里面的,SxS.DLL 模块发生问题以后导致 CSRSS.EXE 进程崩溃。由于 CSRSS.EXE 进程是 Win32 子系统进程,没有这个进程,任何 Win32 应用程序均无法运行的,当系统内核发现 CSRSS.EXE 崩溃以后,会采用一个保护措施,停止运行,并且报告一个 STOP 错误(蓝屏)。

解决方法:

根据 Microsoft 提供的解决方法,目前有2种解决途径:
  1. 给用户安装一个 HotFix 程序,该程序需要通过 Microsoft 支持才能获取到。KB 知识号是 KB921337。
  2. 修改 manifest 文件内容,只保留一个 schema 标记,如
<ms_asmv3:trustInfo xmlns:ms_asmv3="urn:schemas-microsoft-com:asm.v3">

故障产生的原因:

要产生这个问题,目前已知的原因有:
  1. 手动编辑 manifest 文件导致的
  2. 使用 Visual Studio 2005 自动产生 manifest 文件导致的

关于这个问题的进一步说明,Microsoft 会在 http://support.microsoft.com/kb/921337/en-us 说明(如果有更新的内容的话。请尽量访问英文网页,以防止本地化不能及时完成而影响信息的提供)。
已发表 2006年11月22日 12:54 作者 smallfrogs
归档在:

评论通知

如果您想在帖子更新时接到邮件通知,请先登录。这里

订阅帖子评论使用 RSS

评论

尚无任何评论

说说您的看法?

(必填) 
必填 
(必填)