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