共用方式為


應用程式驗證器 - 停止代碼 - 基本概念

下列停止代碼包含在基本測試集內。

例外狀況停止詳細數據

嘗試在非可執行記憶體中執行程序代碼(第一次機會)。

可能的原因

如果應用程式嘗試從非可執行或免費位址執行程序代碼,就會產生此停止。 若要偵錯此停止:

  • u <parameter2> - 解編罪魁禍首程式碼
  • .exr <參數3> - 顯示例外狀況資訊
  • .cxr <參數4> - 顯示例外狀況內容資訊
  • KB - 顯示引發例外狀況時的堆疊追蹤。

應用程式驗證程式所顯示 資訊
  • 參數 1 - 正在存取的位址。
  • 參數 2 - 程式代碼執行無效存取。
  • 參數 3 - Exception 記錄。 使用 .exr 來顯示它。
  • 參數 4 - Context record。 使用 .cxr 來顯示它。

其他資訊
  • 測試層: 異常
  • 停止標識碼: FIRST_CHANCE_ACCESS_VIOLATION_CODE
  • 停止代碼: 650
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

處理停止詳細數據

目前堆疊追蹤的句柄例外狀況無效。

可能的原因

如果堆疊頂端的函式傳遞無效的句柄給系統例程,就會產生此停止。 通常,一個簡單的「kb」命令會顯示傳遞的句柄的值(它必須是參數之一 - 通常是第一個參數)。 如果值為 null,則這顯然是錯誤的。 如果值看起來正常,您必須使用 '!htrace' 偵錯工具延伸模組來取得與此句柄值相關的作業歷程記錄。 在大部分情況下,句柄值會在關閉之後使用。

應用程式驗證程式所顯示 資訊
  • 參數 1 - 未使用 。
  • 參數 2 - 未使用 。
  • 參數 3 - 未使用 。
  • 參數 4 - 未使用 。

其他資訊
  • 測試層: 處理
  • 停止標識碼: INVALID_HANDLE
  • 停止代碼: 300
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

用於目前堆疊追蹤的 TLS 索引無效。

可能的原因

如果堆疊頂端的函式將無效的 TLS 索引傳遞至 TLS 系統例程,就會產生此停止。 通常,一個簡單的「kb」命令會揭示問題所在。 這裡的典型錯誤是假設 TLS 索引的特定值,而不是呼叫 'TlsAlloc'。 假設您一律取得值 N,因此不需要呼叫 'TlsAlloc',即可發生這種情況。 更常見的是由於未初始化的變數。

應用程式驗證程式所顯示 資訊
  • 參數 1 - 無效的 TLS 索引。
  • 參數 2 - 預期索引的下半部。
  • 參數 3 - 未使用 。
  • 參數 4 - 未使用 。

其他資訊
  • 測試層: 處理
  • 停止標識碼: INVALID_TLS_VALUE
  • 停止代碼: 301
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

WaitForMultipleObjects 呼叫的參數無效。

可能的原因

如果堆疊頂端的函式呼叫 'WaitForMultipleObjects',並將 Null 作為要等候的控制碼陣列位址,或以零作為控制碼數目,則會產生此停止。 一個簡單的「kb」命令將顯示呼叫此 API 的函數不正確。

應用程式驗證程式所顯示 資訊
  • 參數 1 - 物件句柄向量的位址。
  • 參數 2 - 句柄數目。
  • 參數 3 - 未使用 。
  • 參數 4 - 未使用 。

其他資訊
  • 測試層: 處理
  • 停止標識碼: INCORRECT_WAIT_CALL
  • 停止代碼: 302
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

傳遞為參數的NULL句柄。 必須使用有效的句柄。

可能的原因

如果堆疊頂端的函式將 NULL 句柄傳遞至系統例程,就會產生此停止。 通常,一個簡單的「kb」命令會顯示傳遞的句柄的值(它必須是其中一個參數,通常是第一個參數)。

應用程式驗證程式所顯示 資訊
  • 參數 1 · 使用 NULL 句柄
  • 參數 2 - Not used
  • 參數 3 - Not used
  • 參數 4 - Not used

其他資訊
  • 測試層: 處理
  • 停止標識碼: NULL_HANDLE
  • 停止代碼: 303
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

在 DllMain 中等候線程句柄。

可能的原因

如果目前執行緒目前在目前進程中載入其中一個 DLL 的 'DllMain' 函式內執行程式碼,而且它呼叫 'WaitForSingleObject' 或 'WaitForMultipleObjects' 來等候相同進程中的執行緒控制碼,則會產生此停止。 這很可能會導致死結,因為除非第二個執行程結束,否則執行緒控制碼不會收到訊號。 當第二個執行線呼叫 'ExitThread' 時,它會嘗試取得 DLL 載入器鎖定,然後針對目前進程中的所有 DLL 呼叫 'DllMain' (DLL_THREAD_DETACH) 。 由於載入器鎖定是由第一個執行緒 (等候執行緒控點的執行緒) 所擁有,因此這兩個執行緒將會死鎖。

應用程式驗證程式所顯示 資訊
  • 參數 1 - Thread 句柄。
  • 參數 2 - 未使用 。
  • 參數 3 - 未使用 。
  • 參數 4 - 未使用 。

其他資訊
  • 測試層: 處理
  • 停止標識碼: WAIT_IN_DLLMAIN
  • 停止代碼: 304
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

句柄的物件類型不正確。

可能的原因

如果目前線程呼叫具有物件類型不正確物件句柄的API,就會產生此停止。 例如,使用號誌控制碼作為參數呼叫 'SetEvent' 會產生此停止。 若要偵錯此停止:

  • KB - 顯示目前的堆疊追蹤。 罪魁禍首可能是調用 verifier.dll 的 DLL
  • du <parameter2> - 顯示控制碼的實際類型。 句柄值是parameter1。 在前面的範例中,這會顯示「信號量」。
  • du <parameter3> - 顯示 API 預期的物件類型。 在先前的範例中,此名稱為「事件」。
  • !htrace <參數1> - 可能會有所幫助,因為它會顯示此句柄上最近開啟/關閉作業的堆疊追蹤。

應用程式驗證程式所顯示 資訊
  • 參數 1 - Handle 值。
  • 參數 2 - Object 類型名稱。 使用 du 來顯示它
  • 參數 3 - 預期的物件類型名稱。 使用 du 來顯示它
  • 參數 4 - 未使用 。

其他資訊
  • 測試層: 處理
  • 停止標識碼: INCORRECT_OBJECT_TYPE
  • 停止代碼: 305
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

堆積停止詳細數據

未知的誤差。

可能的原因

如果遇到的錯誤無法以任何其他方式分類,就可能發生此訊息。 目前未使用。

應用程式驗證程式所顯示 資訊
  • 參數 1 - Not used
  • 參數 2 - Not used
  • 參數 3 - Not used
  • 參數 4 - Not used

其他資訊
  • 測試層: 堆
  • 停止標識碼: UNKNOWN_ERROR
  • 停止代碼: 0x1
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

存取違規例外狀況。

可能的原因

這是最常見的應用程式驗證程式停止。 通常是由緩衝區滿溢錯誤所造成。 堆積驗證程式會在堆積配置結束時放置無法存取的頁面,而緩衝區滿溢會導致觸碰此頁面而造成例外狀況。 若要偵錯此停止,請識別造成例外狀況的存取位址,然後使用下列偵錯工具命令:

  • !heap -p -a ACCESS_ADDRESS - 此命令提供錯誤本質的詳細數據,以及滿溢的堆積區塊。 它也會提供區塊配置的堆疊追蹤。 此停止還有其他原因,例如在釋放之後存取堆積區塊。 相同的偵錯工具命令適用於此案例。

應用程式驗證程式所顯示 資訊
  • 參數 1 - 造成例外狀況的地址無效
  • 參數 2 - 執行無效存取的程式代碼位址
  • 參數 3 - Exception 記錄
  • 參數 4 - Context record

其他資訊
  • 測試層: 堆
  • 停止標識碼: ACCESS_VIOLATION
  • 停止代碼: 0x2
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

使用 HEAP_NO_SERIALIZE 旗標建立之堆積中的多線程存取。

可能的原因

使用 HEAP_NO_SERIALIZE 旗標建立的堆積不應該同時從兩個線程存取。 如果偵測到這種情況,您將收到此訊息。 這種情況通常會透過連結至 C 運行時間的單一線程版本,來爬入程式。 例如,Visual C++ 可以在使用適當的旗標時靜態連結這類程式庫。 然後開發人員會忘記這個細節並使用多個執行緒。 Bug 在現實生活中很難偵錯,因為它會顯示為神秘的數據損毀。

應用程式驗證程式所顯示 資訊
  • 參數 1 - 發生作業的堆積。
  • 參數 2 - 堆積重要區段目前擁有者的線程標識符。
  • 參數 3 - 嘗試輸入堆積之目前線程的線程標識碼。
  • 參數 4 - Not used

其他資訊
  • 測試層: 堆
  • 停止標識碼: UNSYNCHRONIZED_ACCESS
  • 停止代碼: 0x3
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

極端大小要求。

可能的原因

如果在 'HeapAlloc' 或 'HeapReAlloc' 作業中,區塊的大小高於任何合理的值,則會產生此訊息。 此值通常是在 32 位平臺上0x80000000,在 64 位平臺上明顯更大。

應用程式驗證程式所顯示 資訊
  • 參數 1 - 發生作業的堆積。
  • 參數 2 - 要求的大小
  • 參數 3 - Not used
  • 參數 4 - Not used

其他資訊
  • 測試層: 堆
  • 停止標識碼: EXTREME_SIZE_REQUEST
  • 停止代碼: 0x4
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

具有不正確簽章的堆積句柄。

可能的原因

堆積結構會以magic值標記。 如果堆積介面呼叫中使用的堆積句柄沒有此模式,則會產生此停止。 如果內部堆積結構損毀(隨機損毀),或只是使用假值做為堆積句柄,就可能發生這個錯誤。 若要取得有效的堆積控制碼值清單,請使用下列偵錯工具命令:

  • !堆 -p

請注意,如果您只是在堆積操作中將有效的堆控制點切換為另一個有效的堆控制點,您將不會得到此停止(畢竟控制點看起來有效)。 不過,資料堆驗證器會偵測到此狀況,並報告它並SWITCHED_HEAP_HANDLE停止。

應用程式驗證程式所顯示 資訊
  • 參數 1 - 堆積句柄,用於呼叫堆積介面
  • 參數 2 - Not used
  • 參數 3 - Not used
  • 參數 4 - Not used

其他資訊
  • 測試層: 堆
  • 停止標識碼: BAD_HEAP_HANDLE
  • 停止代碼: 0x5
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

損毀的堆積指標或使用錯誤的堆積。

可能的原因

一般而言,如果區塊配置在一個堆積中,並在另一個堆積中釋放,就會發生這種情況。 使用 '!heap -p' 偵錯工具命令來取得所有有效堆積控制碼值的清單。 最常見的範例是使用 'malloc' 的 msvcrt 配置,搭配使用 'HeapFree' 的 kernel32 解除配置。

應用程式驗證程式所顯示 資訊
  • 參數 1 - 堆積句柄用於呼叫。
  • 參數 2 - 與作業相關的堆積區塊。
  • 參數 3 - 堆積區塊的大小。
  • 參數 4 - 堆積,其中區塊原本已配置。

其他資訊
  • 測試層: 堆
  • 停止標識碼: SWITCHED_HEAP_HANDLE
  • 停止代碼: 0x6
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

堆積區塊已釋放。

可能的原因

如果區塊釋放兩次,就會發生這種情況。 已釋放的區塊會以特殊方式標示,並在延遲的免費佇列中四處保留一段時間。 如果有錯誤的程式嘗試再次釋放區塊,則會擷取此區塊 - 假設區塊未從延遲可用佇列中出入佇列,且其記憶體重複用於其他配置。 無延遲隊列的深度約為數千個區塊,因此很有可能大多數雙倍免費隊列被捕獲。

應用程式驗證程式所顯示 資訊
  • 參數 1 - 擁有區塊之堆積的堆積句柄。
  • 參數 2 - 堆積區塊會再次釋放。
  • 參數 3 - 堆積區塊的大小。
  • 參數 4 - Not used

其他資訊
  • 測試層: 堆
  • 停止標識碼: DOUBLE_FREE
  • 停止代碼: 0x7
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

損毀的堆積區塊。

可能的原因

如果堆積區塊中的損毀無法放在更特定的類別中,則這是一般錯誤。

應用程式驗證程式所顯示 資訊
  • 參數 1 - 堆積句柄用於呼叫。
  • 參數 2 - 與作業相關的堆積區塊。
  • 參數 3 - 堆積區塊的大小。
  • 參數 4 - Reserved

其他資訊
  • 測試層: 堆
  • 停止標識碼: CORRUPTED_HEAP_BLOCK
  • 停止代碼: 0x8
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

嘗試終結進程堆積。

可能的原因

嘗試終結預設進程堆積 ('GetProcessHeap()' 介面傳回的堆積) 是錯誤。

應用程式驗證程式所顯示 資訊
  • 參數 1 - 堆積句柄與 HeapDestroy 搭配使用。
  • 參數 2 - Not used
  • 參數 3 - Not used
  • 參數 4 - Not used

其他資訊
  • 測試層: 堆
  • 停止標識碼: DESTROY_PROCESS_HEAP
  • 停止代碼: 0x9
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

堆積程式碼中引發非預期的例外狀況。

可能的原因

如果在執行資料堆管理程式程式碼時,在非法情況下引發存取違規,則會產生此停止。 在少數情況下,這是可以的,例如呼叫 'HeapValidate()' 或 'HeapSize()' 時。 例外狀況記錄資訊 (第三個參數) 可用來尋找例外狀況的確切內容。 為此,請使用下列偵錯工具命令:

  • dd 參數2 L2
  • .exr first_dword
  • .cxr second_dword

通常,如果內部資料堆結構中有一些隨機損毀,就會發生此停止。

應用程式驗證程式所顯示 資訊
  • 參數 1 - 作業所涉及的堆積。
  • 參數 2 - Exception 記錄。
  • 參數 3 - Context record。
  • 參數 4 - 例外狀況代碼 (C0000005 - 存取違規)

其他資訊
  • 測試層: 堆
  • 停止標識碼: UNEXPECTED_EXCEPTION
  • 停止代碼: 0xA
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

驗證堆積區塊標頭時引發的例外狀況。

可能的原因

如果我們真的無法判斷區塊的任何特定類型損毀,就會發生這種情況。 例如,當傳遞給堆積免費操作的堆塊地址指向不可訪問的內存區域(損壞的指標、未初始化的指標等)時,就會發生這種情況。

應用程式驗證程式所顯示 資訊
  • 參數 1 - 擁有區塊之堆積的堆積句柄。
  • 參數 2 - 堆積區塊已損毀。
  • 參數 3 - 如果無法判斷大小,則為區塊的大小或零。
  • 參數 4 - 未使用 。

其他資訊
  • 測試層: 堆
  • 停止標識碼: CORRUPTED_HEAP_BLOCK_EXCEPTION_RAISED_FOR_HEADER
  • 停止代碼: 0xB
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

驗證堆積區塊時引發的例外狀況。

可能的原因

如果我們真的無法判斷區塊的任何特定類型損毀,就會發生這種情況。 例如,如果您在堆積可用作業期間傳遞指向不可存取記憶體區域的位址,您就會取得此情況。 如果我們在完整頁面堆積區塊中找不到區塊,而且我們會將其探查為淺色頁面堆積區塊,也可能會發生這種情形。

應用程式驗證程式所顯示 資訊
  • 參數 1 - 堆積句柄用於呼叫。
  • 參數 2 - 與作業相關的堆積區塊。
  • 參數 3 - 堆積區塊的大小。
  • 參數 4 - Reserved。

其他資訊
  • 測試層: 堆
  • 停止標識碼: CORRUPTED_HEAP_BLOCK_EXCEPTION_RAISED_FOR_PROBING
  • 停止代碼: 0xC
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

釋放後堆積會封鎖損毀。

可能的原因

如果在釋放后寫入記憶體區塊,就會發生這種情況。

應用程式驗證程式所顯示 資訊
  • 參數 1 - 擁有區塊之堆積的堆積句柄。
  • 參數 2 - 堆積區塊已損毀。
  • 參數 3 - 如果無法判斷大小,則為區塊的大小或零。
  • 參數 4 - 未使用 。

其他資訊
  • 測試層: 堆
  • 停止標識碼: CORRUPTED_HEAP_BLOCK_HEADER
  • 停止代碼: 0xD
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

釋放堆積區塊的損毀 infix 模式。

可能的原因

釋放的區塊有時會標示為無法存取,而接觸它們的程式將違反 (不同的驗證程式停止)。 在其他情況下(例如輕量級頁面堆),區塊會標示有魔術圖案,並會保留一段時間。 最終以 FIFO 的方式, 區塊得到真正釋放。 此時會檢查不正則模式,如果已修改,您將會取得此中斷。 中斷時間的堆疊並不相關。 您必須瞭解區塊的本質,並檢閱可能錯誤的程序代碼。

應用程式驗證程式所顯示 資訊
  • 參數 1 - 擁有區塊之堆積的堆積句柄。
  • 參數 2 - 堆積區塊正在釋放。
  • 參數 3 - 堆積區塊的大小。
  • 參數 4 - Reserved。

其他資訊
  • 測試層: 堆
  • 停止標識碼: CORRUPTED_FREED_HEAP_BLOCK
  • 停止代碼: 0xE
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

堆積區塊的損毀後綴模式。

可能的原因

這通常是針對緩衝區滿溢錯誤所發生的。 有時候應用程式驗證程式會在配置和緩衝區滿溢結束時放置無法存取的頁面,會導致存取違規,有時堆積區塊後面接著魔術模式。 如果此模式在區塊釋出時變更,您將會收到此中斷。 這些中斷可能相當難以偵錯,因為您沒有發生損毀的實際時刻。 您只能存取空閒時間 (即「此處停止發生」) 和分配堆疊追蹤 ('!heap -p -a HEAP_ADDRESS')

應用程式驗證程式所顯示 資訊
  • 參數 1 - 堆積句柄用於呼叫。
  • 參數 2 - 與作業相關的堆積區塊。
  • 參數 3 - 堆積區塊的大小。
  • 參數 4 - Reserved。

其他資訊
  • 測試層: 堆
  • 停止標識碼: CORRUPTED_HEAP_BLOCK_SUFFIX
  • 停止代碼: 0xF
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

堆積區塊損毀的起始戳記。

可能的原因

這會發生於緩衝區不足的情況。

應用程式驗證程式所顯示 資訊
  • 參數 1 - 堆積句柄用於呼叫。
  • 參數 2 - 與作業相關的堆積區塊。
  • 參數 3 - 堆積區塊的大小。
  • 參數 4 - 損毀的戳記值。

其他資訊
  • 測試層: 堆
  • 停止標識碼: CORRUPTED_HEAP_BLOCK_START_STAMP
  • 停止代碼: 0x10
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

堆積區塊損毀的結束戳記。

可能的原因

這會發生於緩衝區不足的情況。

應用程式驗證程式所顯示 資訊
  • 參數 1 - 堆積句柄用於呼叫。
  • 參數 2 - 與作業相關的堆積區塊。
  • 參數 3 - 堆積區塊的大小。
  • 參數 4 - 損毀的戳記值。

其他資訊
  • 測試層: 堆
  • 停止標識碼: CORRUPTED_HEAP_BLOCK_END_STAMP
  • 停止代碼: 0x11
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

堆積區塊的損毀前置詞模式。

可能的原因

這會發生於緩衝區不足的情況。

應用程式驗證程式所顯示 資訊
  • 參數 1 - 堆積句柄用於呼叫。
  • 參數 2 - 與作業相關的堆積區塊。
  • 參數 3 - 堆積區塊的大小。
  • 參數 4 - Reserved。

其他資訊
  • 測試層: 堆
  • 停止標識碼: CORRUPTED_HEAP_BLOCK_PREFIX
  • 停止代碼: 0x12
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

目前堆疊追蹤的第一次機會存取違規。

可能的原因

這是最常見的應用程式驗證程式停止。 通常是由緩衝區滿溢錯誤所造成。 堆積驗證程式會在堆積配置結束時放置無法存取的頁面,而緩衝區滿溢會導致觸碰此頁面而造成例外狀況。 若要偵錯此停止,請識別造成例外狀況的存取位址,然後使用下列偵錯工具命令:

  • !堆 -p -a ACCESS_ADDRESS

此命令將提供有關錯誤性質以及溢出的堆塊的詳細信息。 它也會為區塊配置提供堆疊追蹤。 此停止還有其他幾個原因,例如在釋放後存取堆積區塊。 相同的偵錯工具命令將適用於此情況。

應用程式驗證程式所顯示 資訊
  • 參數 1 - 造成例外狀況的地址無效。
  • 參數 2 - 執行無效存取的程式代碼位址。
  • 參數 3 - Exception 記錄。
  • 參數 4 - Context record。

其他資訊
  • 測試層: 堆
  • 停止標識碼: FIRST_CHANCE_ACCESS_VIOLATION
  • 停止代碼: 0x13
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

無效的進程堆積清單計數。

可能的原因

如果在呼叫 GetProcessHeaps 時,頁面堆積管理員偵測到一些內部不一致,則可能會發生此訊息。 這可能會由進程空間中的一些隨機損毀所造成。

應用程式驗證程式所顯示 資訊
  • 參數 1 - 實際堆積計數。
  • 參數 2 - Page 堆積計數。
  • 參數 3 - Not used
  • 參數 4 - Not used

其他資訊
  • 測試層: 堆
  • 停止標識碼: CORRUPTED_HEAP_LIST
  • 停止代碼: 0x14
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

洩漏停止詳細數據

堆積配置已外洩。

可能的原因

如果擁有資源時動態卸除配置的擁有者 dll,就會產生此停止。

應用程式驗證程式所顯示 資訊
  • 參數 1 - 洩漏配置位址。 執行 !heap -p -a <位址> ,以取得配置的其他資訊。
  • 參數 2 - 配置堆疊追蹤的位址。 執行 dps <位址> 以檢視配置堆疊。
  • 參數 3 - 擁有者 dll 名稱的位址。 執行 du <address> 以讀取 dll 名稱。
  • 參數 4 - 擁有者 dll 的基底。 執行 .reload <dll_name> = <address> 以重載擁有者 dll。 使用 『lm』 取得已載入和卸除模組的詳細資訊。

其他資訊
  • 測試層: 洩漏
  • 停止標識碼: 分配
  • 停止代碼: 0x900
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

句柄洩露。

可能的原因

如果擁有資源時動態卸除句柄的擁有者 dll,就會產生此停止。 若要偵錯此停止:執行 !htrace parameter1 以取得句柄的其他資訊。

應用程式驗證程式所顯示 資訊
  • 參數 1 - 洩漏句柄的值。 執行 !htrace <句柄> ,以在啟用句柄追蹤時取得句柄的其他資訊。
  • 參數 2 - 配置堆疊追蹤的位址。 執行 dps <位址> 以檢視配置堆疊。
  • 參數 3 - 擁有者 dll 名稱的位址。 執行 du <address> 以讀取 dll 名稱。
  • 參數 4 - 擁有者 dll 的基底。 執行 .reload <dll_name> = <address> 以重載擁有者 dll。 使用 『lm』 取得已載入和卸除模組的詳細資訊。

其他資訊
  • 測試層: 洩漏
  • 停止標識碼: 處理
  • 停止代碼: 0x901
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

HKEY 洩露。

可能的原因

如果擁有資源時動態卸除登錄機碼的擁有者 dll,就會產生此停止。

應用程式驗證程式所顯示 資訊
  • 參數 1 - 外泄 HKEY 的值。
  • 參數 2 - 配置堆疊追蹤的位址。 執行 dps <位址> 以檢視配置堆疊。
  • 參數 3 - 擁有者 dll 名稱的位址。 執行 du <address> 以讀取 dll 名稱。
  • 參數 4 - 擁有者 dll 的基底。 執行 .reload <dll_name> = <address> 以重載擁有者 dll。 使用 『lm』 取得已載入和卸除模組的詳細資訊。

其他資訊
  • 測試層: 洩漏
  • 停止標識碼: 註冊表
  • 停止代碼: 0x902
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

虛擬保留已外洩。

可能的原因

如果擁有資源時動態卸除虛擬保留的擁有者 dll,就會產生此停止。

應用程式驗證程式所顯示 資訊
  • 參數 1 - 外泄的保留位址。
  • 參數 2 - 配置堆疊追蹤的位址。 執行 dps <位址> 以檢視配置堆疊。
  • 參數 3 - 擁有者 dll 名稱的位址。 執行 du <address> 以讀取 dll 名稱。
  • 參數 4 - 擁有者 dll 的基底。 執行 .reload <dll_name> = <address> 以重載擁有者 dll。 使用 『lm』 取得已載入和卸除模組的詳細資訊。

其他資訊
  • 測試層: 洩漏
  • 停止標識碼: VIRTUAL_RESERVATION
  • 停止代碼: 0x903
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

BSTR 洩露了。

可能的原因

如果擁有資源時動態卸除 SysString 的擁有者 dll,就會產生此停止。

應用程式驗證程式所顯示 資訊
  • 參數 1 - 洩漏之 BSTR 的位址。 執行 !heap -p -a <位址> ,以取得配置的其他資訊。
  • 參數 2 - 配置堆疊追蹤的位址。 執行 dps <位址> 以檢視配置堆疊。
  • 參數 3 - 擁有者 dll 名稱的位址。 執行 du <address> 以讀取 dll 名稱。
  • 參數 4 - 擁有者 dll 的基底。 執行 .reload <dll_name> = <address> 以重載擁有者 dll。 使用 『lm』 取得已載入和卸除模組的詳細資訊。

其他資訊
  • 測試層: 洩漏
  • 停止標識碼: SYSSTRING
  • 停止代碼: 0x904
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

未取消註冊電源通知。

可能的原因

如果註冊電源通知的 dll,且未取消註冊,就會產生此停止。

應用程式驗證程式所顯示 資訊
  • 參數 1 - 電源通知註冊的位址。
  • 參數 2 - 位址至註冊堆棧追蹤。 執行 dps <位址> 以檢視配置堆疊。
  • 參數 3 - 擁有者 dll 名稱的位址。 執行 du <address> 以讀取 dll 名稱。
  • 參數 4 - 擁有者 dll 的基底。 執行 .reload <dll_name> = <address> 以重載擁有者 dll。 使用 『lm』 取得已載入和卸除模組的詳細資訊。

其他資訊
  • 測試層: 洩漏
  • 停止標識碼: POWER_NOTIFICATION
  • 停止代碼: 0x905
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

鎖定停止詳細數據

線程不能擁有重要區段。

可能的原因

如果線程(線程標識碼為parameter1)已終止、暫停或處於狀態(背景工作線程已完成工作專案),且無法保存重要區段,就會產生此停止。 目前的線程是罪魁禍首。 若要偵錯此停止,請使用下列偵錯工具命令:

  • KB - 取得目前的堆疊追蹤。 如果目前的線程是重要區段的擁有者,它可能會呼叫 ExitThread。 目前的線程應該已在結束之前釋放重要區段。 如果目前的線程呼叫 TerminateThread 或 SuspendThread,則不應該對持有重要區段的線程執行此動作。
  • !cs -s <parameter2> - 傾印此重要區段的相關資訊。
  • ln <parameter2> - 顯示臨界區段位址附近的符號。 這應該有助於識別外洩的重要區段。
  • dps <parameter4> - 傾印此重要區段初始化的堆疊追蹤。

應用程式驗證程式所顯示 資訊
  • 參數 1 - Thread ID。
  • 參數 2 - Critical 區段位址。
  • 參數 3 - Critical 區段偵錯資訊位址。
  • 參數 4 - Critical 區段初始化堆疊追蹤。

其他資訊
  • 測試層: 鎖
  • 停止標識碼: EXIT_THREAD_OWNS_LOCK
  • 停止代碼: 0x200
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

卸除包含作用中關鍵區段的 DLL。

可能的原因

如果 DLL 具有包含重要區段且 DLL 已卸除但尚未刪除重要區段的全域變數,就會產生此停止。 若要偵錯此停止,請使用下列偵錯工具命令:

  • du <parameter3> - 傾印罪魁禍首 DLL 的名稱。
  • .reload dllname.reload dllname = <parameter4> - 重新載入該 DLL 的符號。
  • !cs -s <parameter1> - 傾印此重要區段的相關資訊。
  • ln <parameter1> - 顯示臨界區段位址附近的符號。 這應該有助於識別外洩的重要區段。
  • dps <parameter2> - 傾印此重要區段起始設定的堆疊追蹤。

應用程式驗證程式所顯示 資訊
  • 參數 1 - Critical 區段位址。
  • 參數 2 - Critical 區段初始化堆疊追蹤。
  • 參數 3 - DLL 名稱位址。
  • 參數 4 - DLL 基位址。

其他資訊
  • 測試層: 鎖
  • 停止標識碼: LOCK_IN_UNLOADED_DLL
  • 停止代碼: 0x201
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

釋放包含作用中關鍵區段的堆積區塊。

可能的原因

如果堆積配置包含重要區段,則會產生此停止,配置會釋出,而且尚未刪除重要區段。 若要偵錯此停止,請使用下列偵錯工具命令:

  • !cs -s <(parameter1)> - 傾印此重要區段的相關資訊。
  • ln <parameter1> - 顯示臨界區段位址附近的符號。 這應該有助於識別外洩的重要區段。
  • dps <parameter2> - 傾印此重要區段起始設定的堆疊追蹤。
  • < parameter3><parameter4> 可能有助於瞭解此堆積區塊的配置位置 (配置的大小可能很重要) 。

應用程式驗證程式所顯示 資訊
  • 參數 1 - Critical 區段位址。
  • 參數 2 - Critical 區段初始化堆疊追蹤。
  • 參數 3 - Heap 區塊位址。
  • 參數 4 - Heap 區塊大小。

其他資訊
  • 測試層: 鎖
  • 停止標識碼: LOCK_IN_FREED_HEAP
  • 停止代碼: 0x202
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

雙重初始化或損毀的重要區段。

可能的原因

如果重要區段已初始化一次以上,通常會產生此停止。 在此案例中,parameter3 和 parameter4 是這兩個初始化的堆疊追蹤位址。 其他時候,如果重要區段或其偵錯資訊結構已損毀,可能會停止此停止。 在第二個案例中,參數 3 和 parameter4 可能是無效且無用的。 若要偵錯此停止:

  • !cs -s -d <parameter2> - 傾印此重要區段的相關資訊。
  • ln <parameter1> - 顯示臨界區段位址附近的符號。 如果這是全域變數,這可能有助於識別關鍵區段。
  • dps <parameter3>dps <parameter4> - 以識別初始化此重要區段的兩個程式代碼路徑。

應用程式驗證程式所顯示 資訊
  • 參數 1 - Critical 區段位址。
  • 參數 2 - 使用中清單中找到的偵錯資訊結構的位址。
  • 參數 3 - First 初始化堆疊追蹤。
  • 參數 4 - 第二個初始化堆疊追蹤。

其他資訊
  • 測試層: 鎖
  • 停止標識碼: LOCK_DOUBLE_INITIALIZE
  • 停止代碼: 0x203
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

包含作用中關鍵區段的可用記憶體。

可能的原因

如果釋放包含重要區段的記憶體,但未使用DeleteCriticalSection刪除重要區段,就會產生此停止。 若要偵錯此停止,請使用下列偵錯工具命令:</p。>

  • !cs -s -d <parameter2> - 傾印此重要區段的相關資訊。
  • dps <parameter3> - 識別初始化此重要區段的程式碼路徑。

在大部分情況下,鎖定驗證器會偵測堆積配置、DLL 範圍、虛擬記憶體配置或 MapViewOfFile 對應的記憶體範圍中立即洩漏的重要區段,並在這些情況下發出不同的停止問題。 因此,此驗證器停止的案例很少。 鎖定必須位於由內核模式程式代碼釋放的記憶體範圍中,或由 VirtualFreeEx 等 API 釋放跨進程。 大部分情況下,如果在調試程式控制台中按 'g' 繼續前一個停止 (例如LOCK_IN_FREED_HEAP或LOCK_IN_UNLOADED_DLL),就會遇到此停止。

應用程式驗證程式所顯示 資訊
  • 參數 1 - Critical 區段位址。
  • 參數 2 - Critical 區段偵錯資訊位址。
  • 參數 3 - Critical 區段初始化堆疊追蹤。
  • 參數 4 - 未使用 。

其他資訊
  • 測試層: 鎖
  • 停止標識碼: LOCK_IN_FREED_MEMORY
  • 停止代碼: 0x204
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

損毀的重要區段。

可能的原因

如果重要區段的 DebugInfo 欄位指向釋放的記憶體,就會產生此停止。 通常另一個有效的 DebugInfo 結構可在使用中關鍵區段清單中找到。 如果沒有損毀,兩個指標應該相同。 若要偵錯此停止,請使用下列偵錯工具命令:

  • !cs -s -d <parameter3> - 根據作用中清單中找到的偵錯資訊結構目前內容,傾印此重要區段的相關資訊 (此結構很少損毀,因此通常此資訊是可信賴的) 。
  • !cs -s <parameter1> - 根據重要區段結構的目前內容,傾印此重要區段的相關資訊 (結構已損毀,因此有時此資訊不可信) 。
  • dps <parameter4> - 識別初始化此重要區段的程式碼路徑。

傾印位址參數 1> 的重要<區段,並尋找損毀模式。 使用 ntdll.dl 的良好符號,您可以使用下列命令:

  • dt ntdll!_RTL_CRITICAL_SECTION LOCK_ADDRESS
  • dt ntdll!_RTL_CRITICAL_SECTION_DEBUG DEBUG_ADDRESS

應用程式驗證程式所顯示 資訊
  • 參數 1 - Critical 區段位址。
  • 參數 2 - 這個重要區段的偵錯資訊地址無效。
  • 參數 3 - 使用中清單中找到的偵錯資訊位址。
  • 參數 4 - 初始化堆疊追蹤。

其他資訊
  • 測試層: 鎖
  • 停止標識碼: LOCK_CORRUPTED
  • 停止代碼: 0x205
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

無效的重要區段擁有者線程。

可能的原因

如果目前內容中的擁有者線程標識碼無效,就會產生此停止。 若要偵錯此停止:

  • !cs -s <parameter1> - 傾印此重要區段的相關資訊。
  • ln <parameter1> - 顯示臨界區段位址附近的符號。 這應該有助於識別關鍵區段。

應用程式驗證程式所顯示 資訊
  • 參數 1 - Critical 區段位址。
  • 參數 2 - 擁有線程。
  • 參數 3 - 預期的擁有線程。
  • 參數 4 - Critical 區段偵錯資訊位址。

其他資訊
  • 測試層: 鎖
  • 停止標識碼: LOCK_INVALID_OWNER
  • 停止代碼: 0x206
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

無效的重要區段遞歸計數。

可能的原因

如果重要區段結構的遞歸計數位段在目前內容中無效,就會產生此停止。 若要偵錯此停止:

  • !cs -s <parameter1> - 傾印此重要區段的相關資訊。
  • ln <parameter1> - 顯示臨界區段位址附近的符號。 這應該有助於識別關鍵區段。

應用程式驗證程式所顯示 資訊
  • 參數 1 - Critical 區段位址。
  • 參數 2 - 遞歸計數。
  • 參數 3 - 預期的遞歸計數。
  • 參數 4 - Critical 區段偵錯資訊位址。

其他資訊
  • 測試層: 鎖
  • 停止標識碼: LOCK_INVALID_RECURSION_COUNT
  • 停止代碼: 0x207
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

刪除具有無效鎖定計數的重要區段。

可能的原因

如果刪除重要區段,或是未初始化重要區段,就會產生此停止。 若要偵錯此停止:

  • !cs -s <parameter1> - 傾印此重要區段的相關資訊。 如果擁有線程為 0,則尚未初始化關鍵區段。
  • ln <parameter1> - 顯示臨界區段位址附近的符號。 這應該有助於識別關鍵區段。

應用程式驗證程式所顯示 資訊
  • 參數 1 - Critical 區段位址。
  • 參數 2 - Lock count。
  • 參數 3 - 預期的鎖定計數。
  • 參數 4 - 擁有線程。

其他資訊
  • 測試層: 鎖
  • 停止標識碼: LOCK_INVALID_LOCK_COUNT
  • 停止代碼: 0x208
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

重大區段過度發行或損毀。

可能的原因

如果重要區段的發行次數超過目前線程取得的次數,就會產生此停止。 若要偵錯此停止:

  • !cs -s <parameter1> - 傾印此重要區段的相關資訊。
  • !cs -s -d <parameter4> - 傾印此重要區段的相關資訊。
  • ln <parameter1> - 顯示臨界區段位址附近的符號。 這應該有助於識別關鍵區段。

應用程式驗證程式所顯示 資訊
  • 參數 1 - Critical 區段位址。
  • 參數 2 - Lock count。
  • 參數 3 - 預期的鎖定計數。
  • 參數 4 - Critical 區段偵錯資訊位址。

其他資訊
  • 測試層: 鎖
  • 停止標識碼: LOCK_OVER_RELEASED
  • 停止代碼: 0x209
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

重要區段未初始化。

可能的原因

如果使用重要區段而不初始化,或在刪除該區段之後,就會產生此停止。 若要偵錯此停止:

  • ln <parameter1> - 顯示臨界區段位址附近的符號。 這應該有助於識別關鍵區段。

應用程式驗證程式所顯示 資訊
  • 參數 1 - Critical 區段位址。
  • 參數 2 - Critical 區段偵錯資訊位址。
  • 參數 3 - 未使用 。
  • 參數 4 - 未使用 。

其他資訊
  • 測試層: 鎖
  • 停止標識碼: LOCK_NOT_INITIALIZED
  • 停止代碼: 0x210
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

重要區段已初始化。

可能的原因

如果目前線程重新初始化重要區段,就會產生此停止。 若要偵錯此停止:

  • !cs -s <parameter1>!cs -s -d <parameter2> - 傾印此重要區段的相關資訊。
  • ln <parameter1> - 顯示臨界區段位址附近的符號。 如果這是全域變數,這可能有助於識別關鍵區段。
  • dps <parameter3> - 識別此重要區段第一次初始化的程式碼路徑。
  • KB - 顯示目前的堆疊追蹤,即重新初始化此重要區段。

應用程式驗證程式所顯示 資訊
  • 參數 1 - Critical 區段位址。
  • 參數 2 - Critical 區段偵錯資訊位址。
  • 參數 3 - First 初始化堆疊追蹤。 如果非 NULL,請使用 dps 來傾印它
  • 參數 4 - 未使用 。

其他資訊
  • 測試層: 鎖
  • 停止標識碼: LOCK_ALREADY_INITIALIZED
  • 停止代碼: 0x211
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

釋放包含作用中關鍵區段的虛擬記憶體。

可能的原因

如果目前線程在包含作用中關鍵區段的記憶體區塊上呼叫 VirtualFree,就會產生此停止。 如果釋放此記憶體,應用程式應該先在此重要區段上呼叫DeleteCriticalSection。

  • kb - 顯示目前的堆疊追蹤,也就是呼叫 VirtualFree。 可能的罪魁禍首是呼叫 VirtualFree 的 DLL。
  • !cs -s <parameter1> - 傾印此重要區段的相關資訊。
  • dps <parameter2> - 以識別初始化此重要區段的程式碼路徑。

應用程式驗證程式所顯示 資訊
  • 參數 1 - Critical 區段位址。
  • 參數 2 - Critical 區段初始化堆疊追蹤。
  • 參數 3 - Memory 區塊位址。
  • 參數 4 - 記憶體區塊大小。

其他資訊
  • 測試層: 鎖
  • 停止標識碼: LOCK_IN_FREED_VMEM
  • 停止代碼: 0x212
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

取消對應包含作用中關鍵區段的記憶體區域。

可能的原因

如果目前線程在包含作用中關鍵區段的記憶體區塊上呼叫 UnmapViewOfFile,就會產生此停止。 如果取消對應此記憶體,應用程式應該先在此重要區段上呼叫DeleteCriticalSection。

  • kb - 顯示目前的堆疊追蹤,也就是呼叫 UnmapViewOfFile 。 可能的罪魁禍首是呼叫 UnmapViewOfFile 的 DLL。
  • !cs -s <parameter1> - 傾印此重要區段的相關資訊。
  • dps <parameter2> - 以識別初始化此重要區段的程式碼路徑。

應用程式驗證程式所顯示 資訊
  • 參數 1 - Critical 區段位址。
  • 參數 2 - Critical 區段初始化堆疊追蹤。
  • 參數 3 - Memory 區塊位址。
  • 參數 4 - 記憶體區塊大小。

其他資訊
  • 測試層: 鎖
  • 停止標識碼: LOCK_IN_UNMAPPED_MEM
  • 停止代碼: 0x213
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

目前的線程不會擁有任何重要區段。

可能的原因

如果目前的線程呼叫 LeaveCriticalSection,就會產生此停止,但根據內部驗證程序記事,它不會擁有任何重要區段。 如果 \<parameter2\> 為零,則可能是目前執行緒中的錯誤。 它可能嘗試保留它未輸入的重要區段,或呼叫 LeaveCriticalSection 的次數比針對相同重要區段稱為 EnterCriticalSection 的次數還要多。 如果 \<parameter2\> 不是零 (它是負整數) ,則內部驗證器資料結構可能已損毀。

應用程式驗證程式所顯示 資訊
  • 參數 1 - Critical 區段位址。
  • 參數 2 - 目前線程所擁有的重要區段數目。
  • 參數 3 - Not used
  • 參數 4 - Not used

其他資訊
  • 測試層: 鎖
  • 停止標識碼: THREAD_NOT_LOCK_OWNER
  • 停止代碼: 0x214
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

使用另一個 DLL 私用的重要區段。

可能的原因

如果目前線程嘗試使用位於另一個 DLL 內的私用鎖定,就會產生此停止。 例如,a.dll 嘗試輸入在 ntdll.dll內定義的重要區段。 私人鎖定無法在 DLL 之間使用。

應用程式驗證程式所顯示 資訊
  • 參數 1 - Critical 區段位址。
  • 參數 2 - 未使用 。
  • 參數 3 - Not used
  • 參數 4 - Not used

其他資訊
  • 測試層: 鎖
  • 停止標識碼: LOCK_PRIVATE
  • 停止代碼: 0x215
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

SRWLock 停止詳細數據

SRW 鎖定未初始化。

可能的原因

如果線程嘗試使用未初始化的SRW鎖定 (Param1),就會產生此停止。 若要偵錯此停止,請使用 'kb' 取得目前的堆疊追蹤。 這是使用 SRW 鎖定的位置。 SRW 鎖定應該先使用 'InitializeSRWLock' 初始化,才能使用。

應用程式驗證程式所顯示 資訊
  • 參數 1 - SRW 鎖定
  • 參數 2 - Not used
  • 參數 3 - Not used
  • 參數 4 - Not used

其他資訊
  • 測試層: SRWLock
  • 停止標識碼: NOT_INITIALIZED
  • 停止代碼: 0x250
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

SRW 鎖定已初始化。

可能的原因

如果 SRW 鎖定 (Param1) 正在重新初始化,就會產生此停止。 如果其他線程正主動使用SRW鎖定,重新初始化鎖定會導致應用程式無法預期的行為,包括停止響應和當機。 如果 SRW 鎖定已靜態初始化,初始化堆疊追蹤可能會顯示取得。 若要偵錯此停止:

  • KB - 取得目前的堆疊追蹤。 這是重新初始化 SRW 鎖定的位置。
  • dps <parameter3> — 取得 SRW 鎖定初始化堆疊追蹤。 如果鎖定是以靜態方式初始化,此堆疊追蹤可能會顯示取得。

應用程式驗證程式所顯示 資訊
  • 參數 1 - SRW 鎖定
  • 參數 2 - 初始化 SRW 鎖定之線程的 ThreadId。
  • 參數 3 - 初始化堆疊追蹤的位址。 使用 dps <位址> 查看 SRW 鎖定的初始化位置。
  • 參數 4 - Not used

其他資訊
  • 測試層: SRWLock
  • 停止標識碼: ALREADY_INITIALIZED
  • 停止代碼: 0x251
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

SRW 鎖定上的不相符 Acquire-Release。

可能的原因

如果 SRW 鎖定 (Param1) 正以錯誤的發行 API 發行,就會產生此停止。 如果已針對共用存取取得 SRW 鎖定,且正使用獨占發行 API 釋放,或已取得 SRW 鎖定進行獨佔存取,且正使用共用發行 API 來發行。 這可能會導致應用程式無法預期的行為,包括停止回應和當機。 若要偵錯此停止:

  • KB - 取得目前的堆疊追蹤。 這是使用錯誤 API 釋放 SRW 鎖定的位置。
  • dps <parameter3> — 取得 SRW 鎖定取得堆疊追蹤。

應用程式驗證程式所顯示 資訊
  • 參數 1 - SRW 鎖定
  • 參數 2 - 取得 SRW 鎖定之線程的 ThreadId。
  • 參數 3 - 取得堆棧追蹤的位址。 使用 dps <位址> 查看取得 SRW 鎖定的位置。
  • 參數 4 - Not used

其他資訊
  • 測試層: SRWLock
  • 停止標識碼: MISMATCHED_ACQUIRE_RELEASE
  • 停止代碼: 0x252
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

SRW 鎖定是以遞歸方式由同一個線程取得。

可能的原因

如果相同線程以遞歸方式取得 SRW 鎖定 (Param1),就會產生此停止。 這會導致死結,線程會無限期封鎖。 以獨佔模式擷取 SRW 鎖定的遞歸擷取會導致死結。 當有線程等候獨佔存取時,以共用模式擷取 SRW 鎖定的遞歸擷取會導致死結。 請考慮下列範例:- 線程 A 會以共用模式取得 SRW 鎖定 - 線程 B 嘗試以獨佔模式取得 SRW 鎖定並等候 - 線程 A 嘗試以遞歸方式取得共用模式中的 SRW 鎖定。 只要沒有獨佔服務員(在此案例中為 B),這會成功。 由於 SRW 鎖定沒有寫入器饑餓,線程 A 會在線程 B 後面等候。現在,線程 B 正在等候線程 A,而線程 A 又等待線程 B 導致迴圈等候,因而造成死結。 若要偵錯此停止:

  • KB - 取得目前的堆疊追蹤。 這是以遞歸方式取得 SRW 鎖定的位置。
  • dps <parameter2> - 取得第一次取得的堆疊追蹤。

應用程式驗證程式所顯示 資訊
  • 參數 1 - SRW 鎖定
  • 參數 2 - 第一個取得堆棧追蹤的位址。 使用 dps <位址> 查看取得 SRW 鎖定的位置。
  • 參數 3 - Not used
  • 參數 4 - Not used

其他資訊
  • 測試層: SRWLock
  • 停止標識碼: RECURSIVE_ACQUIRE
  • 停止代碼: 0x253
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

正在結束或終止的線程擁有SRW鎖定。

可能的原因

如果擁有 SRW 鎖定的線程 (Param2) 正在結束或終止,就會產生此停止。 這會導致孤立的 SRW 鎖定,而嘗試取得此鎖定的線程將會無限期封鎖。 若要偵錯他的停止:

  • KB - 取得目前的堆疊追蹤。 這是線程即將結束或正在終止的位置。
  • dps <parameter3> — 取得 SRW 鎖定取得堆疊追蹤。

應用程式驗證程式所顯示 資訊
  • 參數 1 - SRW 鎖定
  • 參數 2 - 正在結束或終止之線程的 ThreadId。
  • 參數 3 - 取得堆棧追蹤的位址。 使用 dps <位址> 查看取得 SRW 鎖定的位置。
  • 參數 4 - Not used

其他資訊
  • 測試層: SRWLock
  • 停止標識碼: EXIT_THREAD_OWNS_LOCK
  • 停止代碼: 0x254
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

此線程未取得正在釋放的 SRW 鎖定。

可能的原因

如果 SRW 鎖定 (Param1) 正由未取得鎖定的線程 (Param2) 釋放,就會產生此停止。 這代表很難正確且可能導致應用程式無法預期行為的不良程序設計做法。 若要偵錯此停止:

  • KB - 取得目前的堆疊追蹤。 這是線程釋放未取得的SRW鎖定的位置。
  • dps <parameter4> — 取得 SRW 鎖定取得堆疊追蹤。

應用程式驗證程式所顯示 資訊
  • 參數 1 - SRW 鎖定
  • 參數 2 - Current ThreadId。
  • 參數 3 - 取得 SRW 鎖定之線程的 ThreadId。
  • 參數 4 - 取得堆棧追蹤的位址。 使用 dps <位址> 查看取得 SRW 鎖定的位置。

其他資訊
  • 測試層: SRWLock
  • 停止標識碼: INVALID_OWNER
  • 停止代碼: 0x255
  • 嚴重性: 警告
  • 一次性錯誤: 
  • 錯誤報告: None
  • 記錄到檔案: 是
  • 建立回溯: 是

正在釋放的記憶體包含作用中的SRW鎖定。

可能的原因

如果釋放的記憶體位址 (Param1) 包含仍在使用中的SRW鎖定,就會產生此停止。 這可能會導致應用程式無法預期的行為,包括當機和停止回應。 若要偵錯此停止:

  • KB - 取得目前的堆疊追蹤。 這是正在釋放包含作用中 SRW 鎖定的記憶體的位置。
  • dps <parameter4> — 取得 SRW 鎖定取得堆疊追蹤。

應用程式驗證程式所顯示 資訊
  • 參數 1 - SRW 鎖定
  • 參數 2 - 正在釋放記憶體的位址。
  • 參數 3 - 取得 SRW 鎖定之線程的 ThreadId。
  • 參數 4 - 取得堆棧追蹤的位址。 使用 dps <位址> 查看取得 SRW 鎖定的位置。

其他資訊
  • 測試層: SRWLock
  • 停止標識碼: IN_FREED_MEMORY
  • 停止代碼: 0x256
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

要卸除的 DLL 包含作用中的 SRW 鎖定。

可能的原因

如果正在卸除的 DLL (Param2) 包含仍在使用中的 SRW 鎖定 (Param1),就會產生此停止。 這可能會導致應用程式無法預期的行為,包括當機和停止回應。 若要偵錯此停止:

  • KB - 取得目前的堆疊追蹤。 這是 DLL 正在卸除且包含作用中 SRW 鎖定的位置。
  • du <parameter2> - 尋找正在卸載的 DLL 名稱。
  • dps <parameter4> — 取得 SRW 鎖定取得堆疊追蹤。

應用程式驗證程式所顯示 資訊
  • 參數 1 - SRW 鎖定
  • 參數 2 - 要卸除之 DLL 名稱的位址。 使用 du <address> 來查看名稱。
  • 參數 3 - 取得 SRW 鎖定之線程的 ThreadId。
  • 參數 4 - 取得堆棧追蹤的位址。 使用 dps <位址> 查看取得 SRW 鎖定的位置。

其他資訊
  • 測試層: SRWLock
  • 停止標識碼: IN_UNLOADED_DLL
  • 停止代碼: 0x257
  • 嚴重性: 警告
  • 一次性錯誤: 
  • 錯誤報告: None
  • 記錄到檔案: 是
  • 建立回溯: 是

記憶體停止詳細數據

釋放大小無效或起始位址的虛擬記憶體區塊。

可能的原因

如果應用程式驗證器偵測到 VirtualFree 或 DLL 卸除,且記憶體配置位址或大小無效,就會產生此停止。 如果是 DLL 卸除,這可能表示載入 DLL 清單內的記憶體損毀。 若要偵錯此停止,請查看目前堆疊追蹤和即將釋放的記憶體位址和大小,並嘗試判斷其無效的原因。

應用程式驗證程式所顯示 資訊
  • 參數 1 - 配置基位址。
  • 參數 2 - 記憶體區域大小。
  • 參數 3 - 未使用 。
  • 參數 4 - 未使用 。

其他資訊
  • 測試層: 記憶
  • 停止標識碼: INVALID_FREEMEM
  • 停止代碼: 0x600
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

不正確的虛擬配置呼叫。

可能的原因

如果應用程式驗證器偵測到具有無效啟動位址或記憶體配置大小的 VirtualAlloc 呼叫,就會產生此停止。 若要偵錯此停止,請查看目前的堆疊追蹤 (kb) 和即將配置的記憶體位址和大小,並嘗試判斷其無效的原因。

應用程式驗證程式所顯示 資訊
  • 參數 1 - 配置基位址的指標。
  • 參數 2 - 記憶體區域大小的指標。
  • 參數 3 - Not used
  • 參數 4 - Not used

其他資訊
  • 測試層: 記憶
  • 停止標識碼: INVALID_ALLOCMEM
  • 停止代碼: 0x601
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

不正確的地圖檢視呼叫。

可能的原因

如果應用程式驗證器偵測到具有無效基位址或對應大小的 MapViewOfFile 呼叫,就會產生此停止。 若要偵錯此停止,請查看目前的堆疊追蹤 (kb) 和即將對應的記憶體位址和大小,並嘗試判斷其無效的原因。

應用程式驗證程式所顯示 資訊
  • 參數 1 - 對應基地址的指標。
  • 參數 2 - 檢視大小的指標。
  • 參數 3 - 未使用 。
  • 參數 4 - 未使用 。

其他資訊
  • 測試層: 記憶
  • 停止標識碼: INVALID_MAPVIEW
  • 停止代碼: 0x602
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

探查無效的位址。

可能的原因

如果應用程式驗證器偵測到具有無效位址的IsBadXXXPtr呼叫(例如內核模式位址,而不是一般使用者模式位址),就會產生此停止,以便探查記憶體緩衝區。 若要偵錯此停止,請查看目前的堆疊追蹤 (kb),並嘗試判斷IsBadXXXPtr函式的呼叫端最終是否有無效的位址。 很多時候,位址都是純假的,例如未初始化的指標。 MSDN 連結庫列出應用程式不應該使用IsBadXXXPtr API的幾個原因:在先佔式多任務環境中,可能會有一些其他線程變更進程對所測試記憶體的存取權。 取消參考可能無效的指標可能會停用其他線程中的堆疊擴充。 當堆疊擴充已停用時,線程會耗盡其堆疊,導致父進程立即終止,且沒有彈出視窗或診斷資訊。 進程中的線程預期會以這樣一種方式合作,這樣一個線程就不會釋放另一個所需的記憶體。 使用此函式並不會否定執行這項作業的需求。 如果未這麼做,應用程式可能會以無法預測的方式失敗。 由於所有這些原因,我們建議永遠不要使用這些 API。

應用程式驗證程式所顯示 資訊
  • 參數 1 - Start address。
  • 參數 2 - 記憶體區塊大小。
  • 參數 3 - 無效的位址。
  • 參數 4 - 未使用 。

其他資訊
  • 測試層: 記憶
  • 停止標識碼: PROBE_INVALID_ADDRESS
  • 停止代碼: 0x603
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

探查可用記憶體。

可能的原因

如果應用程式驗證器偵測到可用記憶體配置的 IsBadXXXPtr 呼叫,就會產生此停止。 這是非常糟糕的,因為在某些情況下,這個記憶體已經重複使用給一些其他配置。 由於目前的程式代碼路徑 (kb) 沒有該記憶體,因此它最終可能會損毀其他人的記憶體,併產生災難性的影響。 若要偵錯此停止查看目前的堆疊追蹤 (kb),並嘗試判斷 IsBadXXXPtr 函式呼叫端最終探查可用記憶體的原因。 位址可能是一般虛假的(例如未初始化的指標),或可能已經釋放記憶體。 如果其中一個 VirtualFree 或 UnmapViewOfFile API 已經釋放記憶體,'!avrf -vs -a parameter3' 將會搜尋已配置/釋放該位址的程式代碼路徑堆棧追蹤記錄,並在有可用時顯示這些堆疊追蹤。 這可能顯示釋放此記憶體的堆疊追蹤。 更常說,記憶體是已釋放的堆積配置。 若要檢查是否有這種可能性,『!avrf -hp -a parameter3』 會搜尋配置/釋放該位址給堆積的程式代碼路徑堆疊追蹤記錄,並在有可用時顯示這些堆棧追蹤。 MSDN 連結庫列出應用程式不應該使用IsBadXXXPtr API的幾個原因:在先佔式多任務環境中,可能會有一些其他線程變更進程對所測試記憶體的存取權。 取消參考可能無效的指標可能會停用其他線程中的堆疊擴充。 當堆疊擴充已停用時,線程會耗盡其堆疊,導致父進程立即終止,且沒有彈出視窗或診斷資訊。 進程中的線程預期會以這樣一種方式合作,這樣一個線程就不會釋放另一個所需的記憶體。 使用此函式並不會否定執行這項作業的需求。 如果未這麼做,應用程式可能會以無法預測的方式失敗。 由於所有這些原因,我們建議永遠不要使用這些 API。

應用程式驗證程式所顯示 資訊
  • 參數 1 - Start address。
  • 參數 2 - 記憶體區塊大小。
  • 參數 3 - 可用記憶體頁面的位址。
  • 參數 4 - 未使用 。

其他資訊
  • 測試層: 記憶
  • 停止標識碼: PROBE_FREE_MEM
  • 停止代碼: 0x604
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

探查防護頁面。

可能的原因

如果應用程式驗證器偵測到包含至少一個GUARD_PAGE之內存配置的IsBadXXXPtr呼叫,就會產生此停止。 這是非常糟糕的,因為這個GUARD_PAGE是線程目前堆疊的結尾。 如 MSDN 連結庫中所述:取消參考可能無效的指標可能會停用其他線程中的堆疊擴充。 當堆疊擴充已停用時,線程會耗盡其堆疊,導致父進程立即終止,且沒有彈出視窗或診斷資訊。 若要偵錯此停止查看目前的堆疊追蹤 (kb),並嘗試判斷 IsBadXXXPtr 函式呼叫端最終探查GUARD_PAGE的原因。 MSDN 連結庫列出應用程式不應該使用IsBadXXXPtr API的幾個原因:在先佔式多任務環境中,可能會有一些其他線程變更進程對所測試記憶體的存取權。 取消參考可能無效的指標可能會停用其他線程中的堆疊擴充。 當堆疊擴充已停用時,線程會耗盡其堆疊,導致父進程立即終止,且沒有彈出視窗或診斷資訊。 進程中的線程預期會以這樣一種方式合作,這樣一個線程就不會釋放另一個所需的記憶體。 使用此函式並不會否定執行這項作業的需求。 如果未這麼做,應用程式可能會以無法預測的方式失敗。 由於所有這些原因,我們建議永遠不要使用這些 API。

應用程式驗證程式所顯示 資訊
  • 參數 1 - Start address。
  • 參數 2 - 記憶體區塊大小。
  • 參數 3 - 防護頁面的位址。
  • 參數 4 - 未使用 。

其他資訊
  • 測試層: 記憶
  • 停止標識碼: PROBE_GUARD_PAGE
  • 停止代碼: 0x605
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

探查 NULL 位址。

可能的原因

如果應用程式驗證器偵測到具有NULL位址的IsBadXXXPtr呼叫,就會產生此停止。 若要偵錯此停止查看目前的堆疊追蹤 (kb),並嘗試判斷 IsBadXXXPtr 函式的呼叫端最終會以 NULL 位址結束的原因。 這通常是未檢查其中一個記憶體配置函式傳回值的人的正負號。 例如,以下程式碼不正確:

void Use(PVOID p);

int main(void) {
    PVOID p;
    p = malloc(1024);
    Use(p);
    return 0;
}

void Use(PVOID p) {
    if (IsBadReadPtr(p)) {
        return;
    }
    // p is safe to be used here.
}

此程式碼應重寫為:

int main (void) 
{ 
    PVOID p; 
    
    p = malloc (1024); 
    if (NULL == p)) { 
        return -1;
     } 

    Use (p); 

    return 0; 
} 

void Use (PVOID p) 
{
    // 
    // p is safe to be used here. 
    // 
} 

MSDN 連結庫列出應用程式不應該使用IsBadXXXPtr API的幾個原因:在先佔式多任務環境中,可能會有一些其他線程變更進程對所測試記憶體的存取權。 取消參考可能無效的指標可能會停用其他線程中的堆疊擴充。 當堆疊擴充已停用時,線程會耗盡其堆疊,導致父進程立即終止,且沒有彈出視窗或診斷資訊。 進程中的線程預期會以這樣一種方式合作,這樣一個線程就不會釋放另一個所需的記憶體。 使用此函式並不會否定執行這項作業的需求。 如果未這麼做,應用程式可能會以無法預測的方式失敗。 由於所有這些原因,我們建議永遠不要使用這些 API。

應用程式驗證程式所顯示 資訊
  • 參數 1 - 未使用 。
  • 參數 2 - 未使用 。
  • 參數 3 - 未使用 。
  • 參數 4 - 未使用 。

其他資訊
  • 測試層: 記憶
  • 停止標識碼: PROBE_NULL
  • 停止代碼: 0x606
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

探查無效啟動位址或大小的記憶體區塊。

可能的原因

如果應用程式驗證器偵測到具有無效啟動位址的IsBadXXXPtr呼叫(例如內核模式位址,而不是一般使用者模式位址),或探查記憶體緩衝區的大小無效,就會產生此停止。 若要偵錯此停止,請查看目前的堆疊追蹤 (kb),並嘗試判斷IsBadXXXPtr函式的呼叫端最終會有無效的位址或大小。 許多時候,位址或大小都是純假的,例如未初始化的變數。 MSDN 連結庫列出應用程式不應該使用IsBadXXXPtr API的幾個原因:在先佔式多任務環境中,可能會有一些其他線程變更進程對所測試記憶體的存取權。 取消參考可能無效的指標可能會停用其他線程中的堆疊擴充。 當堆疊擴充已停用時,線程會耗盡其堆疊,導致父進程立即終止,且沒有彈出視窗或診斷資訊。 進程中的線程預期會以這樣一種方式合作,這樣一個線程就不會釋放另一個所需的記憶體。 使用此函式並不會否定執行這項作業的需求。 如果未這麼做,應用程式可能會以無法預測的方式失敗。 由於所有這些原因,我們建議永遠不要使用這些 API。

應用程式驗證程式所顯示 資訊
  • 參數 1 - Start address。
  • 參數 2 - 記憶體區塊大小。
  • 參數 3 - 未使用 。
  • 參數 4 - 未使用 。

其他資訊
  • 測試層: 記憶
  • 停止標識碼: PROBE_INVALID_START_OR_SIZE
  • 停止代碼: 0x607
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

卸除大小無效或起始位址的 DLL。

可能的原因

如果應用程式驗證器偵測到 DLL 卸除的起始位址或 DLL 記憶體範圍的大小無效,就會產生此停止。 這可能表示內部 ntdll.dll 載入 DLL 清單內的記憶體損毀。

應用程式驗證程式所顯示 資訊
  • 參數 1 - DLL 記憶體基位址。
  • 參數 2 - DLL 記憶體範圍大小。
  • 參數 3 - DLL 名稱位址。 使用 du 來傾印它。
  • 參數 4 - 未使用 。

其他資訊
  • 測試層: 記憶
  • 停止標識碼: INVALID_DLL_RANGE
  • 停止代碼: 0x608
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

釋放目前線程堆棧位址範圍內的記憶體區塊。

可能的原因

如果應用程式驗證器偵測到實際屬於目前線程堆疊一部分之內存區塊的 VirtualFree,就會產生此停止。 若要偵錯此停止,請查看目前的堆疊追蹤 (kb),並嘗試了解為何呼叫 VirtualFree 的函式認為記憶體區塊是動態配置或對應的,但實際上是從堆棧配置的記憶體。

應用程式驗證程式所顯示 資訊
  • 參數 1 - 配置基位址。
  • 參數 2 - 記憶體區域大小。
  • 參數 3 - Stack 低限制位址。
  • 參數 4 - Stack 高限制位址。

其他資訊
  • 測試層: 記憶
  • 停止標識碼: FREE_THREAD_STACK_MEMORY
  • 停止代碼: 0x609
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

VirtualFree 作業的 FreeType 參數不正確。

可能的原因

如果應用程式驗證器偵測到 VirtualFree,且 FreeType 參數的值不正確,就會產生此停止。 此參數唯一可接受的兩個值是MEM_DECOMMIT和MEM_RELEASE。 如果 VirtualFree 是以這兩個值以外的任何其他值呼叫,VirtualFree 將無法釋放記憶體。 若要偵錯此停止查看目前的堆疊追蹤 (kb):VirtualFree 的呼叫端可能是罪魁禍首。

應用程式驗證程式所顯示 資訊
  • 參數 1 - 應用程式所使用的值不正確。
  • 參數 2 - 必須是正確的值 1。
  • 參數 3 - 必須是正確的值 2。
  • 參數 4 - 未使用 。

其他資訊
  • 測試層: 記憶
  • 停止標識碼: INVALID_FREE_TYPE
  • 停止代碼: 0x60A
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

嘗試釋放已釋放的虛擬記憶體區塊。

可能的原因

如果應用程式驗證程式偵測到已免費位址的 VirtualFree,就會產生此停止。 若要偵錯此停止,請查看目前的堆疊追蹤 (kb),並嘗試判斷記憶體已釋放的原因,但應用程式嘗試再次釋放它。 '!avrf -vs -a parameter1' 會搜尋已配置/釋放該位址之程式代碼路徑的堆疊追蹤記錄,並在這些路徑可供使用時顯示這些堆棧追蹤。 這可能顯示釋放此記憶體的堆疊追蹤。

應用程式驗證程式所顯示 資訊
  • 參數 1 - Memory 區塊位址。
  • 參數 2 - 未使用 。
  • 參數 3 - 未使用 。
  • 參數 4 - 未使用 。

其他資訊
  • 測試層: 記憶
  • 停止標識碼: MEM_ALREADY_FREE
  • 停止代碼: 0x60B
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

VirtualFree (MEM_RELEASE) 作業的大小參數不正確。

可能的原因

如果應用程式驗證器偵測到具有 dwSize 參數非零值的 VirtualFree (MEM_RELEASE),就會產生此停止。 使用 MEM_RELEASE 時,此參數唯一可接受的值為 0。 如果以 0 以外的任何其他值呼叫 VirtualFree,VirtualFree 將無法釋放記憶體。 若要偵錯此停止查看目前的堆疊追蹤 (kb):VirtualFree 的呼叫端可能是罪魁禍首。

應用程式驗證程式所顯示 資訊
  • 參數 1 - 應用程式所使用的大小不正確。
  • 參數 2 - 預期的正確大小 (0)。
  • 參數 3 - 未使用 。
  • 參數 4 - 未使用 。

其他資訊
  • 測試層: 記憶
  • 停止標識碼: INVALID_FREE_SIZE
  • 停止代碼: 0x60C
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

DLL 進入點例程中引發的非預期例外狀況。

可能的原因

如果 DLL 的進入點 (DllMain) 函式引發例外狀況,就會產生此停止。 這是錯誤的其中一個範例:如果 DllMain(DLL_PROCESS_ATTACH) 引發例外狀況,Windows DLL 載入器會: - 攔截並隱藏例外狀況;- 卸除 DLL 而不呼叫其 DllMain(DLL_PROCESS_DETACH)。 因此,在許多情況下,DLL 已經配置了一些資源,然後它引發例外狀況,而且它不會有機會在 DllMain 上釋放這些資源(DLL_PROCESS_DETACH)。 若要偵錯此停止:

- **du \<*parameter1*\>** - 顯示 DLL 名稱。 - **.exr \<*parameter2*\>** - 顯示異常狀況資訊。 - **.cxr \<*Parameter3*\>** 後面接著 **KB** - 顯示異常狀況內容資訊和引發異常狀況時的堆疊追蹤。 - **\<*Parameter4*\>** 是內部驗證器結構的位址,對大部分驗證器使用者沒有任何意義。

應用程式驗證程式所顯示 資訊
  • 參數 1 - DLL 名稱 (使用 du 來傾印它)。
  • 參數 2 - Exception 記錄。 使用 .exr 來顯示它。
  • 參數 3 - Context record。 使用 .cxr 來顯示它。
  • 參數 4 - Verifier dll 描述元

其他資訊
  • 測試層: 記憶
  • 停止標識碼: DLL_UNEXPECTED_EXCEPTION
  • 停止代碼: 0x60D
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

線程函式中引發的非預期例外狀況。

可能的原因

如果線程函式引發例外狀況,就會產生此停止。 這很糟糕,因為整個程式都會被殺死。 若要偵錯此停止:

  • < parameter1> 對於異常狀況類型可能很重要。 例如例外狀況代碼C0000005表示存取違規。
  • .exr <parameter2> - 顯示異常資訊。
  • .cxr <參數3> 後面接著 KB - 顯示例外狀況內容資訊

應用程式驗證程式所顯示 資訊
  • 參數 1 - Exception 程序代碼。
  • 參數 2 - Exception 記錄。 使用 .exr 來顯示它。
  • 參數 3 - Context record。 使用 .cxr 來顯示它。
  • 參數 4 - 未使用 。

其他資訊
  • 測試層: 記憶
  • 停止標識碼: THREAD_UNEXPECTED_EXCEPTION
  • 停止代碼: 0x60E
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

探查記憶體時引發非預期的例外狀況。

可能的原因

如果在IsBadXXXPtr呼叫期間收到例外狀況,就會產生此停止。 這表示我們正在探查的記憶體緩衝區實際上不會有呼叫端假設的保護,或記憶體已釋出等等。如需為何不建議使用IsBadXXXPtr API的更多範例,請參閱上述關於其他停止程式代碼的討論(PROBE_INVALID_ADDRESS、PROBE_FREE_MEM、PROBE_GUARD_PAGE、PROBE_NULL、PROBE_INVALID_START_OR_SIZE)。 若要偵錯此停止:

  • < parameter1> 通常會C0000005,這是存取違規
  • .exr <參數2> - 顯示異常資訊
  • .cxr <參數3> 後面接著 KB - 顯示異常狀況內容資訊及引發異常狀況時的堆疊追蹤

應用程式驗證程式所顯示 資訊
  • 參數 1 - Exception 程序代碼。
  • 參數 2 - Exception 記錄。 使用 .exr 來顯示它。
  • 參數 3 - Context record。 使用 .cxr 來顯示它。
  • 參數 4 - Not used

其他資訊
  • 測試層: 記憶
  • 停止標識碼: PROBE_UNEXPECTED_EXCEPTION
  • 停止代碼: 0x60F
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

嘗試重設 NULL 位址。

可能的原因

如果應用程式驗證器偵測到具有NULL 第一個參數的 VirtualFree (MEM_RESET) 呼叫,就會產生此停止。 MEM_RESET應該只用於已配置的記憶體,因此在此案例中,NULL 不是有效的第一個參數。

應用程式驗證程式所顯示 資訊
  • 參數 1 - 未使用 。
  • 參數 2 - 未使用 。
  • 參數 3 - 未使用 。
  • 參數 4 - 未使用 。

其他資訊
  • 測試層: 記憶
  • 停止標識碼: INVALID_MEM_RESET
  • 停止代碼: 0x610
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

釋放目前線程堆棧位址範圍內的堆積記憶體區塊。

可能的原因

如果應用程式驗證器偵測到 HeapFree,則會針對實際屬於目前線程堆疊 (!) 的記憶體區塊產生此停止。 若要偵錯此停止,請查看目前的堆疊追蹤 (kb) ,並嘗試瞭解為什麼呼叫 HeapFree 的函式認為記憶體區塊是動態配置或對應的,但實際上是從堆疊配置的記憶體。

應用程式驗證程式所顯示 資訊
  • 參數 1 - 配置基位址。
  • 參數 2 - 記憶體區域大小。
  • 參數 3 - Stack 低限制位址。
  • 參數 4 - Stack 高限制位址。

其他資訊
  • 測試層: 記憶
  • 停止標識碼: FREE_THREAD_STACK_MEMORY_AS_HEAP
  • 停止代碼: 0x612
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

取消對應目前線程堆棧位址範圍內的記憶體區域。

可能的原因

如果應用程式驗證器偵測到 UnmapViewOfFile,則會針對實際屬於目前線程堆疊的記憶體區塊產生此停止 (!)。 若要偵錯此停止,請查看目前的堆疊追蹤 (kb) ,並嘗試瞭解呼叫 UnmapViewOfFile 的函式為何認為記憶體區塊是動態配置或對應,但實際上是從堆疊配置的記憶體。

應用程式驗證程式所顯示 資訊
  • 參數 1 - 配置基位址。
  • 參數 2 - 記憶體區域大小。
  • 參數 3 - Stack 低限制位址。
  • 參數 4 - Stack 高限制位址。

其他資訊
  • 測試層: 記憶
  • 停止標識碼: FREE_THREAD_STACK_MEMORY_AS_MAP
  • 停止代碼: 0x613
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

不正確的RTL_RESOURCE位址。

可能的原因

如果應用程式嘗試使用 NULL 或其他不正確的位址(例如內核模式地址)作為有效對象的位址,就會產生此停止。 RtlInitializeResource (NULL) 是不正確的 API 呼叫,將觸發這種驗證器停止。 *Parameter1* 是使用的不正確位址,而罪魁禍首位於堆疊追蹤上 (以 kb 顯示)。

應用程式驗證程式所顯示 資訊
  • 參數 1 - Address。
  • 參數 2 - 未使用 。
  • 參數 3 - 未使用 。
  • 參數 4 - 未使用 。

其他資訊
  • 測試層: 記憶
  • 停止標識碼: INVALID_RESOURCE_ADDRESS
  • 停止代碼: 0x614
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

無效的重要區段位址。

可能的原因

如果應用程式嘗試使用 NULL 或其他不正確的位址(例如內核模式地址)作為有效對象的位址,就會產生此停止。 EnterCriticalSection(NULL) 是不正確的 API 呼叫,將觸發這種驗證器停止。 *Parameter1* 是使用的不正確位址,而罪魁禍首位於堆疊追蹤上 (以 kb 顯示)。

應用程式驗證程式所顯示 資訊
  • 參數 1 - Address。
  • 參數 2 - 未使用 。
  • 參數 3 - 未使用 。
  • 參數 4 - 未使用 。

其他資訊
  • 測試層: 記憶
  • 停止標識碼: INVALID_CRITSECT_ADDRESS
  • 停止代碼: 0x615
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

嘗試在非可執行記憶體中執行程序代碼。

可能的原因

如果應用程式嘗試從非可執行或免費位址執行程序代碼,就會產生此停止。 若要偵錯此停止:

  • u <parameter2> - 要解編罪魁禍首程式碼
  • .exr <parameter3> - 顯示異常資訊
  • .cxr <參數4> ,後面接著 KB - 顯示異常狀況內容資訊,以及引發異常狀況時的堆疊追蹤。

應用程式驗證程式所顯示 資訊
  • 參數 1 - 正在存取的位址。
  • 參數 2 - 程式代碼執行無效存取。
  • 參數 3 - Exception 記錄。 使用 .exr 來顯示它。
  • 參數 4 - Context record。 使用 .cxr 來顯示它。

其他資訊
  • 測試層: 記憶
  • 停止標識碼: THREAD_UNEXPECTED_EXCEPTION_CODE
  • 停止代碼: 0x616
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

初始化輸出緩衝區時引發非預期的例外狀況。

可能的原因

如果我們在初始化指定為 Win32 或 CRT API 輸出參數的緩衝區時收到例外狀況,就會產生此停止。 這通常表示指定的輸出緩衝區大小不正確。 若要偵錯此停止:

  • .exr <parameter3> — 顯示異常資訊。
  • .cxr <參數4> ,後面接著 KB - 在引發例外狀況時顯示例外狀況內容資訊和堆疊追蹤。

應用程式驗證程式所顯示 資訊
  • 參數 1 - Buffer 起始位址。
  • 參數 2 - Buffer 大小。
  • 參數 3 - Exception 記錄。 使用 .exr 來顯示它。
  • 參數 4 - Context record。 使用 .cxr 來顯示它。

其他資訊
  • 測試層: 記憶
  • 停止標識碼: OUTBUFF_UNEXPECTED_EXCEPTION
  • 停止代碼: 0x617
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

嘗試尋找堆積區塊大小時發生非預期的例外狀況。

可能的原因

如果我們針對正在釋放的堆積區塊呼叫 HeapSize 時收到例外狀況,就會產生此停止。 這通常表示指定的堆積區塊位址不正確,或堆積損毀。 若要偵錯此停止:

  • .exr <parameter3> — 顯示異常記錄。
  • .cxr <參數4> ,後面接著 KB - 在引發例外狀況時顯示例外狀況內容資訊和堆疊追蹤。

應用程式驗證程式所顯示 資訊
  • 參數 1 - 正在釋放堆積區塊的位址。
  • 參數 2 - 堆積句柄。
  • 參數 3 - Exception 記錄。 使用 .exr 來顯示它。
  • 參數 4 - Context record。 使用 .cxr 來顯示它。

其他資訊
  • 測試層: 記憶
  • 停止標識碼: SIZE_HEAP_UNEXPECTED_EXCEPTION
  • 停止代碼: 0x618
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

釋放具有無效起始位址的記憶體區塊。

可能的原因

如果程式使用 lpAddress 參數呼叫 VirtualFree (MEM_RELEASE) ,該參數不是保留頁面區域時 VirtualAlloc 或 VirtualAllocEx 函式所傳回的基底位址,則會產生此停止;若要偵錯此停止:

  • kb - 顯示目前的堆疊追蹤,也就是呼叫 VirtualFree。 可能的罪魁禍首是呼叫 VirtualFree 的 DLL。

應用程式驗證程式所顯示 資訊
  • 參數 1 - 正在釋放的記憶體區塊位址。
  • 參數 2 - 必須是正確的記憶體區塊位址。
  • 參數 3 - 未使用 。
  • 參數 4 - 未使用 。

其他資訊
  • 測試層: 記憶
  • 停止標識碼: INVALID_FREEMEM_START_ADDRESS
  • 停止代碼: 0x619
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

取消對應具有無效起始位址的記憶體區塊。

可能的原因

如果程式使用 lpBaseAddress 參數呼叫 UnmapViewOfFile,與先前呼叫 MapViewOfFile 或 MapViewOfFileEx 函式所傳回的值不相同,就會產生此停止。 若要偵錯此停止:

  • kb - 顯示目前的堆疊追蹤,也就是呼叫 UnmapViewOfFile。 可能的罪魁禍首是呼叫 UnmapViewOfFile 的 DLL。

應用程式驗證程式所顯示 資訊
  • 參數 1 - 未對應的記憶體區塊位址。
  • 參數 2 - 必須是正確的記憶體區塊位址。
  • 參數 3 - 未使用 。
  • 參數 4 - 未使用 。

其他資訊
  • 測試層: 記憶
  • 停止標識碼: INVALID_UNMAPVIEW_START_ADDRESS
  • 停止代碼: 0x619
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

線程集區回呼函式中引發的未預期例外狀況。

可能的原因

如果線程集區線程中的回呼函式引發例外狀況,就會產生此停止。 若要偵錯此停止:

  • < parameter1> 對於異常狀況類型可能很重要。 例如,異常代碼C0000005表示存取違規。
  • .exr <parameter2> - 顯示異常資訊。
  • .cxr <參數3> 後面接著 KB - 顯示例外狀況內容資訊。

應用程式驗證程式所顯示 資訊
  • 參數 1 - Exception 程序代碼
  • 參數 2 - Exception 記錄。 使用 .exr 來顯示它
  • 參數 3 - Context record。 使用 .cxr 來顯示它
  • 參數 4 - Not used

其他資訊
  • 測試層: 記憶
  • 停止標識碼: THREADPOOL_UNEXPECTED_EXCEPTION
  • 停止代碼: 0x61B
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

非可執行記憶體中的程序代碼

可能的原因

如果應用程式嘗試從非可執行或免費位址執行程序代碼,就會產生此停止。 若要偵錯此停止:

  • u <parameter2> - 要解編罪魁禍首程式碼
  • .exr <parameter3> - 顯示異常資訊
  • .cxr <參數4> ,後面接著 KB - 顯示異常狀況內容資訊,以及引發異常狀況時的堆疊追蹤。

應用程式驗證程式所顯示 資訊
  • 參數 1 - 正在存取的位址
  • 參數 2 - 程式代碼執行無效存取
  • 參數 3 - Exception 記錄。 使用 .exr 來顯示它。
  • 參數 4 - Context record。 使用 .cxr 來顯示它。

其他資訊
  • 測試層: 記憶
  • 停止標識碼: THREADPOOL_UNEXPECTED_EXCEPTION_CODE
  • 停止代碼: 0x61C
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

建立可執行堆積。

可能的原因

如果應用程式正在建立可執行檔堆積,就會產生此停止。 這可能會造成安全性風險。

應用程式驗證程式所顯示 資訊
  • 參數 1 - 未使用 。
  • 參數 2 - 未使用 。
  • 參數 3 - 未使用 。
  • 參數 4 - 未使用 。

其他資訊
  • 測試層: 記憶
  • 停止標識碼: EXECUTABLE_HEAP
  • 停止代碼: 0x1D
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

配置可執行記憶體。

可能的原因

如果應用程式正在配置可執行記憶體,就會產生此停止。 這可能會造成安全性風險。

應用程式驗證程式所顯示 資訊
  • 參數 1 - 呼叫端所指定的頁面保護。
  • 參數 2 - 未使用 。
  • 參數 3 - 未使用 。
  • 參數 4 - 未使用 。

其他資訊
  • 測試層: 記憶
  • 停止標識碼: EXECUTABLE_MEMORY
  • 停止代碼: 0x1E
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

TLS 停止詳細數據

卸除未釋放之配置 TLS 索引的 DLL。

可能的原因

如果在釋放該 TLS 索引之前,已卸除配置 TLS 索引的 DLL,就會產生此停止。 若要偵錯此停止:

  • du <parameter3> - 顯示罪魁禍首 DLL 的名稱
  • .reload xxx.dll=<parameter4> - 重新載入罪魁禍首 DLL 的符號(如果需要)。 xxx.dll 是上述步驟中顯示的DLL名稱。
  • u <parameter2> - 反組譯配置 TLS 的程式碼。 這應該指向配置 TLS 但忘記在 DLL 卸除之前釋放它的函式。

應用程式驗證程式所顯示 資訊
  • 參數 1 - TLS 索引
  • 參數 2 - 配置此 TLS 索引的程式代碼位址。
  • 參數 3 - DLL 名稱位址。 使用 du 來傾印它。
  • 參數 4 - DLL 基位址。

其他資訊
  • 測試層: TLS
  • 停止標識碼: TLS_LEAK
  • 停止代碼: 0x350
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

損毀的驗證器 TLS 結構。

可能的原因

如果用來儲存線程之 TLS 位置狀態的內部驗證器結構已損毀,就會產生此停止。 這可能是由於程式中的一些隨機損毀所致。

應用程式驗證程式所顯示 資訊
  • 參數 1 - TEB 位址。
  • 參數 2 - 預期的 TEB 位址。
  • 參數 3 - Thread ID。
  • 參數 4 - 預期的線程標識碼。

其他資訊
  • 測試層: TLS
  • 停止標識碼: CORRUPTED_TLS
  • 停止代碼: 0x351
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

使用無效的 TLS 索引。

可能的原因

如果使用無效的 TLS 索引,就會產生此停止。 在大部分情況下,這是因為呼叫 TlsFree 時,程式代碼仍在使用此索引。 以下是線程集區線程的範例。

  • T1:Dll 載入和 TlsAlloc
  • T1:佇列回呼
  • T1:略過等待/取消的回撥
  • T1:無電信
  • T2:回呼執行並呼叫 TlsSetValue
  • T1:Dll 卸載

應用程式驗證程式所顯示 資訊
  • 參數 1 - TLS 索引
  • 參數 2 - Not used.
  • 參數 3 - Not used.
  • 參數 4 - Not used.

其他資訊
  • 測試層: TLS
  • 停止標識碼: INVALID_TLS_INDEX
  • 停止代碼: 0x352
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

線程緩衝處理停止詳細數據

此線程集區線程的優先順序已變更。

可能的原因

如果線程優先順序在傳回線程集區時變更,就會產生此停止。

應用程式驗證程式所顯示 資訊
  • 格式: -  線程集區線程 (%x) 已執行回呼 (%p) 具有改變的線程優先順序 (%i -> %i)
  • 參數 1 - Callback 函式。
  • 參數 2 - Context。
  • 參數 3 - Threadpool 物件配置堆棧追蹤,使用 dps 來傾印它。
  • 參數 4 - Current Priority。

其他資訊
  • 測試層: Threadpool
  • 停止標識碼: INCONSISTENT_PRIORITY
  • 停止代碼: 0x700
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

此線程集區線程的親和性已變更。

可能的原因

如果線程親和性在傳回線程集區時變更,就會產生此停止。

應用程式驗證程式所顯示 資訊
  • 格式: - threadpool thread (%x) 已執行 Callback (%p) 具有改變的線程親和性遮罩 (%p -> %p)
  • 參數 1 - Callback 函式。
  • 參數 2 - Context。
  • 參數 3 - Threadpool 物件配置堆棧追蹤,使用 dps 來傾印它。
  • 參數 4 - Current affinity。

其他資訊
  • 測試層: Threadpool
  • 停止標識碼: INCONSISTENT_AFFINITY_MASK
  • 停止代碼: 0x701
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

目前線程之 msg 集區中未處理的 msg。

可能的原因

如果當此線程集區線程傳回集區時,任何訊息保持未處理,就會產生此停止。 這是危險的,因為它將處理在完全不同的內容。 請使用 !avrf -tp <Param4> 來查看張貼至此線程的訊息。

應用程式驗證程式所顯示 資訊
  • 格式: - threadpool thread (%x) 已執行回呼 (%p) 具有未處理的視窗訊息 (%x: %x)
  • 參數 1 - Callback 函式。
  • 參數 2 - Context。
  • 參數 3 - Threadpool 物件配置堆棧追蹤,使用 dps 來傾印它。
  • 參數 4 - Threadpool 線程標識符。請使用 !avrf -tp <threadid> 來查看張貼至此線程的訊息。

其他資訊
  • 測試層: Threadpool
  • 停止標識碼: ORPHANED_THREAD_MESSAGE
  • 停止代碼: 0x702
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

未封閉的視窗屬於目前的線程。

可能的原因

當此線程集區線程傳回集區時,如果有任何視窗保持運作,就會產生此停止。

應用程式驗證程式所顯示 資訊
  • 格式: -  線程集區線程 (%x) 已執行回呼 (%p) 具有有效的 hwnd (%x: %s),可以接收訊息
  • 參數 1 - Callback 函式。
  • 參數 2 - Context。
  • 參數 3 - Threadpool 物件配置堆棧追蹤,使用 dps 來傾印它。
  • 參數 4 - Threadpool 線程標識符。

其他資訊
  • 測試層: Threadpool
  • 停止標識碼: ORPHANED_THREAD_WINDOW
  • 停止代碼: 0x703
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

ExitThread() 或 TerminateThread() 在執行緒儲存區執行緒上。

可能的原因

如果在線程集區線程上呼叫 ExitThread,就會產生此停止。禁止它,因為它會使系統不穩定。 這會導致資源流失、凍結或AV。

應用程式驗證程式所顯示 資訊
  • 參數 1 - Callback 函式。
  • 參數 2 - Context。
  • 參數 3 - Threadpool 物件配置堆棧追蹤,使用 dps 來傾印它。
  • 參數 4 - Not used.

其他資訊
  • 測試層: Threadpool
  • 停止標識碼: ILLEGAL_THREAD_TERMINATION
  • 停止代碼: 0x704
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

線程在傳回線程集區線程時處於模擬狀態。

可能的原因

如果回呼函式將線程令牌變更為模擬另一位使用者,並在將它傳回線程集區之前忘記重設,就會產生此停止。

應用程式驗證程式所顯示 資訊
  • 參數 1 - Callback 函式。
  • 參數 2 - Context。
  • 參數 3 - Threadpool 物件配置堆棧追蹤,使用 dps 來傾印它。
  • 參數 4 - Not used.

其他資訊
  • 測試層: Threadpool
  • 停止標識碼: THREAD_IN_IMPERSONATION
  • 停止代碼: 0x705
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

呼叫需要持續性線程的函式。

可能的原因

某些Microsoft Windows API 必須在專用或持續性線程內呼叫。 在線程集區中,您通常應該避免使用需要持續性線程的線程本機記憶體和佇列異步呼叫,例如 RegNotifyChangeKeyValue 函式。 不過,這類函式可以使用QueueUserWorkItem搭配 WT_EXECUTEINPERSISTENTTHREAD 選項,將這類函式排入持續性背景工作線程。 調試程式中的 kb 會顯示呼叫端。

應用程式驗證程式所顯示 資訊
  • 參數 1 - Callback 函式。
  • 參數 2 - Context。
  • 參數 3 - Threadpool 物件配置堆棧追蹤,使用 dps 來傾印它。
  • 參數 4 - Not used.

其他資訊
  • 測試層: Threadpool
  • 停止標識碼: PERSISTED_THREAD_NEEDED
  • 停止代碼: 0x706
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

線程處於骯髒的交易狀態。

可能的原因

如果回呼函式忘記關閉或重設目前的交易句柄,就會產生此停止。

應用程式驗證程式所顯示 資訊
  • 參數 1 - Callback 函式。
  • 參數 2 - Context。
  • 參數 3 - Threadpool 物件配置堆棧追蹤,使用 dps 來傾印它。
  • 參數 4 - Transaction Handle。

其他資訊
  • 測試層: Threadpool
  • 停止標識碼: DIRTY_TRANSACTION_CONTEXT
  • 停止代碼: 0x707
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

此線程集區狀態具有不平衡的 CoInit 和 CoUnInit 呼叫。

可能的原因

如果回呼函式呼叫 CoInit 和 CoUnInit 不平衡,就會產生此停止。

應用程式驗證程式所顯示 資訊
  • 參數 1 - Callback 函式。
  • 參數 2 - Context。
  • 參數 3 - Threadpool 物件配置堆棧追蹤,使用 dps 來傾印它。
  • 參數 4 - 平衡通話計數。

其他資訊
  • 測試層: Threadpool
  • 停止標識碼: DIRTY_COM_STATE
  • 停止代碼: 0x708
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

定時器對象的參數不一致。 建立定時器時,WT_EXECUTEONLYONCE指定期間應該是 0

可能的原因

如果定時器設定為只有一次且具有WT_EXECUTEONLYONCE旗標的訊號,則會產生此停止。

應用程式驗證程式所顯示 資訊
  • 參數 1 - Period 指定。
  • 參數 2 - Flags 指定。
  • 參數 3 - Not used.
  • 參數 4 - Not used.

其他資訊
  • 測試層: Threadpool
  • 停止標識碼: INCONSISTENT_TIMER_PARAMS
  • 停止代碼: 0x709
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

載入器鎖定已由回呼內的線程集區線程保留。

可能的原因

如果載入器鎖定保留在回呼內,而且在線程傳回至線程集區時不會釋放,就會產生此停止。

應用程式驗證程式所顯示 資訊
  • 參數 1 - Callback 函式。
  • 參數 2 - Context。
  • 參數 3 - Threadpool 物件配置堆棧追蹤,使用 dps 來傾印它。
  • 參數 4 - Not used.

其他資訊
  • 測試層: Threadpool
  • 停止標識碼: LOADER_LOCK_HELD
  • 停止代碼: 0x7A
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

慣用的語言是由回呼內的線程集區線程所設定。

可能的原因

如果在回呼中設定慣用語言,而且當線程傳回至線程集區時,不會清除此停止。

應用程式驗證程式所顯示 資訊
  • 參數 1 - Callback 函式。
  • 參數 2 - Context。
  • 參數 3 - Threadpool 物件配置堆棧追蹤,使用 dps 來傾印它。
  • 參數 4 - Not used.

其他資訊
  • 測試層: Threadpool
  • 停止標識碼: PREFERRED_LANGUAGES_SET
  • 停止代碼: 0x7B
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

背景優先順序是由回呼內的線程集區線程所設定。

可能的原因

如果在回呼內設定背景優先順序,而且當線程傳回至線程集區時,不會停用此停止。

應用程式驗證程式所顯示 資訊
  • 參數 1 - Callback 函式。
  • 參數 2 - Context。
  • 參數 3 - Threadpool 物件配置堆棧追蹤,使用 dps 來傾印它。
  • 參數 4 - Not used.

其他資訊
  • 測試層: Threadpool
  • 停止標識碼: BACKGROUND_PRIORITY_SET
  • 停止代碼: 0x7C
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

Threadpool 線程上的 TerminateThread() 。

可能的原因

如果在線程集區線程上呼叫 TerminateThread,就會產生此停止。 禁止它,因為它會使系統不穩定。 這會導致資源流失、凍結或AV。

應用程式驗證程式所顯示 資訊
  • 參數 1 - Not used.
  • 參數 2 - Not used.
  • 參數 3 - Not used.
  • 參數 4 - Not used.

其他資訊
  • 測試層: Threadpool
  • 停止標識碼: ILLEGAL_THREAD_TERMINATION
  • 停止代碼: 0x7D
  • 嚴重性: 錯誤
  • 一次性錯誤: 
  • 錯誤報告: 中斷
  • 記錄到檔案: 是
  • 建立回溯: 是

另請參閱

應用程式驗證器 - 停止程式代碼和定義

應用程式驗證器 - 概觀

應用程式驗證器 - 功能

應用程式驗證器 - 測試應用程式

應用程式驗證器 - 應用程式驗證器內的測試

應用程式驗證器 - 偵錯應用程式驗證器會停止

應用程式驗證器 - 常見問題