异常可以由硬件或软件启动,并且可以在内核模式和用户模式代码中发生。 结构化异常处理提供用于处理内核模式和用户模式异常的单一机制。
某些指令序列的执行可能会导致由硬件引发的异常。 例如,当进程尝试读取或写入其没有相应访问权限的虚拟地址时,硬件会生成访问冲突。
需要异常处理的事件也可能在软件例程执行期间发生(例如,指定无效的参数值时)。 发生这种情况时,线程可以通过调用 RaiseException 函数显式启动异常。 此函数使调用线程能够指定描述异常的信息。
异常可以是连续的,也可以是不可控制的。 当事件在硬件中不可连续或者延续没有意义时,会出现不可维持的异常。 不可继续的异常不会终止应用程序。 因此,应用程序可以捕获异常并运行。 但是,由于堆栈损坏或其他严重问题,通常会出现不可连续的异常,因此难以从异常中恢复。