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