此函数映射文件视图到调用进程的地址空间。
LPVOID MapViewOfFile(
HANDLE hFileMappingObject, // handle to file-mapping object
DWORD dwDesiredAccess, // access mode
DWORD dwFileOffsetHigh, // high-order DWORD of offset
DWORD dwFileOffsetLow, // low-order DWORD of offset
SIZE_T dwNumberOfBytesToMap // number of bytes to map
);
hFileMappingObject
一个打开的映射文件对象的句柄,这个句柄可以由CreateFileMapping和OpenFileMapping函数返回。
dwDesiredAccess
指定访问文件视图的类型
值 |
描述 |
FILE_MAP_WRITE |
读和写的访问权限。hFileMappingObject参数创建时,有PAGE_READWRITE保护属性。 |
FILE_MAP_READ |
写的访问权限。hFileMappingObject参数创建时,有PAGE_READWRITE或者PAGE_READONLY保护属性。 |
FILE_MAP_ALL_ACCESS |
和FILE_MAP_WRITE一样 |
FILE_MAP_COPY |
写复制访问权限。如果创建映射文件对象时,有PAGE_WRITECOPY和此参数(FILE_MAP_COPY),会接收执行文件的视图。 |
dwFileOffsetHigh
指定开始映射文件偏移量的高位。
dwFileOffsetLow
指定开始映射文件偏移量的低位。
dwNumberOfBytesToMap
指定需要映射的文件的字节数量,如果dwNumberOfBytesToMap为0,映射整个的文件。
返回值
如果函数成功,返回值是映射视图的开始位置。
如果函数失败,返回值为NULL,可以通过调用GetLastError函数获得详细的错误信息。
说明
映射一个文件,让其指定的文件部分在调用进程的地址空间可见。
MapViewOfFile用于将存储于磁盘的文件放进一个进程的虚拟地址空间,并在该进程的虚拟地址空间中产生一个用于"存放"该文件的区域,这个空间就叫做File View。系统同时产生一个存放在物理内存中的File Mapping Object用于维护这种映射关系。这时当多个进程需要读写那个文件数据时,它们的File View其实对用的都是同一个File Mapping Object。这样做可以节省内存和保持数据的同步性,并达到数据共享的目的。