__fastfail
Microsoft 固有の仕様
最小限のオーバーヘッドで呼び出し元プロセスを直ちに終了します。
構文
__declspec(noreturn) void __fastfail(unsigned int code);
パラメーター
code
[in] プロセス終了の理由を示す、winnt.h または wdm.h からの FAST_FAIL_<description>
シンボリック定数。
戻り値
__fastfail
組み込みには戻り値はありません。
解説
__fastfail
組み込みは、"ファスト フェール" 要求、つまり破損した可能性のあるプロセスが、即時プロセス終了を要求する方法のメカニズムを提供します。 重大な障害によってプログラムの状態が破損し、回復できずにスタックしている場合は、通常の例外処理機能では処理できません。 __fastfail
を使用して、最小限のオーバーヘッドでプロセスを終了します。
内部的には、__fastfail
はアーキテクチャ固有のいくつかのメカニズムを使用して実装されています。
Architecture | 指示 | コード引数の場所 |
---|---|---|
x86 | int 0x29 | ecx |
x64 | int 0x29 | rcx |
ARM | Opcode 0xDEFB | r0 |
ARM64 | Opcode 0xF003 | x0 |
ファスト フェール要求は単体で使用でき、通常は、実行に必要な命令は 2 つのみとなります。 ファスト フェール要求が実行されると、カーネルが適切なアクションを実行します。 ユーザー モードのコードでは、ファスト フェール イベントが発生したときの命令ポインター自体をまたぐメモリの依存関係はありません。 そのため、深刻なメモリの破損がある場合でも、その信頼性が最大化されます。
code
引数 (winnt.h または wdm.h の FAST_FAIL_<description>
シンボリック定数の 1 つ) は障害条件の種類を示すものです。 環境固有の方法でエラー レポートに組み込まれます。
ユーザー モードのファスト フェール要求は、例外コード 0xC0000409 および 1 つ以上の例外パラメーターを伴う、継続不可能なセカンド チャンス例外として示されます。 最初の例外パラメーターは code
値です。 この例外コードは、Windows エラー報告 (WER) とデバッグ インフラストラクチャに対して、プロセスが破損していること、および障害に対応して最小限のプロセス内アクションを実行する必要があることを示しています。 カーネル モードのファスト フェール要求は、専用のバグチェック コード KERNEL_SECURITY_CHECK_FAILURE
(0x139) を使用して実装されます。 どちらの場合も、プログラムが破損した状態にあると予想されるため、例外ハンドラーは呼び出されません。 デバッガーが存在する場合は、プログラムを終了する前にその状態を確認する機会が与えられます。
Windows 8 から、ネイティブのファスト フェール メカニズムのサポートが開始されました。 ファスト フェール命令をネイティブでサポートしていない Windows オペレーティング システムでは、通常、ファスト フェール要求はアクセス違反または UNEXPECTED_KERNEL_MODE_TRAP
バグチェックとして処理されます。 このような場合もやはりプログラムは終了しますが、必ずしも直ちに終了するわけではありません。
__fastfail
は、組み込みとしてのみ使用できます。
要件
Intrinsic | Architecture |
---|---|
__fastfail |
x86、x64、ARM、ARM64 |
ヘッダー ファイル<intrin.h>
Microsoft 固有の仕様はここまで