RaiseException 函数 (errhandlingapi.h)

在调用线程中引发异常。

语法

void RaiseException(
  [in] DWORD           dwExceptionCode,
  [in] DWORD           dwExceptionFlags,
  [in] DWORD           nNumberOfArguments,
  [in] const ULONG_PTR *lpArguments
);

参数

[in] dwExceptionCode

正在引发的异常的应用程序定义的异常代码。 异常处理程序的筛选器表达式和异常处理程序块可以使用 GetExceptionCode 函数来检索此值。

请注意,在显示消息“此位是保留的异常位”之前,系统将清除 dwExceptionCode 的第 28 位,由系统出于自己的目的使用。

[in] dwExceptionFlags

异常标志。 这可以是零来指示连续异常,也可以是EXCEPTION_NONCONTINUABLE表示不可连续的异常。 在不可连续的异常后继续执行的任何尝试都会导致EXCEPTION_NONCONTINUABLE_EXCEPTION异常。

[in] nNumberOfArguments

lpArguments 数组中的参数数。 此值不得超过 EXCEPTION_MAXIMUM_PARAMETERS。 如果 lpArgumentsNULL,则忽略此参数。

[in] lpArguments

参数数组。 此参数可以为 NULL。 这些参数可以包含需要传递给异常处理程序的筛选器表达式的任何应用程序定义数据。

返回值

此函数不返回值。

注解

RaiseException 函数使进程能够使用结构化异常处理来处理软件生成的应用程序定义的专用异常。

引发异常会导致异常调度程序对异常处理程序进行以下搜索:

  1. 系统首先尝试通知进程的调试器(如果有)。
  2. 如果进程没有进行调试,或者关联的调试程序没有处理异常,系统会尝试通过搜索发生异常的线程的堆栈帧来定位基于帧的异常处理程序。 系统先搜索当前堆栈帧,然后向后浏览前面的堆栈帧。
  3. 如果找不到基于帧的处理程序,或者没有基于帧的处理程序处理异常,系统会再次尝试通知进程的调试器。
  4. 如果进程没有进行调试,或者关联的调试程序没有处理异常,系统会根据异常类型提供默认处理。 对于大多数异常,默认操作是调用 ExitProcess 函数。

可以通过调用 GetExceptionInformation 函数,在基于帧的异常处理程序的筛选器表达式中检索 dwExceptionCodedwExceptionFlagsnNumberOfArgumentslpArguments 参数中指定的值。 调试器可以通过调用 WaitForDebugEvent 函数来检索这些值。

示例

有关示例,请参阅使用异常处理程序

要求

   
最低受支持的客户端 Windows XP [桌面应用 | UWP 应用]
最低受支持的服务器 Windows Server 2003 [桌面应用 | UWP 应用]
目标平台 Windows
标头 errhandlingapi.h (包括 Windows.h)
Library Kernel32.lib
DLL Kernel32.dll

另请参阅

ExitProcess

GetExceptionCode

GetExceptionInformation

结构化异常处理函数

结构化异常处理概述

WaitForDebugEvent

VBS enclave 中可用的 Vertdll API