设为首页 - 加入收藏 PHP编程网 - 黄冈站长网 (http://www.0713zz.com)-创业,推广,IT,移动互联,VR,5G,小程序,站长网!
热搜: 学习 vivo 华为 网站
当前位置: 首页 > 服务器 > 系统 > 正文

Windows中利用共享内存来实现不同进程间的通信

发布时间:2021-01-08 16:25 所属栏目:[系统] 来源:网络整理
导读:Windows中利用共享内存来实现不同进程间的通信 一、msdn详细介绍 https://docs.microsoft.com/zh-cn/windows/win32/memory/sharing-files-and-memory ? 二、实现思路讲解: 在A进程,我们通过 CreateFileMapping()函数来创建一个文件映射对象(使用 INVAILD

Windows中利用共享内存来实现不同进程间的通信

一、msdn详细介绍

https://docs.microsoft.com/zh-cn/windows/win32/memory/sharing-files-and-memory

Windows中利用共享内存来实现不同进程间的通信

?

二、实现思路讲解:

  在A进程,我们通过 CreateFileMapping()函数来创建一个文件映射对象(使用 INVAILD_HANDLE_VALUE 来不指定文件句柄),然后调用MapFileOfView()函数来将文件映射对象映射到本进程中,利用copymemory来进行内存读写。

  在B进程,我们通过 OpenFileMapping()来打开,然后调用MapFileOfView()函数来将文件映射对象映射到本进程中,利用copymemory来进行内存读写。

?

三、应用场景:

  两进程间的数据交换,比如,我们将游戏外挂代码注入到Game.exe进程中,我们另起一个外挂控制台.exe来控制外挂,此时我们就可以使用共享内存,Game.exe开辟一线程,循环读取该内存数据并标记,而console.exe则负责将用户的指令传入到内存中,这样就实现交互了。

?

四、注意事项:

  1. 参数一定要细心别写错了。
  2. 如果实现两进程之间的交流问题,比如 A <--> B相互发消息,建议开辟两块内存,一块 A-->B,另一块 B-->A,否则可能被占用或修改(起码至少要用锁来同步)。在其余通信开发时这个问题也应该注意到。

五、源代码:

  参考下面博客,注意其在B进程也调用CreateFileMapping()来创建一个已经存在的内核对象,此时,其会返回该内核对象(并不会出错,同时GetLastError()函数返回ERROR_ALREADY_EXISTS值。

  https://blog.csdn.net/stpeace/article/details/39534361

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

网友评论
推荐文章