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函數關閉文件句柄和文件映射對象句柄。