2012-02-14 27 views
0

我需要檢測由不同操作系統中的BSOD引起的重新啓動。可以追蹤這種情況嗎?內存轉儲足夠嗎? Windows 7顯示一個很好的對話框,系統已經從一個嚴重錯誤中恢復 - 它是如何知道的?在重新啓動到另一個操作系統後,可以可靠地檢測到BSOD?

+0

你爲什麼不給更多的信息。什麼導致了BSOD?你看看Windows 7的轉儲嗎?它是哪個操作系統?你採取了什麼確切的步驟來產生這些結果? ... – tenfour 2012-02-14 15:42:55

+0

BSODs是由驅動程序引起的,我希望更具體,但我不被允許。 – Baczek 2012-02-14 17:06:51

回答

1

搜索互聯網似乎Windows 嘗試生成C:/Windows/Minidump轉儲文件。你可以在那裏尋找文件。請注意,我說嘗試,因爲BSOD可能非常致命,無法創建轉儲文件(例如,在硬盤驅動器崩潰期間,出於顯而易見的原因)。

您可以在文件上查找創建日期以檢測最新的日期。

這顯然要求你可以在另一個操作系統中掛載Windows文件系統,但它似乎是一個體面的解決方案。

+0

有趣的是,即使BSOD是由硬盤驅動器消失造成的(我的主板/ SATA控制器和早期的SATA3 SSD進入參數定期,導致主板轉儲驅動器,BSOD,它*嘗試*生成轉儲,並要求冷啓動)。 Windows會在下次啓動時看到崩潰,儘管我從未查找轉儲。 – ssube 2012-02-14 15:35:59

2

Windows提供了一個接口來註冊一個callback on bugchecks因此,您可能會註冊一個函數來執行特定於錯誤檢查的事情 - 創建一個簡單的文件或類似的東西,然後在這個其他操作系統中,您可能會檢查此文件是否存在 - 如果它確實那麼你的錯誤檢查回調就會被執行。錯誤檢查已經發生?當然,你需要考慮的是,你的函數的調用是在IRQL爲HIGH_LEVEL的情況下發出的,所以你必須看到什麼限制適用,這也是在Windows驅動程序開發領域。

+0

問題說「__after__重新啓動到__another__ OS」。該操作系統可能根本不是Windows,並且在BSOD之後發起回調,實屬徒勞。 – orlp 2012-02-14 15:33:07

+0

如果在這個回調中,他可以創建一個文件或者一個持久的東西。所以其他操作系統可以檢查這個「東西」是否存在?雖然我似乎無法找到充分的理由想要這樣做 – LordDoskias 2012-02-14 15:36:50

+0

我已經看過了BugCheckCallback,但我還沒有任何想法,如果它被允許寫入磁盤 - IOW,我不明白是什麼限於http://www.osronline.com/ddkx/kmarch/other_1anb.htm。我很滿意能夠寫入磁盤上的預定義扇區,但文件顯然會更好。 – Baczek 2012-02-14 16:45:26

0

您可以編寫一個簡單的Windows服務,將狀態信息寫入其他操作系統可以查找的地方。例如,這可以是MBR,專用分區或USB記憶棒之後的未使用扇區之一。

當服務啓動時,您會寫一條消息來指示Windows已啓動並正在運行,可能帶有時間戳。你可能經常更新它,甚至可以包含狀態信息,例如CPU負載或驅動程序加載/卸載事件,如果這很有用的話。當服務檢測到系統正在關閉時,它會寫入一條消息說明。當您的其他操作系統查看此信息時,如果最後一條消息沒有說系統有意關閉,那麼您可以斷定Windows崩潰了。 Windows做了類似的事情,以便引導裝載程序可以提供在安全模式下引導系統。

顯然,這不能讓你區分BSOD和其他類型的崩潰,如果系統掉電,你會得到誤報。如果在系統關機過程中發生BSOD,您也無法檢測到BSOD。這些警告是否重要取決於你沒有告訴我們的細節。

0

默認情況下,Windows會在系統崩潰時將事件記錄到事件日誌中。 (請參閱下面的評論)。

+0

我相信在系統重新啓動到Windows之後會發生這種情況,即在這種情況下太遲而無法使用。即使事件已經寫好,除非您知道解析來自其他操作系統的Windows事件日誌的方法,否則它將無濟於事。 – 2012-02-22 22:10:11

+0

Hummm,在kernelmode中寫入日誌的最簡單方法是通過EventLog的內核API。但是你可能是對的,我不確定內核是否在重啓後寫入事件。解析Windows事件脫機是可能的,解析二進制數據[MSDN](http://msdn.microsoft.com/en-us/library/windows/desktop/bb309026%28v=vs.85%29.aspx)或Win7中的XML 。 – zapador 2012-02-23 12:01:46

0

不是正常的方式,因爲crashdump實際上是通過執行BSoD的代碼寫入頁面文件,然後在重新啓動後,Windows將其寫入最終轉儲文件。

相關問題