Exceptions Codes you’ve never heard of
If you write software for any length of time you’ll have seen your software fail in a variety of ways.
Exceptions are a common cause of application failure.
Exceptions are also used to handle unusual error cases, with the intention that the calling code is aware of this exception and will handle it, ensuring that the application doesn’t fail.
For this article, I’m going to be discussing Win32 structured exception handling (SEH) exception codes. I’m also going to assume that you’re using Visual Studio, a Windows SDK or another IDE, such as C++ Builder, or Delphi.
Most of the exception codes you’ve likely encountered in your career can be found declared in ntstatus.h
Depending on which version of Visual Studio you’re using some exception codes may not present.
I’m going to list exception codes that we’ve found during the process of developing software tools at Software Verify.
Many of these exception codes are not documented or are only present in recent versions of SDKs, which you may not be using because you’re still using an older Visual Studio.
Where possible we’ll indicate additional sources of information about a given exception code. We’ll indicate the actual exception code and what name we use to reference it. We’ll also include a downloadable header file so that you can use these definitions without needing to type them in yourself.
Visual Studio Specific
These exceptions are specific to Microsoft Visual Studio and Microsoft compilers and linkers.
Microsoft Thread Naming Exception
0x406D1388 SVL_THREAD_NAMING_EXCEPTION
This exception is used to communicate to a debugger (or any other monitoring tool) a suggested name to represent the thread. This is technique is discussed in this thread naming blog post. It has been replaced in Windows 10 by SetThreadDescription().
Visual Studio C++ Exception
0xE06D7363 SVL_MSVC_EXCEPTION
This exception is used to implement C++’s exception handling.
This is discussed in this blog post.
.Net specific
These exceptions are specific to the Common Language Runtime (CLR), used to implement .Net. Most of these exception codes we found while inspecting .Net Core open source code. A few of them we have found elsewhere.
CLR Fatal JIT Exception
0x02345678 SVL_CLR_NET_FATAL_JIT_EXCEPTION
This definition comes from .Net Core open source code.
CLR Data Checksum Exception
0x31415927 SVL_CLR_NET_CLRDBG_DATA_CHECKSUM_EXCEPTION
This definition comes from .Net Core open source code.
CLR First Chance Exception
0x04242420 SVL_CLRDBG_NOTIFICATION_EXCEPTION_CODE
CLR Bootup COM+ Exception
0xC0020001 SVL_CLR_NET_BOOTUP_COMPLUS_EXCEPTION
This definition comes from .Net Core open source code.
CLR Exception
0xE0434F4D SVL_CLR_NET_EXCEPTION
CLR COM+ Exception
0xE0434352 SVL_CLR_NET_COMPLUS_EXCEPTION
This definition comes from .Net Core open source code.
Many causes of this exception are discussed here.
CLR HIJACK Exception
0xE0434F4E SVL_CLR_NET_HIJACK_EXCEPTION
This definition comes from .Net Core open source code.
CLR Notify Exception
0xE0444143 SVL_CLR_NET_CLRDATA_NOTIFY_EXCEPTION
This definition comes from .Net Core open source code.
CLR EXX Exception
0xE0455858 SVL_CLR_NET_EXX_EXCEPTION
This definition comes from .Net Core open source code.
CLR SEH Verification Exception
0xE0564552 SVL_CLR_NET_SEH_VERIFICATION_EXCEPTION
This definition comes from .Net Core open source code.
CLR Internal ASSERT Exception
0xE0584D4E SVL_CLR_NET_INTERNAL_ASSERT_EXCEPTION
This definition comes from .Net Core open source code.
Embarcadero specific
The exceptions are thrown by software made with tools from Embarcadero (formerly Borland).
Delphi Exception 1
0x0EEDFADE SVL_DELPHI_EXCEPTION_1
This is an exception thrown by Delphi.
Delphi Exception 2
0x0EEDFACE SVL_DELPHI_EXCEPTION_2
This is an exception thrown by Delphi.
C++ Builder Exception
0x0EEFFACE SVL_CPP_BUILDER_EXCEPTION
This is an exception thrown by C++ Builder.
Windows SDK
These exceptions are Windows exceptions that may or may not be defined in the IDE/SDK that you are using.
For more information, you can look up error codes and exceptions here and here.
Fatal Memory Exhaustion
0xC00001AD STATUS_FATAL_MEMORY_EXHAUSTION
The process cannot allocate any more memory.
Fail Fast Exception
0xC0000602 STATUS_FAIL_FAST_EXCEPTION
This is used by the Kernel to handle fail fast exceptions. See the list of fail fast codes.
Stack Buffer Overrun
0xC0000409 STATUS_STACK_BUFFER_OVERRUN
This used to be used to indicate that the user mode callstack had had a buffer overrun, corrupting the stack and potentially opening up the application to a malicious attack.
This exception code has been repurposed. It is now used to handle user-mode fail-fast exceptions. The first parameter passed with the exception is the fast fail code.
Invalid C Runtime Parameter
0xC0000417 STATUS_INVALID_CRUNTIME_PARAMETER
This is used to indicate that invalid parameters have been passed to a C runtime function. An example of this would be passing too small a string buffer to a _stprintf_s();
Heap Corruption
0xC0000374 STATUS_HEAP_CORRUPTION
A Win32 heap (HeapCreate, HeapDestroy, HeapAlloc, HeapReAlloc, HeapFree) has had its internal structures corrupted, or you’ve passed a bogus address to HeapReAlloc() or HeapFree().
Invalid Exception Handler
0xC00001A5 STATUS_INVALID_EXCEPTION_HANDLER
An exception handler was expected but not found.
You can often see this in 32-bit programs where the stack (containing the stack-based exception handler) has been corrupted.
Unwind
0xC0000027 STATUS_UNWIND
Bad Stack
0xC0000028 STATUS_BAD_STACK
During an unwind operation an invalid stack location or a misaligned stack location was found.
Invalid Unwind Target
0xC0000029 STATUS_INVALID_UNWIND_TARGET
During an unwind operation an invalid unwind target was found.
Fatal User Callback Exception
0xC000041D STATUS_FATAL_USER_CALLBACK_EXCEPTION
An unhandled exception was found while handling a user callback.
Invalid Image Format
0xC000007B STATUS_INVALID_IMAGE_FORMAT
The specified file is not a PE format file, or it is a PE format file for a different processor architecture than the version that Windows is running.
To inspect PE files you can use PE File Browser.
Debugger Inactive
0xC0000354 STATUS_DEBUGGER_INACTIVE
Windows may have been started without Kernel debugging enabled.
Certificate Expired
0x800B0101 CERT_E_EXPIRED
The certificate is not within its validity period when verifying against the current system clock or the timestamp in the signed file.
x86 Breakpoint
0x4000001F STATUS_WX86_BREAKPOINT
Exception code used by the Win32 x86 emulation subsystem.
Debug Reply Later
0x40010001 DBG_REPLY_LATER
The debugger will reply later.
Debug Unable to provide handle
0x40010002 DBG_UNABLE_TO_PROVIDE_HANDLE
The debugger cannot provide the handle requested.
Debug Terminate Thread
0x40010003 DBG_TERMINATE_THREAD
Thread terminated by the debugger.
Debug Terminate Process
0x40010004 DBG_TERMINATE_PROCESS
Process terminated by the debugger.
Debug Control-C
0x40010005 DBG_CONTROL_C
The debugger received Ctrl-C.
Debug Print Exception Char
0x40010006 DBG_PRINTEXCEPTION_C
The debugger received a message from OutputDebugStringA();
Debug RIP Exception
0x40010007 DBG_RIPEXCEPTION
The debugger received a RIP exception.
Debug Control Break
0x40010008 DBG_CONTROL_BREAK
The debugger received Ctrl-Break.
Debug Command Exception
0x40010009 DBG_COMMAND_EXCEPTION
Debugger communicating a command.
Debug Print Exception Wide Char
0x4001000A DBG_PRINTEXCEPTION_WIDE_C
Debugger received message from OutputDebugStringW();
Debug Exception Not Handled
0x80010001 DBG_EXCEPTION_NOT_HANDLED
The debugger did not handle the exception.
Assertion Failure
0xC0000420 STATUS_ASSERTION_FAILURE
An assertion failed. See NT_ASSERT() and NT_ASSERTMSG().
Fatal Application Exit
0x40000015 STATUS_FATAL_APP_EXIT
Application exited via a call to abort(); or as a result of a fast fail exception.
Application Hang
0xCFFFFFFF STATUS_APPLICATION_HANG
Application Verifier Stop
0xC0000421 STATUS_VERIFIER_STOP
Application verifier has found an error in the current process
Module Not Found
0x8007007E STATUS_MODULE_NOT_FOUND
This is a Software Verify name for this exception, we can’t find an official name.
Procedure Not Found
0xC06D007F STATUS_PROCEDURE_NOT_FOUND
This is a Software Verify name for this exception, we can’t find an official name.
Bad Exe Format
0x800700C1 STATUS_BAD_EXE_FORMAT
This is a Software Verify name for this exception, we can’t find an official name.
Software Restriction Policy
0x800704EC STATUS_SOFTWARE_RESTRICTION_POLICY
This is a Software Verify name for this exception, we can’t find an official name.
Recursion Too Deep Stack Overflow
0x800703E9 STATUS_RECURSION_TOO_DEEP_STACK_OVERFLOW
This is a Software Verify name for this exception, we can’t find an official name.
.Net Core Runtime Cannot Find Compatible Framework
0x80008081 STATUS_DOT_NET_CORE_RUNTIME_COMPATIBLE_FRAMEWORK
This is a Software Verify name for this exception, we can’t find an official name.
Strictly speaking this isn’t an exception, but is an error code returned by dotnet when an error occurs.
You can attempt to fix this error by following the instructions for How To Fix .Net Core Runtime Errors.
.Net Core Runtime Library Load Failure
0x80008082 STATUS_DOT_NET_CORE_RUNTIME_LIB_LOAD_FAILURE
This is a Software Verify name for this exception, we can’t find an official name.
Strictly speaking this isn’t an exception, but is an error code returned by dotnet when an error occurs.
You can attempt to fix this error by following the instructions for How To Fix .Net Core Runtime Errors.
.Net Core Runtime Cannot Find Runtime Target
0x80008083 STATUS_DOT_NET_CORE_CANNOT_FIND_RUNTIME_TARGET
This is a Software Verify name for this exception, we can’t find an official name.
Strictly speaking this isn’t an exception, but is an error code returned by dotnet when an error occurs.
You can attempt to fix this error by following the instructions for How To Fix .Net Core Runtime Errors.
.Net Core Runtime Version Not Installed
0x80008096 STATUS_DOT_NET_CORE_RUNTIME_VERSION_NOT_INSTALLED
This is a Software Verify name for this exception, we can’t find an official name.
Strictly speaking this isn’t an exception, but is an error code returned by dotnet when an error occurs.
You can attempt to fix this error by following the instructions for How To Fix .Net Core Runtime Errors.
Header File
I hope you found the above list useful.
You can download the exceptionCodes.h header file.
How to Fix .Net Core Runtime Errors
If you’ve go one of the .Net Core errors above it’s probably because the correct version of .Net Core is not installed, or the installation is corrupt.
To find out which .Net Core installations you have type open a cmd prompt then type dotnet –info.
As you can see this dev machine has quite a few versions installed.
Compare the versions with the .Net Core version number you need and decide which version of .Net Core you need to download.
The .Net Core version number you need was probably displayed in any text error messages displayed when you tried to run your .Net Core application.
How to download the installer for the .Net Core version you want?
To download any version of .Net Core, including out of date versions visit https://aka.ms/dotnet/download.