RaiseException函数在调用线程中引发异常。
VOID RaiseException(
DWORD 【dwExceptionCode】, | //异常代码 |
DWORD 【dwExceptionFlags】, | //可持续异常标志 |
DWORD 【nNumberOfArguments】, | //数组中的参数数 |
CONST DWORD *【lpArgumentssv】 | //参数数组的地址 |
); |
参数
【dwExceptionCode】
指定引发异常的应用程序定义异常代码。异常处理程序的过滤器表达式和异常处理程序块可以使用GetExceptionCode函数来检索该值。
请注意,系统将会清除【dwExceptionCode】的第28位。该位是保留的异常位,由系统为其自身目的使用。例如,在【dwExceptionCode】值为0xEFFFFFFF调用RaiseException函数后,Windows将显示一条消息,指示异常编号为0xEFFFFFFF。
【dwExceptionFlags】
指定异常标志。这可以是零表示可持续异常,或者EXCEPTION_NONCONTINUABLE表示不可持续异常。任何尝试在不可持续异常之后继续执行都会导致EXCEPTION_NONCONTINUABLE_EXCEPTION异常。
【nNumberOfArguments】
指定【lpArgumentssv】数组中的参数数。此值不得超过EXCEPTION_MAXIMUM_PARAMETERS。如果【lpArgumentssv】为NULL,则忽略此参数。
【lpArgumentssv】
指向一组32位参数。此参数可以为NULL。这些参数可以包含任何需要传递给异常处理程序的过滤器表达式的应用程序定义的数据。
返回值
此函数不返回值。
备注
RaiseException功能使进程能够使用结构化异常处理来处理私有的,软件生成的应用程序定义的异常。
引发异常会导致异常调度程序通过以下搜索异常处理程序:
系统首先尝试通知进程的调试器(如果有的话)。
2.如果进程没有被调试,或者相关的调试器不处理异常,系统将通过搜索发生异常的线程的堆栈帧来尝试定位基于帧的异常处理程序。系统首先搜索当前的堆栈帧,然后通过前面的栈帧向后进行。
3.如果没有找到基于帧的处理程序,或者没有基于帧的处理程序处理异常,则系统再次尝试通知进程的调试器。
4.如果进程没有被调试,或者相关的调试器不处理异常,系统会根据异常类型提供默认处理。对于大多数异常,默认操作是调用ExitProcess函数。
可以通过调用GetExceptionInformation函数在尝试 - 除基于帧的异常处理程序的过滤器表达式中检索【dwExceptionCode】,【dwExceptionFlags】,【nNumberOfArguments】和【lpArgumentssv】参数中指定的值。调试器可以通过调用WaitForDebugEvent函数来检索这些值。
也可以看看
ExitProcess, GetExceptionCode, GetExceptionInformation, WaitForDebugEvent