EXCEPTION_RECORD-Struktur (winnt.h)

Beschreibt eine Ausnahme.

Syntax

typedef struct _EXCEPTION_RECORD {
  DWORD                    ExceptionCode;
  DWORD                    ExceptionFlags;
  struct _EXCEPTION_RECORD *ExceptionRecord;
  PVOID                    ExceptionAddress;
  DWORD                    NumberParameters;
  ULONG_PTR                ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
} EXCEPTION_RECORD;

Member

ExceptionCode

Der Grund, warum die Ausnahme aufgetreten ist. Dies ist der Code, der von einer Hardwareausnahme generiert wird, oder der Code, der in der RaiseException-Funktion für eine softwaregenerierte Ausnahme angegeben wird. In der folgenden Tabelle werden die Ausnahmecodes beschrieben, die wahrscheinlich aufgrund häufiger Programmierfehler auftreten.

Wert Bedeutung
EXCEPTION_ACCESS_VIOLATION
Der Thread hat versucht, aus einer virtuellen Adresse zu lesen oder in diese zu schreiben, für die er nicht über den entsprechenden Zugriff verfügt.
EXCEPTION_ARRAY_BOUNDS_EXCEEDED
Der Thread hat versucht, auf ein Arrayelement zuzugreifen, das außerhalb der Grenzen liegt, und die zugrunde liegende Hardware unterstützt die Begrenzungsüberprüfung.
EXCEPTION_BREAKPOINT
Es wurde ein Haltepunkt gefunden.
EXCEPTION_DATATYPE_MISALIGNMENT
Der Thread hat versucht, Daten zu lesen oder zu schreiben, die auf Hardware, die keine Ausrichtung bietet, falsch ausgerichtet sind. Beispielsweise müssen 16-Bit-Werte an 2-Byte-Grenzen ausgerichtet werden. 32-Bit-Werte an 4-Byte-Grenzen usw.
EXCEPTION_FLT_DENORMAL_OPERAND
Einer der Operanden in einem Gleitkommavorgang ist denormal. Ein denormaler Wert ist zu klein, um als Standard-Gleitkommawert darzustellen.
EXCEPTION_FLT_DIVIDE_BY_ZERO
Der Thread hat versucht, einen Gleitkommawert durch einen Gleitkomma divisor von 0 zu divisieren.
EXCEPTION_FLT_INEXACT_RESULT
Das Ergebnis eines Gleitkommavorgangs kann nicht genau als Dezimalbruch dargestellt werden.
EXCEPTION_FLT_INVALID_OPERATION
Diese Ausnahme stellt jede Gleitkomma-Ausnahme dar, die nicht in dieser Liste enthalten ist.
EXCEPTION_FLT_OVERFLOW
Der Exponent eines Gleitkommavorgangs ist größer als die vom entsprechenden Typ zulässige Größe.
EXCEPTION_FLT_STACK_CHECK
Der Stapel wurde als Ergebnis eines Gleitkommavorgangs über- oder unterlaufen.
EXCEPTION_FLT_UNDERFLOW
Der Exponent eines Gleitkommavorgangs ist kleiner als die vom entsprechenden Typ zulässige Größe.
EXCEPTION_ILLEGAL_INSTRUCTION
Der Thread hat versucht, eine ungültige Anweisung auszuführen.
EXCEPTION_IN_PAGE_ERROR
Der Thread hat versucht, auf eine Seite zuzugreifen, die nicht vorhanden war, und das System konnte die Seite nicht laden. Diese Ausnahme kann beispielsweise auftreten, wenn beim Ausführen eines Programms über das Netzwerk eine Netzwerkverbindung verloren geht.
EXCEPTION_INT_DIVIDE_BY_ZERO
Der Thread hat versucht, einen ganzzahligen Wert durch einen ganzzahligen Divisor von 0 zu divisieren.
EXCEPTION_INT_OVERFLOW
Das Ergebnis eines ganzzahligen Vorgangs verursachte eine Ausführung des wichtigsten Bits des Ergebnisses.
EXCEPTION_INVALID_DISPOSITION
Ein Ausnahmehandler hat eine ungültige Disposition an den Ausnahmeverteiler zurückgegeben. Programmierer, die eine allgemeine Sprache wie C verwenden, sollten niemals auf diese Ausnahme stoßen.
EXCEPTION_NONCONTINUABLE_EXCEPTION
Der Thread hat versucht, die Ausführung fortzusetzen, nachdem eine nicht zusammenhängende Ausnahme aufgetreten ist.
EXCEPTION_PRIV_INSTRUCTION
Der Thread hat versucht, eine Anweisung auszuführen, deren Vorgang im aktuellen Computermodus nicht zulässig ist.
EXCEPTION_SINGLE_STEP
Eine Ablaufverfolgungsfalle oder ein anderer Mechanismus mit einzeler Anweisung, der signalisiert, dass eine Anweisung ausgeführt wurde.
EXCEPTION_STACK_OVERFLOW
Der Thread hat seinen Stapel verbraucht.
 

Ein anderer Ausnahmecode tritt wahrscheinlich beim Debuggen von Konsolenprozessen auf. Es tritt nicht aufgrund eines Programmierfehlers auf. Der DBG_CONTROL_C Ausnahmecode tritt auf, wenn STRG+C in einen Konsolenprozess eingegeben wird, der STRG+C-Signale verarbeitet und debuggt wird. Dieser Ausnahmecode soll nicht von Anwendungen verarbeitet werden. Es wird nur zum Nutzen des Debuggers ausgelöst und nur ausgelöst, wenn ein Debugger an den Konsolenprozess angefügt ist.

ExceptionFlags

Dieses Element enthält null oder mehr Ausnahmeflags. In der folgenden Tabelle werden einige der häufig verwendeten Ausnahmeflags beschrieben. Ausnahmeflags, die in der folgenden Tabelle nicht vorhanden sind, sollten als für die Systemverwendung reserviert behandelt werden.

Ausnahmeflag Bedeutung
EXCEPTION_NONCONTINUABLE
Das Vorhandensein dieses Flags gibt an, dass die Ausnahme eine nicht zusammenhängende Ausnahme ist, während das Fehlen dieses Flags darauf hindeutet, dass die Ausnahme eine fortlaufende Ausnahme ist. Jeder Versuch, die Ausführung nach einer nicht feststellbaren Ausnahme fortzusetzen, verursacht die EXCEPTION_NONCONTINUABLE_EXCEPTION Ausnahme.
EXCEPTION_SOFTWARE_ORIGINATE
Dieses Flag ist für die Systemverwendung reserviert.

ExceptionRecord

Ein Zeiger auf eine zugeordnete EXCEPTION_RECORD-Struktur . Ausnahmedatensätze können miteinander verkettet werden, um zusätzliche Informationen bereitzustellen, wenn geschachtelte Ausnahmen auftreten.

ExceptionAddress

Die Adresse, an der die Ausnahme aufgetreten ist.

NumberParameters

Die Anzahl der Parameter, die der Ausnahme zugeordnet sind. Dies ist die Anzahl der definierten Elemente im Array ExceptionInformation .

ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]

Ein Array zusätzlicher Argumente, die die Ausnahme beschreiben. Die RaiseException-Funktion kann dieses Array von Argumenten angeben. Bei den meisten Ausnahmecodes sind die Arrayelemente nicht definiert. In der folgenden Tabelle werden die Ausnahmecodes beschrieben, deren Arrayelemente definiert sind.

Ausnahmecode Bedeutung
EXCEPTION_ACCESS_VIOLATION
Das erste Element des Arrays enthält ein Lese-/Schreibflag, das den Typ des Vorgangs angibt, der die Zugriffsverletzung verursacht hat. Wenn dieser Wert 0 ist, hat der Thread versucht, die nicht zugänglichen Daten zu lesen. Wenn dieser Wert 1 ist, hat der Thread versucht, in eine Adresse zu schreiben, auf die nicht zugegriffen werden kann.

Wenn dieser Wert 8 ist, hat der Thread eine Verletzung der Datenausführungsprävention (Data Execution Prevention, DEP) des Benutzermodus verursacht.

Das zweite Arrayelement gibt die virtuelle Adresse der nicht zugänglichen Daten an.

EXCEPTION_IN_PAGE_ERROR
Das erste Element des Arrays enthält ein Lese-/Schreibflag, das den Typ des Vorgangs angibt, der die Zugriffsverletzung verursacht hat. Wenn dieser Wert 0 ist, hat der Thread versucht, die nicht zugänglichen Daten zu lesen. Wenn dieser Wert 1 ist, hat der Thread versucht, in eine Adresse zu schreiben, auf die nicht zugegriffen werden kann.

Wenn dieser Wert 8 ist, hat der Thread eine Verletzung der Datenausführungsprävention (Data Execution Prevention, DEP) des Benutzermodus verursacht.

Das zweite Arrayelement gibt die virtuelle Adresse der nicht zugänglichen Daten an.

Das dritte Arrayelement gibt den zugrunde liegenden NTSTATUS-Code an, der zu der Ausnahme geführt hat.

Hinweise

Verwenden Sie eine der expliziten Formen dieser Struktur, um einem Debugger das Debuggen eines Ziels zu ermöglichen, das in einer anderen Architektur (32-Bit im Vergleich zu 64-Bit) ausgeführt wird.

typedef struct _EXCEPTION_RECORD32 {
    DWORD    ExceptionCode;
    DWORD ExceptionFlags;
    DWORD ExceptionRecord;
    DWORD ExceptionAddress;
    DWORD NumberParameters;
    DWORD ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
} EXCEPTION_RECORD32, *PEXCEPTION_RECORD32;

typedef struct _EXCEPTION_RECORD64 {
    DWORD    ExceptionCode;
    DWORD ExceptionFlags;
    DWORD64 ExceptionRecord;
    DWORD64 ExceptionAddress;
    DWORD NumberParameters;
    DWORD __unusedAlignment;
    DWORD64 ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
} EXCEPTION_RECORD64, *PEXCEPTION_RECORD64;

Anforderungen

   
Unterstützte Mindestversion (Client) Windows XP [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [Desktop-Apps | UWP-Apps]
Kopfzeile winnt.h (windows.h einschließen)

Weitere Informationen

EXCEPTION_DEBUG_INFO

EXCEPTION_POINTERS

GetExceptionInformation

Raiseexception

UnhandledExceptionFilter