摘自:windows编程循序渐进
异步过程调用是一种能在特定线程环境中异步执行的系统机制。往线程APC队列添加APC,系统会产生一个软中断。在线程下一次被调度的时候,就会执行APC函数,APC有两种形式,由系统产生的APC称为内核模式APC,由应用程序产生的APC被称为用户模式APC。
每个线程都拥有自己的APC队列。应用程序可以使用函数把APC添加到指定线程的APC队列,函数定义如下:
其中APC函数原型如下:
当用户模式APC被添加后,线程并不会直接调用APC函数,只有当线程处于“可变等待状态”时才会调用。如果希望线程执行APC函数,就要让线程进入可变等待状态。当线程调用SleepEx、SignalObjectAndWait、MsgWaitForMultipleObjectEx、WaitForMultipleObjectsEx或WaitForSingleObjectEx时就会进入可变等待状态。
ReadFileEx、WriteFileEx、和SetWaitableTimer等都是使用APC作为完成例程的回调机制。
原理:使用QueueUserAPC向目标进程的线程添加APC函数,而这个APC函数能够实现模块的加载功能。要使用这种方法的前提是目标进程能够进入可变等待状态,否则即便添加了APC也没有执行的机会
步骤:
1.向目标进程写入待注入的模块名称
2.枚举目标进程所有线程。(由于并不是每个线程都有机会进入可变等待状态,为了增加APC的机会,向目标进程的每个线程都添加APC是个比较保险的做法)
3.增加APC,把LoadLibrary作为APCProc,把第一步中DLL路径名称所在地址作为其参数
代码:
分享到:
相关推荐
本文讲述如何在Oracle通过任务和管道的应用,异步调用存储过程的方法。并且介绍了其基本原理和具体实现测试。
ORACLE的存储过程的异步调用 ORACLE的存储过程的异步调用 ORACLE的存储过程的异步调用
研究Webservice异步调用的实现, 1、通过异步调用的方式实现高性能的使用WebService的API
C#实现异步调用外部程序!
异步调用示例,Labview异步调用示例
定时器是一个在特定时间或者规则间隔被激发的内核对象。结合定时器的异步程序调用可以允许回调函数在任何定时器被激发的时候执行。本文的例子代码显示了如何实现。
asp.net 实现传统方式下异步调用的实现 你会有新的发现
Java多线程实现异步调用实例。运行Main可以看到结果。main是主线程,另有A,B,C三个线程用不同的时间跑完。
Unity异步线程调用主线程脚本程序,在Unity中异步线程调用主线程会报错,所以编写了一个Loom
Winform通用异步界面调用
实现BackgroundWorker异步调用
Visual C++源代码 25 如何实现BackgroundWorker异步调用Visual C++源代码 25 如何实现BackgroundWorker异步调用Visual C++源代码 25 如何实现BackgroundWorker异步调用Visual C++源代码 25 如何实现BackgroundWorker...
ICE异步调用Demo(slice源码和C++源码) 服务器和客户端adm ami函数调用与异步分发 vs2008+ice3.4.1
可以使用由BeginInvoke方法返回的IAsyncResult的IsCompleted属性来发现异步调用何时完成。从用户界面的服务线程中进行异步调用时可以执行此操作。轮询完成允许调用线程在异步调用在线程池线程上执行时继续执行。 ...
Visual C++源代码 102 如何异步调用Web Service程序Visual C++源代码 102 如何异步调用Web Service程序Visual C++源代码 102 如何异步调用Web Service程序Visual C++源代码 102 如何异步调用Web Service程序Visual ...
直接调用EndInvoke 方法等待异步调用结束 异步执行方法的最简单的方式是通过调用委托的BeginInvoke方法来开始执行方法,在主线程上执行一些...下面的代码说明了如何使用这种方法来进行异步调用,并获得异步方法的结果:
异步调用的小例子,方便学习使用。异步调用的小例子,方便学习使用。异步调用的小例子,方便学习使用。异步调用的小例子,方便学习使用。
异步IO、APC、IO完成端口、线程池与高性能服务器的相关技术
Winform界面异步调用
.NET Compact Framework 中不支持异步委托调用,也就是 BeginInvoke 和 EndInvoke 方法。 BeginInvoke 方法启动异步调用。该方法与您需要异步执行的方法具有相同的参数,还有另外两个可选参数。第一个参数是一个 ...