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毫秒