CreateFileMappingA
函数功能:为指定的文件创建或打开已命名或未命名的文件映射对象。要为物理内存指定NUMA节点,请参见CreateFileMappingNuma。
函数原型:
HANDLE CreateFileMappingA(
HANDLE hFile,
LPSECURITY_ATTRIBUTES lpFileMappingAttributes,
DWORD flProtect,
DWORD dwMaximumSizeHigh,
DWORD dwMaximumSizeLow,
LPCSTR lpName
);
参数:
hFile:用于创建文件映射对象的文件句柄。文件必须以与flProtect参数指定的保护标志兼容的访问权限打开。 这不是必需的,但建议您要映射的文件以排他性访问方式打开。 有关更多信息,请参见文件安全性和访问权限。如果hFile为INVALID_HANDLE_VALUE,调用进程还必须在dwMaximumSizeHigh和dwMaximumSizeLow参数中指定文件映射对象的大小。 在这个场景中,CreateFileMapping创建一个指定大小的文件映射对象,该对象由系统分页文件支持,而不是由文件系统中的文件支持。
lpFileMappingAttributes:一个指向SECURITY_ATTRIBUTES结构的指针,用于确定返回的句柄是否可以被子进程继承。SECURITY_ATTRIBUTES结构的lpSecurityDescriptor成员为一个新的文件映射对象指定一个安全描述符。如果lpFileMappingAttributes为NULL,则不能继承句柄,文件映射对象将获得默认的安全描述符。 文件映射对象的默认安全描述符中的访问控制列表(ACL)来自创建者的主标记或模拟标记。 有关更多信息,请参见文件映射安全性和访问权限。
flProtect:指定文件映射对象的页面保护。 对象的所有映射视图必须与此保护兼容。
dwMaximumSizeHigh: 文件映射对象的最大大小的高阶DWORD。
dwMaximumSizeLow:文件映射对象的最大大小的低阶DWORD。如果该参数和dwMaximumSizeHigh为0(0),则文件映射对象的最大大小等于hFile所标识的文件的当前大小。尝试映射长度为0(0)的文件失败,错误代码为ERROR_FILE_INVALID。应用程序应该测试长度为0的文件,并拒绝这些文件。
lpName: 文件映射对象的名称。如果该参数与现有映射对象的名称匹配,则函数请求访问具有flProtect指定的保护的对象。 如果该参数为NULL,则创建的文件映射对象没有名称。 如果lpName与现有事件、信号量、互斥锁、可等待计时器或作业对象的名称匹配,则函数失败,GetLastError函数返回ERROR_INVALID_HANDLE。 这是因为这些对象共享相同的名称空间。 名称可以带有“Global”或“Local”前缀,以显式地在全局或会话命名空间中创建对象。 名称的其余部分可以包含除反斜杠字符()以外的任何字符。 从非会话0的会话在全局命名空间中创建文件映射对象需要SeCreateGlobalPrivilege特权。 有关更多信息,请参见内核对象名称空间。 快速用户切换是通过使用终端服务会话实现的。 第一个登录的用户使用会话0(0),下一个登录的用户使用会话1(1),以此类推。 内核对象名称必须遵循终端服务概述的指导方针,以便应用程序能够支持多个用户。
返回值:
如果函数成功,返回值是新创建的文件映射对象的句柄。
如果对象在函数调用之前存在,则函数返回现有对象的句柄(带有当前大小,而不是指定大小),GetLastError返回ERROR_ALREADY_EXISTS。
如果函数失败,返回值为NULL。 要获取扩展的错误信息,请调用GetLastError。
MSDN地址: CreateFileMappingA function (winbase.h) - Win32 apps | Microsoft Docs
其它函数:
**函数功能:**将文件映射的视图映射到调用进程的地址空间。 要为视图指定一个建议的基地地址,请使用MapViewOfFileEx函数。 但是,不推荐这种做法。
LPVOID MapViewOfFile(
HANDLE hFileMappingObject,
DWORD dwDesiredAccess,
DWORD dwFileOffsetHigh,
DWORD dwFileOffsetLow,
SIZE_T dwNumberOfBytesToMap
);
MSDN地址: MapViewOfFile function (memoryapi.h) - Win32 apps | Microsoft Docs
**函数功能:**打开指定的文件映射对象。
HANDLE OpenFileMappingA(
DWORD dwDesiredAccess,
BOOL bInheritHandle,
LPCSTR lpName
);
MSDN地址: OpenFileMappingA function (winbase.h) - Win32 apps | Microsoft Docs
函数功能: 从调用进程的地址空间解除文件的映射视图。
BOOL UnmapViewOfFile(
LPCVOID lpBaseAddress
);
MSDN地址: UnmapViewOfFile function (memoryapi.h) - Win32 apps | Microsoft Docs