EXCEPTION_RECORD64構造体 (winnt.h)

例外について説明します。

構文

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;

メンバー

ExceptionCode

例外が発生した理由。 これは、ハードウェア例外によって生成されたコード、またはソフトウェアによって生成された例外の RaiseException 関数で指定されたコードです。 次の表では、一般的なプログラミング エラーが原因で発生する可能性が高い例外コードについて説明します。

説明
EXCEPTION_ACCESS_VIOLATION
スレッドが、適切なアクセス権を持たない仮想アドレスからの読み取りまたは書き込みを試行しました。
EXCEPTION_ARRAY_BOUNDS_EXCEEDED
スレッドが範囲外の配列要素にアクセスしようとしましたが、基になるハードウェアは境界チェックをサポートしています。
EXCEPTION_BREAKPOINT
ブレークポイントが見つかりました。
EXCEPTION_DATATYPE_MISALIGNMENT
スレッドが、アラインメントを提供しないハードウェア上で不整合なデータの読み取りまたは書き込みを試みました。 たとえば、16 ビット値は 2 バイト境界に配置する必要があります。4 バイト境界上の 32 ビット値など。
EXCEPTION_FLT_DENORMAL_OPERAND
浮動小数点演算のオペランドの 1 つは非正規化です。 非正規値は、小さすぎて標準の浮動小数点値として表されない値です。
EXCEPTION_FLT_DIVIDE_BY_ZERO
スレッドが浮動小数点値を 0 の浮動小数点除数で除算しようとしました。
EXCEPTION_FLT_INEXACT_RESULT
浮動小数点演算の結果を小数部として正確に表すことはできません。
EXCEPTION_FLT_INVALID_OPERATION
この例外は、このリストに含まれていない浮動小数点例外を表します。
EXCEPTION_FLT_OVERFLOW
浮動小数点演算の指数が、対応する型で許容される大きさを超えています。
EXCEPTION_FLT_STACK_CHECK
浮動小数点演算の結果として、スタックがオーバーフローまたはアンダーフローされました。
EXCEPTION_FLT_UNDERFLOW
浮動小数点演算の指数は、対応する型で許容される大きさよりも小さくなります。
EXCEPTION_ILLEGAL_INSTRUCTION
スレッドが無効な命令を実行しようとしました。
EXCEPTION_IN_PAGE_ERROR
スレッドが存在しないページにアクセスしようとしましたが、システムがページを読み込めませんでした。 たとえば、この例外は、ネットワーク経由でプログラムを実行しているときにネットワーク接続が失われた場合に発生する可能性があります。
EXCEPTION_INT_DIVIDE_BY_ZERO
スレッドが整数値を 0 の整数除数で除算しようとしました。
EXCEPTION_INT_OVERFLOW
整数演算の結果により、結果の最も重要なビットが実行されました。
EXCEPTION_INVALID_DISPOSITION
例外ハンドラーから、例外ディスパッチャーに無効な処理が返されました。 C などの高度な言語を使用するプログラマは、この例外に遭遇することはありません。
EXCEPTION_NONCONTINUABLE_EXCEPTION
指定できない例外が発生した後に、スレッドが実行を続行しようとしました。
EXCEPTION_PRIV_INSTRUCTION
スレッドは、現在のマシン モードで操作が許可されていない命令を実行しようとしました。
EXCEPTION_SINGLE_STEP
トレース トラップまたはその他の単一命令メカニズムは、1 つの命令が実行されたことを通知しました。
EXCEPTION_STACK_OVERFLOW
スレッドがスタックを使い果たしました。
 

コンソール プロセスのデバッグ時に、別の例外コードが発生する可能性があります。 これは、プログラミング エラーのため発生しません。 DBG_CONTROL_C例外コードは、Ctrl + C シグナルを処理し、デバッグ中のコンソール プロセスに Ctrl + C が入力されるときに発生します。 この例外コードはアプリケーションによって処理されるものではありません。 デバッガーの利点のみを目的として発生し、デバッガーがコンソール プロセスにアタッチされている場合にのみ発生します。

ExceptionFlags

例外フラグ。 このメンバーは、連続する例外を示す 0、または非継続可能な例外を示す EXCEPTION_NONCONTINUABLE のいずれかになります。 続行できない例外の後に実行を続行しようとすると、 EXCEPTION_NONCONTINUABLE_EXCEPTION 例外が発生します。

ExceptionRecord

関連付けられている EXCEPTION_RECORD 構造体へのポインター。 例外レコードを連結して、入れ子になった例外が発生したときに追加情報を提供できます。

ExceptionAddress

例外が発生したアドレス。

NumberParameters

例外に関連付けられているパラメーターの数。 これは ExceptionInformation 配列内の定義された要素の数です。

__unusedAlignment

ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]

例外を記述する追加の引数の配列。 RaiseException 関数では、この引数の配列を指定できます。 ほとんどの例外コードでは、配列要素は未定義です。 次の表では、配列要素が定義されている例外コードについて説明します。

例外コード 説明
EXCEPTION_ACCESS_VIOLATION
配列の最初の要素には、アクセス違反の原因となった操作の種類を示す読み取り/書き込みフラグが含まれています。 この値が 0 の場合、スレッドはアクセスできないデータを読み取ろうとしました。 この値が 1 の場合、スレッドはアクセスできないアドレスに書き込もうとしました。

この値が 8 の場合、スレッドによってユーザー モードのデータ実行防止 (DEP) 違反が発生します。

2 番目の配列要素は、アクセスできないデータの仮想アドレスを指定します。

EXCEPTION_IN_PAGE_ERROR
配列の最初の要素には、アクセス違反の原因となった操作の種類を示す読み取り/書き込みフラグが含まれています。 この値が 0 の場合、スレッドはアクセスできないデータを読み取ろうとしました。 この値が 1 の場合、スレッドはアクセスできないアドレスに書き込もうとしました。

この値が 8 の場合、スレッドによってユーザー モードのデータ実行防止 (DEP) 違反が発生します。

2 番目の配列要素は、アクセスできないデータの仮想アドレスを指定します。

3 番目の配列要素は、例外が発生した基になる NTSTATUS コードを指定します。

解説

デバッガーが別のアーキテクチャ (32 ビットと 64 ビット) で実行されているターゲットをデバッグできるようにするには、この構造体の明示的な形式のいずれかを使用します。

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;

要件

   
サポートされている最小のクライアント Windows XP [デスクトップ アプリ | UWP アプリ]
サポートされている最小のサーバー Windows Server 2003 [デスクトップ アプリのみ | UWP アプリ]
Header winnt.h (Windows.h を含む)

関連項目

EXCEPTION_DEBUG_INFO

EXCEPTION_POINTERS

GetExceptionInformation

RaiseException

UnhandledExceptionFilter