4.内核APC执行过程
生活随笔
收集整理的這篇文章主要介紹了
4.内核APC执行过程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
APC函數的執行與插入并不是同一個線程:
在A線程中向B線程插入一個APC,插入的動作是在A線程中完成的,但什么時候執行則由B線程決定!,所以叫“異步過程調用"
內核APC函數與用戶APC函數的執行時間和執行方式也有區別
執行點1:線程切換
SwapContext(); //判斷是否有內核APCKiSwapThread();KiDelicerApc(); //執行內核APC函數在SwapContext快結束的時候做了一個判斷,判斷的結果存到EAX中,然后返回。
一直到這里才開始處理
執行點2:系統調用、中斷或者異常(_KiServiceExit)
當要執行用戶APC之前,先要執行內核APC。
KiDeliverApc函數執行流程
VOID KiDeliverApc (IN KPROCESSOR_MODE PreviousMode,//1:處理內核apc和用戶apc。0:處理內核apcIN PKEXCEPTION_FRAME ExceptionFrame,//異常結構IN PKTRAP_FRAME TrapFrame)//陷阱幀//軟件中斷處理例程,只處理當前線程的APC鏈表如果鏈表不為空,把4個要用的放到局部變量里
如果NormalRoutine不為空就跳到這(不知道NormalRoutine是什么的去看APC的掛入過程)
下一個循環又跳回來
總結
以上是生活随笔為你收集整理的4.内核APC执行过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3.APC的挂入过程
- 下一篇: 5.用户APC执行过程