EXCEPTION_RECORD 構造体 (winnt.h)

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

構文

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

メンバー

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
浮動小数点演算の結果を 10 進数で正確に表すことはできません。
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 例外が発生します。
EXCEPTION_SOFTWARE_ORIGINATE
このフラグは、システムで使用するために予約されています。

ExceptionRecord

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

ExceptionAddress

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

NumberParameters

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

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