SetUnhandledExceptionFilter函数允许应用程序取代Win32放置在每个线程和进程顶部的顶级异常处理程序。
调用此函数后,如果在未调试的进程中发生异常,并且异常会使其返回到Win32未处理的异常过滤器,该过滤器将调用【lpTopLevelExceptionFilter】参数指定的异常过滤器函数。
LPTOP_LEVEL_EXCEPTION_FILTER SetUnhandledExceptionFilter(
LPTOP_LEVEL_EXCEPTION_FILTER 【lpTopLevelExceptionFilter】 | //异常过滤功能 |
); |
参数
【lpTopLevelExceptionFilter】
提供顶级异常过滤器功能的地址,只要UnhandledExceptionFilter 功能获得控制,该进程将被调用,并且进程未被调试。此参数的值为NULL指定UnhandledExceptionFilter内的默认处理。
过滤器函数的语法与UnhandledExceptionFilter的语法相同:它采用类型为LPEXCEPTION_POINTERS的单个参数,并返回值为LONG的值。过滤器函数应该返回以下值之一:
值 | 含义 |
EXCEPTION_EXECUTE_HANDLER | 从UnhandledExceptionFilter返回并执行关联的异常处理程序。这通常导致过程终止。 |
EXCEPTION_CONTINUE_EXECUTION | 从UnhandledExceptionFilter返回,并从异常点继续执行。请注意,过滤器功能可以通过修改通过其LPEXCEPTION_POINTERS参数提供的异常信息来自由修改连续状态。 |
EXCEPTION_CONTINUE_SEARCH | 继续正常执行UnhandledExceptionFilter.这意味着遵守SetErrorMod标志,或调用“应用程序错误”弹出消息框。 |
返回值
SetUnhandledExceptionFilter函数返回使用该函数建立的上一个异常过滤器的地址。NULL返回值意味着没有当前的顶级异常处理程序。
备注
发出SetUnhandledExceptionFilter将替换调用进程中所有现有和所有未来线程的顶层异常过滤器。
由【lpTopLevelExceptionFilter】指定的异常处理程序在导致故障的线程的上下文中执行。这可能会影响异常处理程序从某些异常中恢复的能力,例如无效堆栈。
也可以看看