• 异常处理 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
  • 相关阅读:
    JS随笔
    tp5 redis 单例模式 转载
    分享我编程工作经历及对软件开发前景的看法
    redis详解(一)-- 概述
    redis详解(二)-- 数据类型详解
    redis详解(四)-- 高可用分布式集群
    redis详解(三)
    新工科平台
    关于Nginx的负载均衡
    微信退款回调
  • 原文地址:https://www.cnblogs.com/suanguade/p/6674232.html
Copyright © 2020-2023  润新知