进程通信-共享内存
通过CreateFileMapping映射的内存,可以由2个或2个以上进程共享物理页。它创建了一个内核对象,并且可以在创建物理页的时候将文件映射到物理页上。
实现步骤:
- 在接收端进程中注入代码
- hook或开线程
- 在发送端对共享的内存作写入操作
- 接受端读取共享内存
1、创建物理页
g_hMapFile = CreateFileMapping(
INVALID_HANDLE_VALUE, //-1,表示不将文件映射到该物理页
NULL, //安全属性
PAGE_READWRITE, //物理页的访问属性
0, //高32位大小
0x1000, //低32位大小,因为只在win32下,所以只有低32位有用
"共享内存" //创建内核对象的名称
);
2、虚拟内存映射物理页
g_lpBuffer = MapViewOfFile(
g_hMapFile, //句柄
FILE_MAP_ALL_ACCESS, //虚拟内存的属性,可少于物理页属性,但不能多于物理页属性
0, //高32位,不用
0, //低32位,起始位置0
0x1000 //关联大小
);
3、取消关联
UnmapViewOfFile(g_hMapFile);