以下部分代码出自: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);
}