我在Windows XP SP2下運(yùn)行一個(gè)含有Windows Vista UAC manifest內(nèi)容的程序時(shí),系統(tǒng)突然藍(lán)屏了。重啟以后我發(fā)現(xiàn)這個(gè)藍(lán)屏不是由于驅(qū)動(dòng)程序造成的,而是由于CSRSS.EXE 崩潰導(dǎo)致的。
Microsoft更新了KB 921337知識(shí)庫(kù)文章,介紹了一下這個(gè)問(wèn)題的具體成因是由于編譯器造成的,并且說(shuō)明這個(gè)問(wèn)題將在 Visual Studio 2005 SP1里面得到解決。數(shù)天以前,Visual Studio 2005 SP1發(fā)布并修正了這個(gè)問(wèn)題。
問(wèn)題解決了,那么為什么會(huì)造成這個(gè)問(wèn)題呢?
故障原因:
究其原因是由于Visual Studio 2005 RTM自帶的一個(gè)組件mt.exe自作聰明的(或者就是這樣設(shè)計(jì)的)在編譯的時(shí)候修改了用戶添加的UAC manifest內(nèi)容,同時(shí),由于Windows XP SP2的SXS.DLL模塊在解析被Visual Studio 2005 RTM修改以后的UAC manifest時(shí)存在一個(gè)訪問(wèn)越界的BUG導(dǎo)致崩潰。由于這2個(gè)原因,最終導(dǎo)致了在manifest里面加入Windows Vista UAC所用信息以后可能導(dǎo)致Windows XP SP2崩潰的問(wèn)題。
根據(jù)Microsoft UAC 開(kāi)發(fā)文檔,應(yīng)用程序可以在manifest里面添加關(guān)于UAC的相關(guān)描述信息,如下所示:
level="highestAvailable"
uiAccess="false"
/>
上述內(nèi)容添加到manifest以后,將由mt.exe添加到PE文件里面,使用Visual Studio 2005 RTM編譯以后生成的manifest內(nèi)容如下(可以使用Resource Hacker查看EXE文件里面的manifest內(nèi)容):
遺憾的是,由于Visual Studio 2005自帶的mt.exe的BUG,mt.exe在編譯的時(shí)候?qū)⒁粋€(gè)錯(cuò)誤的標(biāo)記附加給了上述內(nèi)容,出現(xiàn)了2個(gè)schema:
xmlns="urn:schemas-microsoft-com:asm.v3">
正是由于這2個(gè)schema的存在,最終導(dǎo)致了Windows XP SP2的SXS.DLL崩潰和Windows的藍(lán)屏。
Microsoft更新了KB 921337知識(shí)庫(kù)文章,介紹了一下這個(gè)問(wèn)題的具體成因是由于編譯器造成的,并且說(shuō)明這個(gè)問(wèn)題將在 Visual Studio 2005 SP1里面得到解決。數(shù)天以前,Visual Studio 2005 SP1發(fā)布并修正了這個(gè)問(wèn)題。
問(wèn)題解決了,那么為什么會(huì)造成這個(gè)問(wèn)題呢?
故障原因:
究其原因是由于Visual Studio 2005 RTM自帶的一個(gè)組件mt.exe自作聰明的(或者就是這樣設(shè)計(jì)的)在編譯的時(shí)候修改了用戶添加的UAC manifest內(nèi)容,同時(shí),由于Windows XP SP2的SXS.DLL模塊在解析被Visual Studio 2005 RTM修改以后的UAC manifest時(shí)存在一個(gè)訪問(wèn)越界的BUG導(dǎo)致崩潰。由于這2個(gè)原因,最終導(dǎo)致了在manifest里面加入Windows Vista UAC所用信息以后可能導(dǎo)致Windows XP SP2崩潰的問(wèn)題。
根據(jù)Microsoft UAC 開(kāi)發(fā)文檔,應(yīng)用程序可以在manifest里面添加關(guān)于UAC的相關(guān)描述信息,如下所示:
uiAccess="false"
/>
上述內(nèi)容添加到manifest以后,將由mt.exe添加到PE文件里面,使用Visual Studio 2005 RTM編譯以后生成的manifest內(nèi)容如下(可以使用Resource Hacker查看EXE文件里面的manifest內(nèi)容):
遺憾的是,由于Visual Studio 2005自帶的mt.exe的BUG,mt.exe在編譯的時(shí)候?qū)⒁粋€(gè)錯(cuò)誤的標(biāo)記附加給了上述內(nèi)容,出現(xiàn)了2個(gè)schema:
正是由于這2個(gè)schema的存在,最終導(dǎo)致了Windows XP SP2的SXS.DLL崩潰和Windows的藍(lán)屏。