WINDOW核心编程,讲SEH结构化处理时,有一个[继续处理程序]的技术
是向量化异常处理(VEH)的一种技术
在当指令代码抛出SEH异常时,如果没有找到__except异常过滤程序,就变成了[未处理异常],这时会调用SetUnhandledExceptionFilter函数设置的[全局异常过滤程序]
如果[全局异常过滤程序]返回EXCEPTION_CONTINUE_SEARCH,最后代表交给Window处理
WINDOW核心编程说[继续处理程序]技术在[全局异常过滤程序]之后,已安装的[继续处理异常函数]会依次调用
问题就来了,这段代码为什么没有调用已安装的[继续处理异常函数]?
-
char* w = NULL;
//全局异常处理函数
LONG WINAPI Error(_EXCEPTION_POINTERS *ExceptionInfo)
{
printf("Error...\r\n");
getchar();
return EXCEPTION_CONTINUE_SEARCH;
}
//已安装的继续处理异常函数1
LONG NTAPI Func1(PEXCEPTION_POINTERS ExceptionInfo)
{
printf("Func2\r\n");
getchar();
return EXCEPTION_CONTINUE_SEARCH;
}
//已安装的继续处理异常函数2
LONG NTAPI Func2(PEXCEPTION_POINTERS ExceptionInfo)
{printf("Func2\r\n");
return EXCEPTION_CONTINUE_SEARCH;
}
//主函数
int _tmain()
{
//更改为自己定义的全局异常处理函数
SetUnhandledExceptionFilter(Error);
//安装继续处理异常函数
PVOID p1 = AddVectoredContinueHandler(0, Func1);
PVOID p2 = AddVectoredContinueHandler(0, Func2);
//SEH结构化异常
__try
{
*w = 's';
}//不处理,交给全局函数处理
__except(EXCEPTION_CONTINUE_SEARCH)
{
printf("c/c++\r\n");
}
getchar();
return 0;
}