第一个进程调用CreateFileMapping函数创建一个文件映射对象,并为其命名为MyFileMappingObject。通过使用PAGE_READWRITE标志,进程将通过创建的任何文件视图对内存具有读/写权限。
HANDLE hMapFile;
hMapFile = CreateFileMapping(hFile, //当前文件句柄。
NULL, //默认安全性
PAGE_READWRITE, //读/写权限
0, //最大对象大小。
0, // hFile的大小
"MyFileMappingObject"); //映射对象的名称。
if (hMapFile == NULL) {
ErrorHandler("Could not create file-mapping object.");
}
然后,进程将使用CreateFileMapping调用中CreateFileMapping返回的文件映射对象句柄来创建进程的地址空间中文件的视图。MapViewOfFile函数返回指向文件视图的指针。
LPVOID lpMapAddress;
lpMapAddress = MapViewOfFile(hMapFile, //处理映射对象。
FILE_MAP_ALL_ACCESS, //读/写权限
0, //最大对象大小。
0, // hFile的大小
0); //映射整个文件。
if (lpMapAddress == NULL) {
ErrorHandler("Could not map view of file.");
}
第二个进程使用名称MyFileMappingObject的OpenFileMapping函数调用与第一个进程相同的文件映射对象。像第一个进程一样,第二个进程使用MapViewOfFile函数获取指向文件视图的指针。
HANDLE hMapFile;
LPVOID lpMapAddress;
hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS, //读/写权限
FALSE, //不要继承这个名字
"MyFileMappingObject"); //映射对象。
if (hMapFile == NULL) {
ErrorHandler("Could not open file-mapping object.");
}
lpMapAddress = MapViewOfFile(hMapFile, //处理映射对象。
FILE_MAP_ALL_ACCESS, //读/写权限
0, //最大对象大小。
0, // hFile的大小
0); //映射整个文件。
if (lpMapAddress == NULL) {
ErrorHandler("Could not map view of file.");
}