錯誤檢查0x139:KERNEL_SECURITY_CHECK_FAILURE

KERNEL_SECURITY_CHECK_FAILURE錯誤檢查的值為 0x00000139。 這個錯誤檢查指出核心偵測到重大資料結構的損毀。

重要

本文適用于程式設計人員。 如果您是在使用電腦時收到藍色螢幕錯誤碼的客戶,請參閱 針對藍色畫面錯誤進行疑難排解

錯誤檢查0x139 KERNEL_SECURITY_CHECK_FAILURE參數

參數 描述
1 損毀的類型。 如需詳細資訊,請參閱下列表格。
2 造成錯誤檢查之例外狀況的陷阱框架位址
3 造成錯誤檢查之例外狀況的例外狀況記錄位址
4 保留

下表描述參數 1 的可能值。

參數 1 描述
0 堆疊式緩衝區已過度執行, (舊版 /GS 違規) 。
1 VTGuard 檢測程式碼偵測到嘗試使用不合法的虛擬函式資料表。 一般而言,C++ 物件已損毀,然後嘗試使用損毀物件的 這個 指標進行虛擬方法呼叫。
2 堆疊 Cookie 檢測程式碼偵測到堆疊型緩衝區溢位 (/GS 違規) 。
3 例如,雙移除) (損毀LIST_ENTRY。 如需詳細資訊,請參閱下列原因一節。
4 保留
5 不正確參數已傳遞至考慮無效參數嚴重之函式。
6 載入器未正確初始化堆疊 Cookie 安全性 Cookie。 這可能是因為建置驅動程式只在Windows 8上執行,並嘗試在舊版 Windows 上載入驅動程式映射。 若要避免這個問題,您必須建置驅動程式,才能在舊版 Windows 上執行。
7 已要求嚴重程式結束。
8 編譯器插入的陣列界限檢查偵測到不合法的陣列索引作業。
9 RtlQueryRegistryValues 的 呼叫是在沒有RTL_QUERY_REGISTRY_TYPECHECK的情況下指定RTL_QUERY_REGISTRY_DIRECT,而且目標值不在受信任的系統 hive 中。
10 間接呼叫防護檢查偵測到不正確控制傳輸。
11 寫入防護檢查偵測到記憶體寫入無效。
12 嘗試切換至不正確光纖內容。
13 嘗試指派不正確暫存器內容。
14 物件的參考計數無效。
18 嘗試切換至無效jmp_buf內容。
19 已對唯讀資料進行不安全的修改。
20 密碼編譯自我測試失敗。
21 偵測到不正確例外狀況鏈結。
22 發生密碼編譯程式庫錯誤。
23 在 DllMain 內呼叫無效。
24 偵測到不正確映射基底位址。
25 保護延遲載入匯入時發生無法復原的失敗。
26 呼叫不安全的擴充功能。
27 已叫用已被取代的服務。
28 偵測到超出界限的緩衝區存取。
29 RTL_BALANCED_NODE RBTree 專案已損毀。
37 已叫用超出範圍的交換器跳躍專案。
38 longjmp 嘗試使用不正確目標。
39 匯出隱藏的呼叫目標無法成為有效的呼叫目標。

原因

使用參數 1 資料表和傾印檔案,可以縮小此類型許多錯誤檢查的原因。

LIST_ENTRY損毀可能難以追蹤,而且這個錯誤檢查表示在將個別清單專案專案新增至清單或從清單中移除) 時,偵測到兩次連結清單 (不一致。 不幸的是,在發生損毀時不一定會偵測到不一致的情況,因此可能需要一些偵測工作來識別根本原因。

清單專案損毀的常見原因包括:

  • 驅動程式已損毀核心同步處理物件,例如 KEVENT (例如,當執行緒仍在等候該相同 KEVENT 時,或允許堆疊型 KEVENT 超出範圍,而另一個執行緒使用該 KEVENT) 。 這種類型的錯誤檢查通常發生在 nt!Ke* 或 nt!Ki* 程式碼。 當執行緒完成等候同步處理物件或程式碼嘗試將同步處理物件置於訊號狀態時,就會發生此情況。 通常,正在發出訊號的同步處理物件是已損毀的同步處理物件。 有時候,具有特殊集區的驅動程式驗證器有助於追蹤 (如果損毀的同步處理物件位於已釋出) 的集區區塊中。
  • 驅動程式已損毀定期 KTIMER。 這種類型的錯誤檢查通常發生在 nt!Ke* 或 nt!Ki* 程式碼並涉及發出計時器訊號,或從計時器資料表插入或移除計時器。 正在操作的計時器可能是損毀的計時器,但可能需要使用 !timer (檢查計時器資料表,或手動執行計時器清單連結) ,以識別已損毀的計時器。 有時候,具有特殊集區的驅動程式驗證器有助於追蹤 (如果損毀的 KTIMER 位於已釋出) 的集區區塊中。
  • 驅動程式有錯誤的內部LIST_ENTRY樣式連結清單。 典型的範例會在相同的清單專案上呼叫 RemoveEntryList 兩次,而不會在兩個 RemoveEntryList 呼叫之間重新插入清單專案。 其他變化是可行的,例如將專案插入同一份清單中。
  • 驅動程式已釋放包含LIST_ENTRY的資料結構,而不從其對應的清單中移除資料結構,導致稍後在重複使用舊集區區塊之後檢查清單時偵測到損毀。
  • 驅動程式已以並行方式使用LIST_ENTRY樣式清單,而不需進行適當的同步處理,因而造成清單的損毀更新。

在大部分情況下,您可以藉由向前和向後 (dldlb 命令來查看連結清單來識別損毀的資料結構,對於此用途) 和比較結果很有用。 其中,向前和向後逐步解說之間的清單不一致通常是損毀的位置。 由於連結清單更新作業可以修改鄰近專案的清單連結,因此您應該仔細查看損毀清單專案的芳鄰,因為它們可能是基礎原因。

由於許多系統元件在內部使用LIST_ENTRY清單,因此使用系統 API 的驅動程式所管理的各種資源錯誤類型可能會導致系統管理的連結清單損毀。

解決方案

判斷此問題的原因通常需要使用偵錯工具來收集其他資訊。 應該檢查多個傾印檔案,以查看此停止程式碼是否有類似的特性,例如停止程式碼出現時所執行的程式碼。

如需詳細資訊,請參閱使用 Windows 偵錯工具進行損毀傾印分析, (WinDbg) 使用 !analyze 延伸模組!analyze

使用事件記錄檔來查看是否有導致此停止程式碼的較高層級事件。

這些一般疑難排解秘訣可能很有説明。

  • 如果最近有在系統中新增硬體,請嘗試予以移除或更換。 或向製造商確認是否有任何可用的修補檔。

  • 如果最近有新增裝置驅動程式或系統服務,請嘗試加以移除或更新。 嘗試判斷系統中造成新錯誤檢查程式碼出現什麼變更。

  • 檢查系統登入事件檢視器是否有其他錯誤訊息,以協助找出造成錯誤的裝置或驅動程式。 如需詳細資訊,請參閱開啟事件檢視器。 在系統記錄中尋找與藍色畫面發生時相同的時間範圍內,是否有發生嚴重錯誤。

  • 查看裝置管理員,以查看是否有任何裝置以驚嘆號標示 (!) 。 檢閱驅動程式屬性中顯示的事件記錄檔,以取得任何錯誤驅動程式。 請嘗試更新相關驅動程式。

  • 執行病毒偵測程式。 病毒可以感染針對 Windows 格式化的所有硬碟類型,而產生的磁片損毀可能會產生系統錯誤檢查碼。 請確定病毒偵測程式會檢查主要開機記錄是否有感染。

  • 如需其他一般疑難排解資訊,請參閱 藍色螢幕資料

另請參閱

使用 Windows 偵錯工具進行損毀傾印分析 (WinDbg)

使用 WinDbg 分析 Kernel-Mode 傾印檔案