CreateFileMapping函数用于创建或打开一个文件映射对象。
函数原型如下:
HANDLE CreateFileMapping(
HANDLE hFile,
LPSECURITY_ATTRIBUTES lpFileMappingAttributes,
DWORD flProtect,
DWORD dwMaximumSizeHigh,
DWORD dwMaximumSizeLow,
LPCTSTR lpName
);
参数解释如下:
-
hFile:要映射到文件的句柄,可以是文件、设备或者文件/设备的虚拟文件。如果设置为INVALID_HANDLE_VALUE,则表示要创建一个内存映射。
-
lpFileMappingAttributes:用于指定文件映射对象的安全属性,一般设置为NULL。
-
flProtect:指定文件映射对象的访问保护属性,可以是下列值之一:
-
PAGE_READONLY:只读
-
PAGE_READWRITE:可读可写
-
PAGE_WRITECOPY:写时复制
-
PAGE_EXECUTE:可执行
-
PAGE_EXECUTE_READ:可执行和只读
-
PAGE_EXECUTE_READWRITE:可执行和可读可写
-
PAGE_EXECUTE_WRITECOPY:可执行和写时复制
-
dwMaximumSizeHigh和dwMaximumSizeLow:用于指定文件映射对象的大小,最大可以映射4GB的文件。如果设置为0,则表示映射整个文件。
-
lpName:文件映射对象的名称,可以为NULL。
函数返回值为文件映射对象的句柄,如果函数调用失败,则返回NULL。
使用示例:
HANDLE hFile = CreateFile( L"test.txt", // 文件路径 GENERIC_READ | GENERIC_WRITE, // 访问权限 0, // 共享模式 NULL, // 安全属性 OPEN_ALWAYS, // 文件打开模式 FILE_ATTRIBUTE_NORMAL, // 文件属性 NULL // 模板文件句柄 ); // 创建文件映射对象 HANDLE hMapping = CreateFileMapping( hFile, // 文件句柄 NULL, // 安全属性 PAGE_READWRITE, // 访问保护属性 0, // 文件映射对象的大小,高位 0, // 文件映射对象的大小,低位 L"MyMappingObject" // 文件映射对象的名称 ); if (hMapping == NULL) { // 创建失败,处理错误 } else { // 创建成功,继续其他操作 } // 使用完毕后,记得关闭文件句柄和文件映射对象句柄 CloseHandle(hMapping); CloseHandle(hFile);
以上示例代码演示了如何创建一个文件映射对象,并使用CreateFileMapping函数创建了一个文件映射对象。使用完成后,还需调用CloseHandle函数关闭文件句柄和文件映射对象句柄。