SetErrorMode
The SetErrorMode
function controls how the operating system handles several types of serious
errors. You can specify that the operating system will handle these errors or
that the application will receive and handle them.
UINT SetErrorMode(
UINT uMode |
// set of bit flags
that specify error-handling properties |
); |
|
Parameters
uMode
A set of bit
flags that specify system error-handling properties. The following error mode
bit flag constants are defined; you can set any combination of them:
Value |
Action |
SEM_FAILCRITICALERRORS |
If this
flag is set, the operating system does not display the critical-error-handler
message box when such an error occurs. Instead, the operating system sends
the error to the calling process. |
SEM_NOALIGNMENTFAULTEXCEPT |
If this
flag is set, the operating system automatically fixes memory alignment faults
and makes them invisible to the application. It does this for the calling
process and any descendant processes. This flag
always affects MIPS processors. It has no effect on x86 processors. If the
registry value \CurrentControlSet\Control\Session
Manager:EnableAlignmentFaultExceptions is set to REG_DWORD 0x0, this key has
no effect on ALPHA processors. That is the system default. If the registry
key is set to REG_DWORD 0x1, the SEM_NOALIGNMENTFAULTEXCEPT flag does affect
ALPHA processors. |
SEM_NOGPFAULTERRORBOX |
If this
flag is set, the operating system does not display the
general-protection-fault message box when such an error occurs. This flag
should only be set by debugging applications that handle general
protection (GP) faults themselves via an appropriate exception handler. |
SEM_NOOPENFILEERRORBOX |
If this
flag is set, the operating system does not display a message box when it
fails to find a a file. Instead, the error is returned to the calling process. |
Return Values
The return
value is the previous state of the error-mode bit flags.
Remarks
A child
process inherits the error mode of its parent process.
The default
state for the error mode properties set by this function is OFF.
On some
non-x86 processors misaligned memory references cause an alignment fault
exception. The SEM_NOALIGNMENTFAULTEXCEPT flag lets you control whether the
operating system automatically fixes such alignment faults, or makes them
visible to an application.
The
SEM_NOALIGNMENTFAULTEXCEPT flag always affects MIPS processors. It never
affects x86 processors. It affects ALPHA processors only if the registry key
\CurrentControlSet\Control\Session Manager:EnableAlignmentFaultExceptions is
set to REG_DWORD 0x1. The default setting for that registry key is REG_DWORD
0x0.
On an x86
platform, an application doesn t need to do anything to have the operating
system automatically fix misaligned memory references. The operating system
does not make alignment faults visible to an application.
On a MIPS
platform, an application must explicitly call SetErrorMode, setting the
SEM_NOALIGNMENTFAULTEXCEPT flag, to have the operating system automatically fix
alignment faults. The default setting is for the operating system to make
alignment faults visible to an application.
On an ALPHA
platform, the operating system automatically fixes alignment faults, unless the
aforementioned registry key is set to REG_DWORD 0x1. When that registry key is
set to REG_DWORD 0x1, the operating system makes alignment faults visible to an
application, and an application must then call SetErrorMode to have the
operating system automatically fix alignment faults.
Specifying
the SEM_NOALIGNMENTFAULTEXCEPT flag on x86 systems is not an error, but
implementations of Windows NT are free to silently ignore and not properly
preserve the flag. This means that code sequences such as the following are not
always valid on x86 systems:
SetErrorMode(SEM_NOALIGNMENTFAULTEXCEPT);
fuOldErrorMode
= SetErrorMode(0);
ASSERT(fuOldErrorMode
== SEM_NOALIGNMENTFAULTEXCEPT);