Windows中利用共享内存来实现不同进程间的通信
2019-10-13 18:01
3667 查看
Windows中利用共享内存来实现不同进程间的通信
一、msdn详细介绍
https://docs.microsoft.com/zh-cn/windows/win32/memory/sharing-files-and-memory
二、实现思路讲解:
在A进程,我们通过 CreateFileMapping()函数来创建一个文件映射对象(使用 INVAILD_HANDLE_VALUE 来不指定文件句柄),然后调用MapFileOfView()函数来将文件映射对象映射到本进程中,利用copymemory来进行内存读写。
在B进程,我们通过 OpenFileMapping()来打开,然后调用MapFileOfView()函数来将文件映射对象映射到本进程中,利用copymemory来进行内存读写。
三、应用场景:
两进程间的数据交换,比如,我们将游戏外挂代码注入到Game.exe进程中,我们另起一个外挂控制台.exe来控制外挂,此时我们就可以使用共享内存,Game.exe开辟一线程,循环读取该内存数据并标记,而console.exe则负责将用户的指令传入到内存中,这样就实现交互了。
四、注意事项:
- 参数一定要细心别写错了。
- 如果实现两进程之间的交流问题,比如 A <--> B相互发消息,建议开辟两块内存,一块 A-->B,另一块 B-->A,否则可能被占用或修改(起码至少要用锁来同步)。在其余通信开发时这个问题也应该注意到。
五、源代码:
参考下面博客,注意其在B进程也调用CreateFileMapping()来创建一个已经存在的内核对象,此时,其会返回该内核对象(并不会出错,同时GetLastError()函数返回ERROR_ALREADY_EXISTS值。
https://blog.csdn.net/stpeace/article/details/39534361
相关文章推荐
- Linux进程管理-利用Linux的共享内存通信机制实现两个进程间的通信
- 通过共享内存,利用循环队列实现两个进程A,B之间的通信
- linux下通过共享内存在进程之间实现通信(system V)
- Linux进程通信---共享内存 代码实现
- php-通过共享内存实现消息队列和进程通信
- 通过共享内存,实现两个进程A,B之间的通信
- Windows环境下利用“共享内存”实现进程间通信的C/C++代码---利用CreateFileMapping和MapViewOfFile
- 利用共享内存实现进程之间的通讯
- linux多线程【8】mmap实现父子进程的共享内存通信,用信号量同步
- Windows环境下利用“共享内存”实现进程间通信的C/C++代码---利用CreateFileMapping和MapViewOfFile
- 简单的,两个不同进程间的共享内存通信(大小写转换)
- 进程通信----共享内存以及mmap函数实现共享内存
- Windows进程通信--共享内存(二)
- Windows环境下利用“共享内存”实现进程间通信的C/C++代码---利用CreateFileMapping和MapViewOfFile
- 通过共享内存和信号量实现进程间的通信
- windows下信号量和共享内存api, mark:共享内存实现进程间锁
- Windows进程通信 -- 共享内存(1)
- Windows or Linux环境下利用“共享内存”实现进程间通信的C/C++代码
- 通过信号量和共享内存实现h264码流在不同进程间传输
- windows下利用文件映射实现共享内存