__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 专用