以下部分代码出自:windows核心编程
主要应用:
主界面只有一个,并可以注入多个窗口,主界面管理和配置各个被注入后进程的所有信息。
当dll注入后,不想用dll的共享段作为进程间的通信。主要是为了避免交叉,即一个dll对应一个进程来使用。为了是卸载方便,不影响其他被注入的进程。
其实并非hook,使用远程注入,所以还要在目标进程的消息循环上做手脚,即修改汇编代码。
JMP到dll里面做处理后,jmp回到进程里去。
创建:
另一个进程使用:
主要应用:
主界面只有一个,并可以注入多个窗口,主界面管理和配置各个被注入后进程的所有信息。
当dll注入后,不想用dll的共享段作为进程间的通信。主要是为了避免交叉,即一个dll对应一个进程来使用。为了是卸载方便,不影响其他被注入的进程。
其实并非hook,使用远程注入,所以还要在目标进程的消息循环上做手脚,即修改汇编代码。
JMP到dll里面做处理后,jmp回到进程里去。
创建:
HANDLE s_hFileMap;
PVOID pView1;
s_hFileMap = CreateFileMapping(INVALID_HANDLE_VALUE, NULL,
PAGE_READWRITE, 0, 4 * 1024, TEXT("MMFSharedData"));
if (s_hFileMap != NULL) {
if (GetLastError() == ERROR_ALREADY_EXISTS) {
chMB("Mapping already exists - not created.");
CloseHandle(s_hFileMap);
} else {
pView1 = MapViewOfFile(s_hFileMap,
FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0);
if (pView1 == NULL) {
chMB("Can't map view of file.");
}
}
} else {
chMB("Can't create file mapping.");
}
//释放:
CloseHandle(s_hFileMap);
UnmapViewOfFile(pView1);
另一个进程使用:
HANDLE hFileMapT;
PVOID pView2;
BOOL OnInit(){
hFileMapT = OpenFileMapping(FILE_MAP_READ | FILE_MAP_WRITE,
FALSE, TEXT("MMFSharedData"));
if (hFileMapT != NULL) {
pView2 = MapViewOfFile(hFileMapT, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0);
if (pView2 == NULL) {
MessageBox(0,L"Can't map view.",0,0);
}
} else {
MessageBox(0,L"Can't open mapping.",0,0);
}
return TRUE;
}
void OnClose(){
CloseHandle(hFileMapT);
UnmapViewOfFile(pView2);
}
本文介绍了一种在Windows环境下实现进程间通信的方法——内存映射文件。通过创建和映射内存文件,不同进程可以共享同一块内存区域,从而达到数据交换的目的。文章详细展示了如何创建内存映射文件、映射视图以及如何在其他进程中打开并使用已存在的内存映射文件。

被折叠的 条评论
为什么被折叠?



