異常處理 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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM