__fastfail

Microsoft 专用

立即终止开销最少的调用过程。

语法

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

参数

code
[in] winnt.h 或 wdm.h 中的 FAST_FAIL_<description> 符号常量,指示进程终止的原因。

返回值

__fastfail 内部函数不会返回。

注解

__fastfail 内部函数为快速失败请求提供了一种机制 - 一种可能已损坏的进程请求立即终止进程的方法。 无法使用常规异常处理设施处理可能已破坏程序状态和堆栈至无法恢复的的严重故障。 使用 __fastfail 终止开销最少的进程。

在内部,可以使用几个特定于体系结构的机制实现 __fastfail

体系结构 说明 代码参数的位置
x86 int 0x29 ecx
x64 int 0x29 rcx
ARM 操作码 0xDEFB r0
ARM64 操作码 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 bug 检查。 在这些情况下,仍然会终止程序,但并不一定会快速终止。

__fastfail 只能用作内部函数。

要求

Intrinsic 体系结构
__fastfail x86、x64、ARM、ARM64

头文件<intrin.h>

结束 Microsoft 专用

另请参阅

编译器内部函数