Young87

当前位置:首页 >个人收藏

Windows Ring3层注入——“QueueUserAPC” APC注入(四)

APC概念

正常情况下,线程自己不主动调用ExitThread函数,或者一个进程内的其他线程不调用TerminateThread函数来终止线程的话,线程本身的行为是不会改变的。
那如果想改变一个线程的行为可以给他提供一个函数,让它自己去调用,这个函数就是APC(Asyncroneus Procedure Call),即异步过程调用。

APC(Asynchronous Procedure Call 异步过程调用)是一种与常用的和简单的同步对象不同的一种同步机制。它是一种软中断机制。

  • APC有两种形式:
    - 用户模式APC:由应用程序产生,APC函数地址位于用户空间,在用户空间执行。
    - 内核模式APC:由系统产生,APC函数地址位于内核空间,在内核空间执行.

举一个例子理解一下APC的实际作用:假设一个线程在执行过程中,发出一个I/O请求,然后设备驱动执行线程传过来的I/O请求,但发出I/O请求的线程会继续执行下去,但是当线程走不下去的时候(必须得到I/O请求的的返回结果),线程需要获得返回结果才能继续进行,然后设备驱动执行完的I/O请求结果是通过插入APC队列来告诉线程的。但是设备驱动如何知道线程索要的结果怎么返还给他?因为在线程刚开始发送I/O请求时,线程就已经告诉设备驱动执行后的结果放到APC队列中就可以。

更多详细的APC解释可以去:

除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog

上一篇: TensorFlow—上手篇

下一篇: 10款最佳Python开发工具推荐,每一款都是神器!

精华推荐