veh与seh是并行的异常处理机制.感觉你的seh和ueh没什么区别,你把处理的异常归到了seh,把未处理异常归到了ueh
我又看了遍书
下面都是对未处理异常的描述;
UnhandledExceptionFilter() 系统过滤函数
TopLevelUnhandledExceptionFilter()自己实现
SetUnhandledExceptionFilter()
个人认为所有的未处理异常在抛出后,到达的都是
UnhandledExceptionFilter(),实在没办法处理后也是从
UnhandledExceptionFilter()出去,到达windows错误报告.
而在程序中可以用
SetUnhandledExceptionFilter()把
TopLevelUnhandledExceptionFilter()注册到
UnhandledExceptionFilter()的执行步骤中去.
UnhandledExceptionFilter() 的执行步骤中会检查是否注册了
TopLevelUnhandledExceptionFilter() ,如果注册就执行,并对
TopLevelUnhandledExceptionFilter()返回的EXCEPTION_EXCEUTE_HANDLER或
EXCEPTION_CONTINUE_EXECUTION,由
UnhandledExceptionFilter() 直接返回给系统.如果
TopLevelUnhandledExceptionFilter()
还返回EXCEPTION_CONTINUE_SEARCH,基本就是附加调试器或终止程序了(即
UnhandledExceptionFilter() 与windows错误报告的交互).
在自己实现的
TopLevelUnhandledExceptionFilter()或其他的异常过滤程序的函数中可能会调用
UnhandledExceptionFilter()而构成循环调用,所以可在自己的函数中用
SetUnhandledExceptionFilter(null)把注册在
UnhandledExceptionFilter()中的
TopLevelUnhandledExceptionFilter()还原成
UnhandledExceptionFilter().
C++异常在编译时被转化成windows结构化异常
C++初始化(C++运行库)程序会用
SetUnhandledExceptionFilter()注册自己的
TopLevelUnhandledExceptionFilter(),
SetUnhandledExceptionFilter()会返回前一个
TopLevelUnhandledExceptionFilter()的地址.
新手,以上是windows核心编程第五版的内容理解.