![](https://csdnimg.cn/release/download_crawler_static/3263819/bg4.jpg)
若要创建或打开一个文件内核对象,总是要调用 C r e a t e F i l e 函数:
HANDLE CreateFile(
PCSTR pszFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
PSECURITY_ATTRIBUTES psa,
DWORD dwCreationDisposition,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile);
步骤 2:创建一个文件映射内核对象
调用 C r e a t e F i l e 函数,就可以将文件映像的物理存储器的位置告诉操作系统。你传递的
路径名用于指明支持文件映像的物理存储器在磁盘(或网络或光盘)上的确切位置。这时,必须
告诉系统,文件映射对象需要多少物理存储器。若要进行这项操作,可以调用 C r e a t e F i l e
M a p p i n g 函数:
HANDLE CreateFileMapping(
HANDLE hFile,
PSECURITY_ATTRIBUTES psa,
DWORD fdwProtect,
DWORD dwMaximumSizeHigh,
DWORD dwMaximumSizeLow,
PCTSTR pszName);
步骤 3:将文件数据映射到进程的地址空间
当创建了一个文件映射对象后,仍然必须让系统为文件的数据保留一个地址空间区域,并将文件
的数据作为映射到该区域的物理存储器进行提交。可以通过调用 M a p Vi e w O f F i l e 函数
来进行这项操作:
PVOID MapViewOfFile(
HANDLE hFileMappingObject,
DWORD dwDesiredAccess,
DWORD dwFileOffsetHigh,
DWORD dwFileOffsetLow,
SIZE_T dwNumberOfBytesToMap);
步骤 4:从进程的地址空间中撤消文件数据的映像
当不再需要保留映射到你的进程地址空间区域中的文件数据时,可以通过调用下面的函数将它释
放:
BOOL UnmapViewOfFile(PVOID pvBaseAddress);
为了提高速度,系统将文件的数据页面进行高速缓存,并且在对文件的映射视图进行操作时不立
即更新文件的磁盘映像。如果需要确保你的更新被写入磁盘,可以强制系统将修改过的数据的一
部分或全部重新写入磁盘映像中,方法是调用 F l u s h Vi e w O f F i l e 函数:
BOOL FlushViewOfFile(
PVOID pvAddress,