我在windows xp sp2下執行乙個含有windows vista uac manifest內容的程式時,系統突然藍屏了。重啟以後我發現這個藍屏不是由於驅動程式造成的,而是由於csrss.exe 崩潰導致的。
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的相關描述資訊,如下所示:
上述內容新增到manifest以後,將由mt.exe新增到pe檔案裡面,使用visual studio 2005 rtm編譯以後生成的manifest內容如下(可以使用resource hacker檢視exe檔案裡面的manifest內容):
遺憾的是,由於visual studio 2005自帶的mt.exe的bug,mt.exe在編譯的時候將乙個錯誤的標記附加給了上述內容,出現了2個schema:
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
操作方法:
開啟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
操作方法:
無論使用上述那個方法,都可以解決由於manifest問題而導致的windows xp sp2藍屏現象。
最後,讓我們看看使用新版本mt.exe以後編譯uac manifest 產生的內容。使用resource hacker開啟編譯好以後的pe檔案,然後選擇24節點,檢視內容可以發現使用新版本mt.exe以後編譯uac manifest 產生的內容和當初在manifest裡面新增的內容完全一致。新版本mt.exe再沒有自作主張的修改manifest內容了。
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
xpsp2問世之後啟用經典場景的問題分析
經過我們漫長的等待,windows xp sp2終於和我們見面了。這個在歷史上耗資最大的補丁程式在給我們帶來快速 穩定的作業系統的同時,對於d版使用者新的問題出現了,我們需要面對他的啟用問題。這幾天小寧在群組裡蒐集了一些經典的場景,同時做了一次小白,把所得到的經驗分享給大家。場景1 我的作業系統是w...
manifest檔案導致,網狐無法正常工作問題
網狐棋牌,大多數都是舊版本的 而且gameengine.lib庫沒有 gameengine.lib是vs低階版本開發的,如果用vs更高版本開發程式時,生產debug版程式本無法正常工作.將以下 加入到stdafx.h中即可,可解決當前在vs2008版本開發的問題.鏈結 pragma comment ...
wsl2 ip變動導致docker不可訪問
初次沒有關機的情況下 docker內部的所有執行的映象內容是可以通過localhost訪問到的,但是重啟後,發現映象都是執行的,所有位址都變得不可訪問,這主要是由於docker內部ip位址改變引起的,下面就來說說如何解決 wsl2host.exe install安裝完後會出現以下提示資訊讓你輸入wi...