英偉達顯卡更新新版本后開機卡在歡迎界面或黑屏的原因以及解決辦法
先拋出個結(jié)論,之后給分析結(jié)果,說明(文中的dllmain對應(yīng)dll入口點,模塊的入口點函數(shù)名不一定名字都是dllmain)
結(jié)論:
Dwm.exe進程初始化LdrInitializeThunk內(nèi)部先映射dll,在一塊兒調(diào)用這些dll的dllmain,在調(diào)用user32的dllmain時,加載英偉達的nvinitx.dll這個模塊使用SHGetShellFolder,該函數(shù)使用了rpcrt4.dll中的一些數(shù)據(jù),但是鎖相關(guān)數(shù)據(jù)還沒有被初始化(因為按調(diào)用順序先后還沒有調(diào)用到rpcrt4.dl它的dllmain)就使用,之后導致異常,出現(xiàn)死鎖情況。最終導致黑屏或者卡在系統(tǒng)歡迎界面。
分析的簡要過程:1.從卡時獲取的dump上看explorer卡在ConnectPort到dwm.exe的一個port。

2.查看dwm.exe中的線程,發(fā)現(xiàn)其中一個線程卡在調(diào)用SHGetShellFolder函數(shù)內(nèi)部。這個卡之后就導致explorer.exe工作異常,一直卡在鏈接dwm.exe中的port。

3. 查看鎖sechost!SddlSidLookupCritical的狀態(tài),發(fā)現(xiàn)此鎖被dwm.exe主線程占用,沒有釋放。 仔細分析發(fā)現(xiàn)主線程正常情況下不應(yīng)該釋放不了這個臨界區(qū)。

4.猜測只可能出現(xiàn)什么異常導致沒有釋放這個臨界區(qū)。
(上雙機調(diào)試)調(diào)試發(fā)現(xiàn)dwm.exe的主線程中英偉達nvinitx.dll的dllmain會調(diào)用SHGetFoldPathW函數(shù),這個函數(shù)調(diào)用的時候,已經(jīng)占用了鎖SddlSidLookupCritical,這個時候在去調(diào)用RPCRT4.dll中相關(guān)函數(shù),卻在調(diào)用EnterCriticalSection獲取rpcrt4的臨界區(qū)GlobalMutex出現(xiàn)異常,跳出到shell32中的異常處理函數(shù)_GSHandlerCheck_EH,這個時候?qū)е聸]有釋放SddlSidLookupCritical鎖,SHGetFoldPathW就返回了。查看了下異常,發(fā)現(xiàn)rpcrt4中的臨界區(qū)該臨界區(qū)GlobalMutex沒有初始化,dllmain 內(nèi)部很多其它變量值也沒有初始化,可以確定是dllmain沒有被調(diào)用到。


5. ida分析可以知道GlobalMutex的初始化在rpcrt4.dll的dllmain內(nèi)部 。所以可以知道出問題的原因就是rpcrt4.dll的dllmain沒有調(diào)用到,那么為什么會導致這個dllmain沒有調(diào)用掉呢?
6. 分析發(fā)現(xiàn)這個SHGetFoldPathW的調(diào)用是在nvinitx.dll的dllmain中。
ntdll!LdrpInitializeProcess函數(shù)先映射導入表中的dll在調(diào)用這些dll中的dllmain函數(shù)。
這個出問題環(huán)境調(diào)試發(fā)現(xiàn)rpcr4.dll中dllmain并沒有調(diào)用到,這個時候gdi32的dllmain函數(shù)內(nèi)部調(diào)用loadlibrary加載nvinitx.dll,并調(diào)用nvinitx.dll的dllmain函數(shù),但是這個時候調(diào)用LdrpLoadDll加載rpcr4.dll的時候,(之前剛映射,這個時候LdrpLoadDll發(fā)現(xiàn)rpcr4.dll已經(jīng)被映射了,所以就不會調(diào)用這個rpcr4.dll的dllmain函數(shù))
Loadlibrary調(diào)用LdrpLoadDll(這個函數(shù)先檢查模塊rpcr4.dll是否映射,發(fā)現(xiàn)已經(jīng)映射就不會調(diào)用這個的dllmain,接下來調(diào)用其它函數(shù)使用臨界區(qū)GlobalMutex就出現(xiàn)異常崩潰)這個rpcr4.dll的dllmain會在接下來的ntdll!LdrpRunInitalizeroutines函數(shù)內(nèi)部調(diào)用 。


7.更新了英偉達顯卡驅(qū)動372.54及372.70版本后,開機啟動過程中,經(jīng)過上面一系列的異常調(diào)用,最終系統(tǒng)會被卡在歡迎界面或個別電腦出現(xiàn)黑屏的情況。
相關(guān)閱讀:
英偉達顯卡設(shè)置在哪 NVIDIA控制面板打開方法圖文介紹
英偉達為解決Chrome崩潰等問題 發(fā)布GeForce熱修復驅(qū)動
相關(guān)文章
- 英偉達GeForce GTX 1070已經(jīng)正式開售了,對于PC黨來說NVIDIA全新一代顯卡GeForce GTX 1070/1080無疑已經(jīng)成為新一代神器,當然對于囊中羞澀的各位來說GTX 1070絕對是首選,2016-06-12
英偉達發(fā)布Win10 GeForce系列驅(qū)動 為新游戲而備戰(zhàn)
微軟新一代操作系統(tǒng)Win10發(fā)布在即,英偉達也及時推出了新顯卡驅(qū)動以適配Windows10操作系統(tǒng),那么接下來隨腳本之家一起去看看吧2015-06-28NVIDIA(英偉達)顯卡提示溫度過高的解決方法?顯卡溫度過高的原因有哪
這篇文章主要介紹了NVIDIA(英偉達)顯卡提示溫度過高的解決方法以及出現(xiàn)溫度過高的原因有哪些,,需要的朋友可以參考下2015-05-20英偉達k1跑分多少?NVIDIA 英偉達 k1處理器跑分曝光
英偉達k1跑分多少?想知道的朋友就繼續(xù)往下看,今天小編介紹的是NVIDIA 英偉達 k1處理器跑分哦2014-05-20英偉達Tegra4平板電腦震懾全場 四核平板匯威Fly one性能測試
平板電腦的選擇越來越多,但很多朋友對他們的性能卻了解不多,給大家介紹一些2013-12-28- 如果你不及時更新你的顯卡驅(qū)動的話就會出現(xiàn)游戲不完全顯示的狀況,接下來為大家分享下升級英偉達顯卡驅(qū)動的具體方法,感興趣的朋友可以參考下,希望可以幫助到你2013-04-27

