首页 > 系统相关 >24.3 向量化异常VEH--《Windows核心编程》

24.3 向量化异常VEH--《Windows核心编程》

时间:2022-11-25 16:47:07浏览次数:44  
标签:EXCEPTION -- 24.3 Windows pfnHandler 异常 处理函数 VEH SEH

Windows 提供了向量化异常处理(vectored excepation handing,VEH)机制。程序可以注册一个函数,每当异常发送或者一个未处理异常脱离标准SEH的控制时,这个函数就会被调用。

PVOID AddVectoredExceptionHanler(
ULONG bFirstInTheList,
PVECTORED_EXCEPTION_HANDLER pfnHandler);

  • pfnHandler 是指向量化异常处理程序的指针,必须有以下签名:

LONG WINAPI ExceptionHandler(struct _EXCEPTION_POINTERS* pExceptionInfo);

向量化异常处理程序返回值:

(1)一旦某个向量化异常处理函数能纠正问题,就应该马上返回 EXCEPTION_CONTINUE_EXECUTION,让其抛出异常的指令再次执行,且 SEH 过滤程序不会有处理异常的机会。
(2)如果不能纠正问题,应该返回 EXCEPTION_CONTINUE_SEARCH,让列表中其他处理函数有机会去处理异常。
(3)VEH过滤函数绝对不能返回 EXCEPTION_EXECUTE_HANDLER

  • bFirstInTheList如果传0,那么通过 pfnHandler 传递的异常处理程序就会添加到列表的尾部,否则添加到头部。发生异常的时候,在执行 SEH 过滤程序之前,将按列表顺序逐个调用函数。

 


 

可以通过 RemoveVectoredExceptionHandler 删除之前安装的 VEH 异常处理函数

ULONG RemoveVectoredExceptionHandler(PVOID pHandler);

pHandler 就是之前安装的函数句柄,AddVectoredExceptionHanler的返回值。

 


 

除了能在 SEH 之前处理异常,VEH 还能让我们能在未处理异常发生时得到通知。

PVOID AddVectoredContinueHanler(
ULONG bFirstInTheList,
PVECTORED_EXCEPTION_HANDLER pfnHandler);

需要特别说明的时,这些继续处理程序的执行是在 EXCEPTION_CONTINUE_SEARCH 之后才开始的。

其他参数和返回值同 AddVectoredExceptionHanler 函数

可以通过 RemoveVectoredContinueHandler 删除之前安装的 VEH 继续处理函数,参数同RemoveVectoredExceptionHandler。

 

标签:EXCEPTION,--,24.3,Windows,pfnHandler,异常,处理函数,VEH,SEH
From: https://www.cnblogs.com/renleiguanchashi/p/16925611.html

相关文章

  • HDLbits第四天
    出于对FPGA学习巩固的目的,同时也希望能锻炼自己对于Verilog的题目分析,让自己对HDL代码的理解加深,所以想坚持写一下关于HDLbits网站刷题的系列,计划是工作日每日5题目+分析,周......
  • VUE读取本地json文件并解析
    //读取本地json文件exportfunctionGetUserAction(query){letquesa=axios.get('/json/userAction.json').then(res=>{//获取public下的buildmenu.json......
  • SpringBoot原理深入及源码剖析
    1依赖管理问题:(1)为什么导入dependency时不需要指定版本?在SpringBoot入门程序中,项目pom.xml文件有两个核心依赖,分别是spring-boot-starter-parent和spring-boot-starter-w......
  • 智慧驾培创新模式,vr模拟驾驶带你沉浸式练车
    随着生活水平的提高,越来越多人买得起车了,而想要开车上路,首先需要考取驾驶证。如今考取驾驶证的难度越来越大,而且很多驾校的练车次数非常有限,基本上只有3-5天的练习时间,就给......
  • 动态规划
    动态规划首先,动态规划问题的一般形式就是求最值。既然是要求最值,核心问题是什么呢?求解动态规划的核心问题是穷举。因为要求最值,肯定要把所有可行的答案穷举出来,然后......
  • 搭建Prometheus+Grafana+AlertManager监控报警系统之CentOS 7安装node exporter
    简介在Prometheus的架构设计中,PrometheusServer并不直接服务监控特定的目标,其主要任务负责数据的收集,存储并且对外提供数据查询支持。因此为了能够能够监控到某些东西,如......
  • C# INotifyPropertyChanged Small Demo
    publicclassPChangeTest:INotifyPropertyChanged{publiceventPropertyChangedEventHandlerPropertyChanged;privatevoidOnPropertyChange......
  • 数学:四元数
    四元数    一、四元数基础: 1、四元数q的定义:q=a+bi+cj+dk。其中a、b、c、d为实数。i、j、k是三个虚数单位(虚数单位的平方等于-1),+i代表在YZ平面内从......
  • aioredis 2.0大不一样,1.3得例子都运行不了。
    官方文档 https://aioredis.readthedocs.io/en/v2.0.1/migration/   迁移到v2.0¶概括¶aioredisv2.0现在是一个完全兼容的asyncio-redis -py的本机实现......
  • Spring Boot 3.0 正式发布,王炸!!
    SpringBoot3.0正式发布大家好,我是栈长。SpringBoot3.0正式发布了:同时发布更新的还有2.7.x和2.6.x两条版本线,SpringBoot是我见过的发版最守时的技术框架之......