进程间通信——共享内存

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

I love LiLi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值