例外は、ハードウェアまたはソフトウェアによって開始され、カーネル モードとユーザー モード コードで発生する可能性があります。 構造化例外処理は、カーネル モードとユーザー モードの例外を処理するための 1 つのメカニズムを提供します。
特定の命令シーケンスを実行すると、ハードウェアによって開始される例外が発生する可能性があります。 たとえば、プロセスが適切なアクセス権を持たない仮想アドレスに対して読み取りまたは書き込みを試みると、ハードウェアによってアクセス違反が生成されます。
例外処理を必要とするイベントは、ソフトウェア ルーチンの実行中 (無効なパラメーター値が指定されている場合など) にも発生する可能性があります。 この場合、スレッドは、RaiseException 関数を呼び出すことによって、例外を明示的に開始できます。 この関数を使用すると、呼び出し元のスレッドは例外を説明する情報を指定できます。
例外は、連続可能または非コンティニュアブルにすることができます。 ハードウェアでイベントが継続できない場合、または継続が意味をなさない場合は、コンティニュ不可の例外が発生します。 コンティニュアブルでない例外は、アプリケーションを終了しません。 そのため、アプリケーションで例外をキャッチして実行できる場合があります。 ただし、一般に、スタックの破損やその他の重大な問題の結果として、一般的に不一時的な例外が発生し、例外からの復旧が困難になります。