EXCEPTION_RECORD64-Struktur (winnt.h)

Beschreibt eine Ausnahme.

Syntax

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;

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 ist. In den folgenden Tabellen 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 eine virtuelle Adresse 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
Ein Haltepunkt wurde 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 Denormalwert ist zu klein, um als Standard-Gleitkommawert darzustellen.
EXCEPTION_FLT_DIVIDE_BY_ZERO
Der Thread hat versucht, einen Gleitkommawert durch einen Gleitkommateiler 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 ist als Ergebnis eines Gleitkommavorgangs über- oder unterfließt.
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 unterbrochen wird.
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. Bei Programmierern, die eine allgemeine Programmiersprache wie C verwenden, sollte diese Ausnahme nicht auftreten.
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 einer einzelnen Anweisung signalisiert, dass eine Anweisung ausgeführt wurde.
EXCEPTION_STACK_OVERFLOW
Der Thread hat seinen Stapel verbraucht.
 

Ein weiterer 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 ist nicht für die Verarbeitung von Anwendungen vorgesehen. Sie wird nur zum Nutzen des Debuggers ausgelöst und nur ausgelöst, wenn ein Debugger an den Konsolenprozess angefügt ist.

ExceptionFlags

Die Ausnahmeflags. Dieser Member kann entweder null sein, was eine fortlaufende Ausnahme angibt, oder EXCEPTION_NONCONTINUABLE , der eine nicht zusammenhängende Ausnahme angibt. Jeder Versuch, die Ausführung nach einer nicht zusammenhängenden Ausnahme fortzusetzen, verursacht die EXCEPTION_NONCONTINUABLE_EXCEPTION Ausnahme.

ExceptionRecord

Ein Zeiger auf eine zugeordnete EXCEPTION_RECORD-Struktur . Ausnahmedatensätze können 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 ExceptionInformation-Array .

__unusedAlignment

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 Flag mit Lese-/Schreibzugriff, das den Typ des Vorgangs angibt, der die Zugriffsverletzung verursacht hat. Wenn dieser Wert null ist, hat der Thread versucht, die daten zu lesen, auf die nicht zugegriffen werden kann. 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, verursacht der Thread einen Verstoß gegen die Verhinderung von Datenausführung im Benutzermodus (Data Execution Prevention, DEP).

Das zweite Arrayelement gibt die virtuelle Adresse der Daten an, auf die nicht zugegriffen werden kann.

EXCEPTION_IN_PAGE_ERROR
Das erste Element des Arrays enthält ein Flag mit Lese-/Schreibzugriff, das den Typ des Vorgangs angibt, der die Zugriffsverletzung verursacht hat. Wenn dieser Wert null ist, hat der Thread versucht, die daten zu lesen, auf die nicht zugegriffen werden kann. 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, verursacht der Thread einen Verstoß gegen die Verhinderung von Datenausführung im Benutzermodus (Data Execution Prevention, DEP).

Das zweite Arrayelement gibt die virtuelle Adresse der Daten an, auf die nicht zugegriffen werden kann.

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

Hinweise

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, verwenden Sie eine der expliziten Formen dieser Struktur.

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