Функция SetErrorMode (errhandlingapi.h)

Определяет, будет ли система обрабатывать указанные типы серьезных ошибок или будет ли процесс их обрабатывать.

Синтаксис

UINT SetErrorMode(
  [in] UINT uMode
);

Параметры

[in] uMode

Режим ошибок процесса. Этот параметр может иметь одно или несколько из следующих значений.

Значение Значение
0
Используйте системное значение по умолчанию, которое заключается в отображении всех диалоговых окон ошибок.
SEM_FAILCRITICALERRORS
0x0001
Система не отображает окно сообщения critical-error-handler. Вместо этого система отправляет ошибку вызывающей процедуре.

Рекомендуется, чтобы все приложения вызывали функцию SetErrorMode на уровне процесса с параметром SEM_FAILCRITICALERRORS при запуске. Это позволяет предотвратить зависание приложения в диалоговых окнах режима ошибок.

SEM_NOALIGNMENTFAULTEXCEPT
0x0004
Система автоматически исправляет ошибки выравнивания памяти и делает их невидимыми для приложения. Это делается для вызывающего процесса и всех процессов-потомков. Эта функция поддерживается только определенными архитектурами процессора. Дополнительные сведения см. в разделе «Примечания».

После установки этого значения для процесса последующие попытки очистить значение игнорируются.

SEM_NOGPFAULTERRORBOX
0x0002
Система не отображает диалоговое окно отчеты об ошибках Windows.
SEM_NOOPENFILEERRORBOX
0x8000
Функция OpenFile не отображает окно сообщения, если ей не удается найти файл. Вместо этого вызывающей объекту возвращается ошибка. Этот режим ошибок переопределяет флаг OF_PROMPT .

Возвращаемое значение

Возвращаемое значение — это предыдущее состояние битовых флагов режима ошибки.

Комментарии

Каждый процесс имеет связанный режим ошибок, который указывает системе, как приложение будет реагировать на серьезные ошибки. Дочерний процесс наследует режим ошибок родительского процесса. Чтобы получить режим ошибок процесса, используйте функцию GetErrorMode .

Так как режим ошибок задан для всего процесса, необходимо убедиться, что многопотоковые приложения не задают различные флаги режима ошибок. Это может привести к несогласованной обработке ошибок.

Система не делает ошибки выравнивания видимыми для приложения на всех архитектурах процессора. Таким образом, указание SEM_NOALIGNMENTFAULTEXCEPT не является ошибкой в таких архитектурах, но система может автоматически игнорировать запрос. Это означает, что следующие последовательности кода не всегда допустимы на компьютерах x86:

C++
SetErrorMode(SEM_NOALIGNMENTFAULTEXCEPT); 
fuOldErrorMode = SetErrorMode(0); 
ASSERT(fuOldErrorMode == SEM_NOALIGNMENTFAULTEXCEPT);
Itanium: Приложение должно явно вызывать SetErrorMode с SEM_NOALIGNMENTFAULTEXCEPT, чтобы система автоматически исправляла ошибки выравнивания. По умолчанию система может сделать ошибки выравнивания видимыми для приложения.

Visual Studio 2005: При объявлении указателя на структуру, которая может не содержать выровненные данные, можно использовать __unaligned ключевое слово, чтобы указать, что тип должен считываться по одному байту за раз. Дополнительные сведения см. в разделе Выравнивание данных Windows.

Windows 7: Вызывающие стороны должны использовать SetThreadErrorMode вместо SetErrorMode , так как это менее нарушает нормальное поведение системы.

Требования

Требование Значение
Минимальная версия клиента Windows XP [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2003 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header errhandlingapi.h (включая Windows.h)
Библиотека Kernel32.lib
DLL Kernel32.dll

См. также

Функции обработки ошибок

Режим ошибки

GetErrorMode

SetThreadErrorMode