一、内存映射
1、创建一个文件
//创建一个文件
hFile = CreateFile(
lpcFile, //创建文件路径
GENERIC_READ| GENERIC_WRITE, //读写权限
0, //在创建完成到关闭文件之前,其他进程对该文件的操作,0排它
NULL, //安全描述符
OPEN_EXISTING, //总是创建,不管文件存不存在
FILE_ATTRIBUTE_HIDDEN, //隐藏文件
NULL
);
2、准备一个物理页
//准备一个物理页
hMapFile = CreateFileMapping(
hFile, //为INVALID_HANDLE_VALUE时,不与文件关联
NULL, //安全描述符
PAGE_READWRITE, //保护模式(读写的权限)
0, //32位通常为空
0, //物理页的大小
MAPPINGNAME //指定文件映射对象的名字
);
3、将物理页映射到虚拟内存中
//将物理页映射到虚拟内存中
lpAddr = MapViewOfFile(
hMapFile, //句柄
FILE_MAP_ALL_ACCESS, //虚拟内存读写权限
0, //32位用不上
0, //从哪开始映射
0 //物理页多大它就多大
);
4、读取文件
//读取文件
DWORD dwTest1 = *(PDWORD)lpAddr; //lpAddr虚拟内存的首地址
DWORD dwTest2 = *((PDWORD)lpAddr + 0x4FD34);
printf("%x %x",dwTest1,dwTest2);
5、关闭资源
UnmapViewOfFile(lpAddr);
//关闭句柄
CloseHandle(hMapFile);
CloseHandle(hFile);
#includ