__fastfail
Блок, относящийся только к системам Microsoft
Немедленно завершает вызывающий процесс с минимальными издержками.
void __fastfail(unsigned int code);
Параметры
- [in] code
Символьная константа FAST_FAIL_<description> из winnt.h или wdm.h, указывающая на причину завершения процесса.
Возвращаемое значение
Встроенная __fastfail не возвращается.
Заметки
Встроенная функция __fastfail предоставляет механизм для запроса Быстрый сбой — с его помощью потенциально поврежденный процесс запрашивает немедленное завершение процесса. Критические сбои, которые могут привести к повреждению состояния программы и стека после восстановления, не могут быть обработаны обычным механизмом обработки исключений. Используйте __fastfail для завершения процесса с минимальными издержками.
Внутренне __fastfail реализуется с помощью несколько механизмов в зависимости от конкретной архитектуры:
Архитектура |
Инструкция |
Расположение аргумента кода |
---|---|---|
x86 |
int 0x29 |
ecx |
x64 |
int 0x29 |
rcx |
ARM |
Код операции 0xDEFB |
r0 |
Запрос быстрого сбоя является самодостаточным и обычно требует только две команды для выполнения. После выполнения запроса быстрого сбоя ядро предпринимает соответствующие действия. В коде пользовательского режима отсутствуют зависимости памяти за пределами самого указателя инструкций, когда происходит событие быстрого сбоя. Это увеличивает его надежность, даже в случае серьезного повреждения памяти.
Аргумент code — одна из символьных констант FAST_FAIL_<description> из winnt.h или wdm.h — описывает тип состояния ошибки и включается в отчеты об ошибке в соответствии с конкретной средой.
Запросы пользовательского режима быстрого сбоя отображаются как второй экземпляр не допускающее исключения с кодом исключения 0xC0000409 и исключение по крайней мере один параметр. Первый параметр исключения — значение code . Этот код исключения указывает Windows Error Reporting (WER) и инфраструктуре отладки, что процесс поврежден и минимальные действия внутри процесса необходимы в ответ на сбой. Запросы быстрого сбоя в режиме ядра реализованы с помощью особого отладочного кода, KERNEL_SECURITY_CHECK_FAILURE (0x139). В обоих случаях обработчики исключений не вызываются, поскольку программа предположительно в поврежденном состоянии. Если отладчик присутствует, ему дается возможность проверки состояния программы перед завершением.
Поддержка собственного механизма быстрого сбоя началась с Windows 8. Операционные системы Windows, которые изначально не поддерживают инструкцию быстрого сбоя, обычно будут рассматривать запрос на быстрый сбой как нарушение прав доступа или как код отладки UNEXPECTED_KERNEL_MODE_TRAP. В этих случаях программа по-прежнему завершается, но не обязательно как можно быстрее.
__fastfail доступна только как встроенная.
Требования
Встроенная функция |
Архитектура |
---|---|
__fastfail |
x86 x64, ARM |
Файл заголовка <intrin.h>