Programming 版 (精华区)
发信人: li (星一), 信区: Programming
标 题: Windows 95进程间数据通讯的实现技术(6)
发信站: 紫 丁 香 (Sat Sep 26 16:56:25 1998), 转信
3.4、直接调用ReadProcessMemory和
WriteProcessMemory函数实现进程间通讯
通过调用ReadProcessMemory以及
WriteProcessMemory函数用户可以按类似与
Windows3.1的方法实现进程间通讯,在发送进程中分
配一块内存存放数据,可以调用GlobalAlloc或者
VirtualAlloc函数实现:
pApp-
>m_hGlobalHandle=GlobalAlloc(GMEM_SHARE,1024);
可以得到指针地址:pApp-
>mpszGlobalHandlePtr=(LPSTR)GlobalLock(pApp->m_hGlobalHandle);
在接收进程中要用到用户希望影响的进程的打开
句柄。为了读写另一进程,应按如下方式调用
OpenProcess函数:
HANDLE hTargetProcess=OpenProcess(
STANDARD_RIGHTS_REQUIRED|
PROCESS_VM_REDA|
PROCESS_VM_WRITE|
PROCESS_VM_OPERATION,//访问权限
FALSE,//继承关系
dwProcessID);//进程ID
为保证OpenProcess函数调用成功,用户所影响的
进程必须由上述标志创建。
一旦用户获得一个进程的有效句柄,就可以调用
ReadProcessMemory函数读取该进程的内存:
BOOL ReadProcessMemory(
HANDLE hProcess, // 进程指针
LPCVOID lpBaseAddress, // 数据块的首地址
LPVOID lpBuffer, // 读取数据所需缓冲区
DWORD cbRead, // 要读取的字节数
LPDWORD lpNumberOfBytesRead
);
使用同样的句柄也可以写入该进程的内存:
BOOL WriteProcessMemory(
HANDLE hProcess, // 进程指针
LPVOID lpBaseAddress, // 要写入的首地址
LPVOID lpBuffer, // 缓冲区地址
DWORD cbWrite, // 要写的字节数
LPDWORD lpNumberOfBytesWritten
);
--
※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: club.hit.edu.cn]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.130毫秒