异常处理 VEH
不算新的东西,也都不小了,
VEH的结构处理,平行于SEH,但是略有区别,
相关函数有四个
1 PVOID WINAPI AddVectoredExceptionHandler( 2 _In_ ULONG FirstHandler, 3 _In_ PVECTORED_EXCEPTION_HANDLER VectoredHandler 4 ); 5 6 ULONG WINAPI RemoveVectoredExceptionHandler( 7 _In_ PVOID Handler 8 ); 9 10 PVOID WINAPI AddVectoredContinueHandler( 11 _In_ ULONG FirstHandler, 12 _In_ PVECTORED_EXCEPTION_HANDLER VectoredHandler 13 ); 14 15 ULONG WINAPI RemoveVectoredContinueHandler( 16 _In_ PVOID Handler 17 );
第一个函数
1 PVOID WINAPI AddVectoredExceptionHandler( 2 _In_ ULONG FirstHandler, 3 _In_ PVECTORED_EXCEPTION_HANDLER VectoredHandler 4 );
用来向VEH链注册一个异常处理函数,
参数1的意思是,是否插入到VEH链首部,
如果参数1为非0,则此注册的函数会在出现异常之后优先被触发(仅仅是优先,是否First还要看是否有其他人也注册了函数)
如果参数1为0,则此注册寒暑会在出现异常之后滞后被触发(理由同上)
参数2是一个要注册的异常处理回调函数
第二个函数
1 ULONG WINAPI RemoveVectoredExceptionHandler( 2 _In_ PVOID Handler 3 );
从VEH链移除一个异常处理函数
参数是用前一个函数注册之后返回的指针
第三个函数
1 PVOID WINAPI AddVectoredContinueHandler( 2 _In_ ULONG FirstHandler, 3 _In_ PVECTORED_EXCEPTION_HANDLER VectoredHandler 4 );
与第一个函数类似,但有细微区别
第四个函数
1 ULONG WINAPI RemoveVectoredContinueHandler( 2 _In_ PVOID Handler 3 );
与第二个函数类似,但有细微区别
四个函数,
第一个函数和第二个函数可以分为一组,
第三个函数和第四个函数可以分为一组,
两组函数有细微区别,
区别就是:
第一组函数注册、移除的VEH异常处理回调函数,会在SEH链里面的异常处理函数执行之前执行
第二组函数注册、移除的VEH异常处理回调函数,会在SEH链里面的异常处理函数执后执行
对于VEH的使用,微软给了一段DEMO
https://msdn.microsoft.com/en-us/library/ms681411(v=vs.85).aspx
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库