APC Injection
APC注入
一个异步过程调用(APC)的是,在一个特定的线程的上下文中以异步方式执行的功能。当APC排队到线程中时,系统会发出软件中断。下次调度线程时,它将运行APC功能。系统生成的APC称为内核模式APC。由应用程序生成的APC称为用户模式APC。线程必须处于可警报状态才能运行用户模式APC。
每个线程都有自己的APC队列。应用程序通过调用QueueUserAPC函数将APC排队到线程中。调用线程在对QueueUserAPC的调用中指定APC函数的地址。APC的排队是对线程调用APC函数的请求。
当用户模式APC排队时,除非它处于警报状态,否则不会将其排队的线程定向到调用APC函数。当线程调用SleepEx,SignalObjectAndWait,MsgWaitForMultipleObjectsEx,WaitForMultipleObjectsEx或WaitForSingleObjectEx函数时,它将进入可警告状态。如果在APC排队之前满足了等待,线程将不再处于可警告的等待状态,因此将不执行APC功能。但是,APC仍在排队,因此当线程调用另一个可警告的等待函数时,将执行APC函数。ReadFileEx,SetWaitableTimer,SetWaitableTimerEx,和WriteFileEx