如果你的系統(tǒng)超過2GB內(nèi)存,在圖形界面中你將不會看到完全內(nèi)存轉(zhuǎn)儲選項。其原因在KB274598中進行了描述。但我們可以通過將 HKLMSystemCurrentControlSetControlCrashControl下的CrashDumpEnabled值設(shè)置為1來強制啟用它(改這個值在圖形界面中完全內(nèi)存轉(zhuǎn)儲仍不會顯示出來)。如果你需要完全內(nèi)存轉(zhuǎn)儲來做更詳盡的排錯,也可以考慮使用Boot.ini中的MAXMEM 開關(guān)將32位操作系統(tǒng)所使用的內(nèi)存限制在2GB或更少(可以參考KB108393),此時系統(tǒng)就會將完全內(nèi)存轉(zhuǎn)儲選項顯示來。
現(xiàn)在回到Dump文件如何被產(chǎn)生這個話題。一旦轉(zhuǎn)儲功能被啟用,操作系統(tǒng)會自動寫一個以“Dump_”開頭的磁盤迷你端口驅(qū)動到啟動分區(qū),并校驗與創(chuàng)建Dump文件相關(guān)的所有組件。包括:磁盤迷你端口驅(qū)動、寫入Dump文件的I/O管理函數(shù)和啟動分區(qū)的頁面文件。最終所得的校驗結(jié)果會被保存起來,每當系統(tǒng)啟動時KeBugCheck函數(shù)會重新進行校驗并與之前的結(jié)果相比對。如果校驗結(jié)果不匹配,將不會有Dump文件被寫入磁盤(因為有破壞磁盤數(shù)據(jù)的危險);如果檢驗結(jié)果匹配,Dump信息會被寫入已經(jīng)被寫到磁盤啟動分區(qū)上的頁面文件當中。文件系統(tǒng)會被完全繞過,因為它也有可能是造成崩潰的原因之一。當SMSS.EXE在啟動過程中開啟內(nèi)存分頁時,系統(tǒng)會仔細檢查啟動分區(qū)頁面文件當中的信息。如果有崩潰信息,這部分頁面文件就會被保護起來。如果啟動過程中的所有或部分啟動分區(qū)頁面文件不可用,系統(tǒng)會提示虛擬內(nèi)存過低(暫時)。啟動進程執(zhí)行完成之后WINLOGON.EXE會調(diào)用 SAVEDUMP.EXE進程從頁面文件中抽出崩潰信息,并將Dump文件寫到磁盤上。
在Windows Server 2003上,某些過程可能會有不同,請參考KB886429。當Server啟動之后,Windows會要求在啟動分區(qū)上創(chuàng)建一個和物理內(nèi)存相同大小的臨時文件。如果磁盤空間不足,Dump還是會生成,不過會被系統(tǒng)縮減大小。在創(chuàng)建Dump操作過程的初期,會話管理子系統(tǒng) ?。⊿MSS.EXE)就會介入驗證內(nèi)存Dump信息是否有效。如果Dump信息有效,SMSS.EXE會將Dump文件重命名為Dumpxxx.tmp,進而存儲Dumpxxx.tmp 到啟動分區(qū)并設(shè)置HKLM/System/CurrentControlSet/Control/CrashControl/MachineCrash下的TempDestination和DumpFile值?! AVEDUMP.EXE便會讀取這2個值,并在判定文件的有效性之后將Dumpxxx.tmp 保存成Memory.dmp。
現(xiàn)在回到Dump文件如何被產(chǎn)生這個話題。一旦轉(zhuǎn)儲功能被啟用,操作系統(tǒng)會自動寫一個以“Dump_”開頭的磁盤迷你端口驅(qū)動到啟動分區(qū),并校驗與創(chuàng)建Dump文件相關(guān)的所有組件。包括:磁盤迷你端口驅(qū)動、寫入Dump文件的I/O管理函數(shù)和啟動分區(qū)的頁面文件。最終所得的校驗結(jié)果會被保存起來,每當系統(tǒng)啟動時KeBugCheck函數(shù)會重新進行校驗并與之前的結(jié)果相比對。如果校驗結(jié)果不匹配,將不會有Dump文件被寫入磁盤(因為有破壞磁盤數(shù)據(jù)的危險);如果檢驗結(jié)果匹配,Dump信息會被寫入已經(jīng)被寫到磁盤啟動分區(qū)上的頁面文件當中。文件系統(tǒng)會被完全繞過,因為它也有可能是造成崩潰的原因之一。當SMSS.EXE在啟動過程中開啟內(nèi)存分頁時,系統(tǒng)會仔細檢查啟動分區(qū)頁面文件當中的信息。如果有崩潰信息,這部分頁面文件就會被保護起來。如果啟動過程中的所有或部分啟動分區(qū)頁面文件不可用,系統(tǒng)會提示虛擬內(nèi)存過低(暫時)。啟動進程執(zhí)行完成之后WINLOGON.EXE會調(diào)用 SAVEDUMP.EXE進程從頁面文件中抽出崩潰信息,并將Dump文件寫到磁盤上。
在Windows Server 2003上,某些過程可能會有不同,請參考KB886429。當Server啟動之后,Windows會要求在啟動分區(qū)上創(chuàng)建一個和物理內(nèi)存相同大小的臨時文件。如果磁盤空間不足,Dump還是會生成,不過會被系統(tǒng)縮減大小。在創(chuàng)建Dump操作過程的初期,會話管理子系統(tǒng) ?。⊿MSS.EXE)就會介入驗證內(nèi)存Dump信息是否有效。如果Dump信息有效,SMSS.EXE會將Dump文件重命名為Dumpxxx.tmp,進而存儲Dumpxxx.tmp 到啟動分區(qū)并設(shè)置HKLM/System/CurrentControlSet/Control/CrashControl/MachineCrash下的TempDestination和DumpFile值?! AVEDUMP.EXE便會讀取這2個值,并在判定文件的有效性之后將Dumpxxx.tmp 保存成Memory.dmp。