求VC 创建进程、截获句柄代码

来源:百度知道 编辑:UC知道 时间:2024/06/10 20:12:08
有一个进程A.exe(运行时加载A.dll),我现在想创建一个进程B.exe来监控A.exe(所谓监控就是收到“信息1”时挂起A.exe,收到“信息2”时唤醒A.exe),请问这个B.exe进程的代码该怎么写。B.exe进程代码里是不是要包含有截获A.exe(还是A.dll?)的句柄的模块?
哪位朋友给我点代码(完整的),我现在急需代码,实在不行给些相近的示例也可以。但需要按上面的构思来实现。(我用VC)。不要用钩子,太深奥了,我看过钩子看不懂。满意再加分。

挂起一个进程可不是那么容易的事情。因为,“进程”是不可能被挂起的。你要挂起的,是进程里面的线程!!但是,一个进程中可能有很多线程,而且还有可能不停的变化。

因此,要挂起进程,只有“近似”算法。就是快照一下进程中的所有线程,然后逐一去挂起。但是这时候,你挂起A线程的时候,说不定B线程有新产生了C线程,而你的快照中没有。。。。

参考一下《Windows核心编程》吧。里面有一章就是介绍如何挂起“进程”的。

没有代码,给你思路。
1.使用 EnumProcess ( 或 Snap类API),枚举当前系统内进程。得到一个句柄序列,然后使用API GetModuleFileNameEx 获取每个进程的主线程所在exe文件名称,判断是否A.exe.( 可以使用 EnumProcessModules 之类的函数判断,那个进程里面是否有 A.dll 模块)。
进程不难挂起和唤醒,只能对线程执行这些操作。
首先要获取进程的主线程(对进程的所有线程执行挂起唤醒也可以)。

2.获取主线程,没现成的API,使用快照 CreateToolhelp32Snapshot ,Thread32First 第一个线程就是主线程了。得到线程ID,再得到句柄(API)

3 使用 SuspendThread 挂起 ResumeThread唤醒。
就这多了