APC函数的执行与插入并不是同一个线程:
在A线程中向B线程插入一个APC,插入的动作是在A线程中完成的,但什么时候执行则由B线程决定!,所以叫“异步过程调用"
内核APC函数与用户APC函数的执行时间和执行方式也有区别
执行点1:线程切换
SwapContext(); //判断是否有内核APC
KiSwapThread();
KiDelicerApc(); //执行内核APC函数
在SwapContext快结束的时候做了一个判断,判断的结果存到EAX中,然后返回。
APC函数的执行与插入并不是同一个线程:
在A线程中向B线程插入一个APC,插入的动作是在A线程中完成的,但什么时候执行则由B线程决定!,所以叫“异步过程调用"
内核APC函数与用户APC函数的执行时间和执行方式也有区别
执行点1:线程切换
SwapContext(); //判断是否有内核APC
KiSwapThread();
KiDelicerApc(); //执行内核APC函数
在SwapContext快结束的时候做了一个判断,判断的结果存到EAX中,然后返回。