异常处理 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
總結
- 上一篇: 请问一下那里有搬家纸箱子
- 下一篇: 碳真的可以去汽车甲醛吗?