__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 |
빠른 실패 요청은 독립적이며 대개 두 가지 명령만 있으면 실행할 수 있습니다. 빠른 실패 요청이 실행된 후 커널은 적절한 작업을 수행합니다. 사용자 모드 코드에서는 빠른 실패 이벤트 발생 시 명령 포인터 자체 이외의 메모리 종속성이 없습니다. 이는 심각한 메모리 손상의 경우에도 안정성을 최대화합니다.
winnt.h 또는 wdm.h의 기호 상수 중 FAST_FAIL_<description>
하나인 인수는 code
오류 조건의 형식을 설명합니다. 환경별 방식으로 오류 보고서에 통합됩니다.
사용자 모드 빠른 실패 요청은 예외 코드 0xC0000409 예외 매개 변수가 하나 이상 있는 두 번째 예외가 연속되지 않는 예외로 나타납니다. 첫 번째 예외 매개 변수는 code
값입니다. 이 예외 코드는 WER(Windows 오류 보고) 및 디버깅 인프라에 프로세스가 손상되었으며 오류에 대한 응답으로 최소한의 프로세스 내 작업을 수행해야 임을 나타냅니다. 커널 모드 빠른 실패 요청은 전용 버그 검사 코드인 KERNEL_SECURITY_CHECK_FAILURE
(0x139)를 사용하여 구현됩니다. 두 경우 모두 프로그램이 손상된 상태로 간주되므로 예외 처리기가 호출되지 않습니다. 디버거가 있는 경우 종료 전에 프로그램의 상태를 검사할 수 있는 기회가 제공됩니다.
Windows 8부터는 빠른 실패 메커니즘이 기본적으로 지원됩니다. 기본적으로 빠른 실패 명령을 지원하지 않는 Windows 운영 체제는 일반적으로 빠른 실패 요청을 액세스 위반 또는 버그 검사로 UNEXPECTED_KERNEL_MODE_TRAP
처리합니다. 이러한 경우에도 프로그램은 종료되지만 종료 속도는 느려질 수 있습니다.
__fastfail
은 내장 함수로만 사용할 수 있습니다.
요구 사항
Intrinsic | 아키텍처 |
---|---|
__fastfail |
x86, x64, ARM, ARM64 |
헤더 파일<intrin.h>
Microsoft 전용 종료