__fastfail
Блок, относящийся только к системам Майкрософт
Немедленно завершает вызывающий процесс с минимальными издержками.
Синтаксис
__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 | Код операции 0xDEFB | r0 |
ARM64 | 0xF003 opcode | x0 |
Запрос быстрого сбоя является самодостаточным и обычно требует только две команды для выполнения. После выполнения быстрого запроса на сбой ядро принимает соответствующее действие. В коде пользовательского режима отсутствуют зависимости памяти за пределами самого указателя инструкций, когда происходит событие быстрого сбоя. Это повышает надежность даже в случаях серьезной повреждения памяти.
Аргумент code
, одна из FAST_FAIL_<description>
символьных констант из winnt.h или wdm.h, описывает тип условия сбоя. Он включается в отчеты о сбоях в определенной среде.
Запросы на быстрый сбой в пользовательском режиме отображаются как второй шанс неконтинуируемого исключения с 0xC0000409 кода исключений и по крайней мере с одним параметром исключения. Первый параметр исключения — значение code
. Этот код исключения указывает на отчеты об ошибках Windows (WER) и инфраструктуру отладки, поврежденную процессом, и что минимальные действия внутри процесса должны выполняться в ответ на сбой. Запросы быстрого сбоя в режиме ядра реализованы с помощью особого отладочного кода, KERNEL_SECURITY_CHECK_FAILURE
(0x139). В обоих случаях обработчики исключений не вызываются, поскольку программа предположительно в поврежденном состоянии. Если отладчик присутствует, он предоставляет возможность проверить состояние программы перед завершением работы.
Поддержка собственного механизма быстрого сбоя началась с Windows 8. Операционные системы Windows, которые не поддерживают инструкцию быстрого сбоя в собственном коде, обычно обрабатывают быстрый запрос на сбой как нарушение доступа или как ошибку UNEXPECTED_KERNEL_MODE_TRAP
. В этих случаях программа по-прежнему завершается, но не обязательно как можно быстрее.
__fastfail
доступен только как встроенный.
Требования
Intrinsic | Архитектура |
---|---|
__fastfail |
x86, x64, ARM, ARM64 |
Файл<заголовка intrin.h>
Завершение блока, относящегося только к системам Майкрософт