分享方式:


__fastfail

Microsoft 特定的

立即終止額外負荷最小的呼叫處理序。

語法

__declspec(noreturn) void __fastfail(unsigned int code);

參數

code
[in] FAST_FAIL_<description> winnt.h 或 wdm.h 中的符號常數,表示進程終止的原因。

傳回值

__fastfail 內建函式不會返回。

備註

內部__fastfail函數提供快速失敗要求的機制,這是要求立即終止進程可能損毀的程式的方法。 一般例外狀況處理功能無法處理程式狀態可能已損毀和超越堆疊復原的嚴重失敗。 使用 __fastfail 終止使用最少額外負荷的處理序。

在內部方面,會使用數種架構特定機制來實作 __fastfail

架構 指示 程式碼引數的位置
x86 int 0x29 ecx
x64 int 0x29 rcx
ARM Opcode 0xDEFB r0
ARM64 Opcode 0xF003 x0

快速失敗要求是獨立的,通常僅需要執行兩個指令。 執行快速失敗要求之後,核心會採取適當的動作。 在使用者模式程式碼中,當引發快速失敗事件時,沒有超出指令指標本身的記憶體相依性。 這可最大化其可靠性,即使在嚴重記憶體損毀的情況下也是如此。

code 變數,winnt.h 或 wdm.h 的 FAST_FAIL_<description> 其中一個符號常數,描述失敗狀況的類型。 它會以環境特定方式併入失敗報告。

使用者模式快速失敗要求會顯示為例外狀況代碼0xC0000409且至少有一個例外狀況參數的第二次非持續性例外狀況。 第一個例外狀況參數是 code 值。 此例外狀況程式代碼會向 Windows 錯誤報告 (WER) 和偵錯基礎結構指出進程已損毀,而且應採取最少的進程內動作來回應失敗。 核心模式快速失敗要求是藉由使用專用的檢查錯誤程式碼 KERNEL_SECURITY_CHECK_FAILURE(0x139) 來實作。 在這兩種情況下,都不會叫用例外狀況處理常式,因為是預期程式要處於損毀的狀態。 如果調試程式存在,就有機會在終止之前檢查程序的狀態。

從 Windows 8 開始支援原生快速失敗機制。 原生不支援快速失敗指令的 Windows 作業系統通常會將快速失敗要求視為存取違規或 UNEXPECTED_KERNEL_MODE_TRAP 錯誤檢查。 在這些情況下,此程式仍然會終止,但不一定會快速終止。

__fastfail 僅可作為內建函式使用。

需求

內建 架構
__fastfail x86、x64、ARM、ARM64

頭檔<intrin.h>

END Microsoft 特定的

另請參閱

編譯程式內部函數