MapViewOfFileFromApp 函数 (memoryapi.h)

将文件映射的视图映射到调用的 Windows 应用商店应用的地址空间中。

语法

PVOID MapViewOfFileFromApp(
  [in] HANDLE  hFileMappingObject,
  [in] ULONG   DesiredAccess,
  [in] ULONG64 FileOffset,
  [in] SIZE_T  NumberOfBytesToMap
);

参数

[in] hFileMappingObject

文件映射对象的句柄。 CreateFileMappingFromApp 函数返回此句柄。

[in] DesiredAccess

文件映射对象的访问类型,该对象确定页面的页面保护。 此参数可以是以下值之一,也可以是多个值的按位 OR 组合(如果适用)。

含义
FILE_MAP_ALL_ACCESS
映射文件的读/写视图。 创建文件映射对象时必须具有 PAGE_READWRITE 保护。

MapViewOfFileFromApp 一起使用时, FILE_MAP_ALL_ACCESS 等效于 FILE_MAP_WRITE

FILE_MAP_READ
映射文件的只读视图。 尝试写入文件视图会导致访问冲突。

创建文件映射对象时必须具有 PAGE_READONLYPAGE_READWRITEPAGE_EXECUTE_READPAGE_EXECUTE_READWRITE 保护。

FILE_MAP_WRITE
映射文件的读/写视图。 创建文件映射对象时必须具有 PAGE_READWRITE 保护。

MapViewOfFileFromApp 一起使用时, (FILE_MAP_WRITE | FILE_MAP_READ) 等效于 FILE_MAP_WRITE

 

使用按位 OR,可以将上述值与这些值组合在一起。

含义
FILE_MAP_COPY
映射文件的写入时复制视图。 文件映射对象必须已创建PAGE_READONLY、PAGE_READ_EXECUTEPAGE_WRITECOPYPAGE_READWRITE保护。

当进程写入写入时复制页时,系统会将原始页面复制到进程专用的新页。 新页面由分页文件提供支持。 对新页面的保护从写入时复制更改为读/写。

指定写入时复制访问权限时,系统将和进程提交费用用于整个视图,因为调用进程可能会写入视图中的每个页面,从而使所有页面都成为私有页面。 新页面的内容永远不会写回到原始文件,并且当视图未映射时会丢失。

FILE_MAP_LARGE_PAGES
从 Windows 10 版本 1703 开始,此标志指定应使用大页面支持映射视图。 视图的大小必须是 GetLargePageMinimum 函数报告的大型页面大小的倍数,并且文件映射对象必须已使用 SEC_LARGE_PAGES 选项创建。 如果为 lpBaseAddress 提供非 null 值,则该值必须是 GetLargePageMinimum 的倍数。
FILE_MAP_TARGETS_INVALID
将映射文件中的所有位置设置为控制流防护 (CFG) 的无效目标。 此标志类似于 PAGE_TARGETS_INVALID。 将此标志与执行访问权限 FILE_MAP_EXECUTE结合使用。 对这些页面中位置的任何间接调用都将失败 CFG 检查,并且进程将终止。 分配的可执行页面的默认行为是标记为 CFG 的有效调用目标。
 

对于使用 SEC_IMAGE 属性创建的文件映射对象, dwDesiredAccess 参数不起作用,应设置为任何有效值,例如 FILE_MAP_READ

有关访问文件映射对象的详细信息,请参阅 文件映射安全性和访问权限

[in] FileOffset

视图要开始的文件偏移量。 偏移量必须在文件映射中指定偏移量。 它们还必须匹配系统的内存分配粒度。 也就是说,偏移量必须是分配粒度的倍数。 若要获取系统的内存分配粒度,请使用 GetSystemInfo 函数,该函数填充 SYSTEM_INFO 结构的成员。

[in] NumberOfBytesToMap

要映射到视图的文件映射的字节数。 所有字节都必须在 CreateFileMappingFromApp 指定的最大大小内。 如果此参数为 0 (零) ,则映射将从指定的偏移量扩展到文件映射的末尾。

返回值

如果函数成功,则返回值是映射视图的起始地址。

如果函数失败,则返回值为 NULL。 要获得更多的错误信息,请调用 GetLastError。

注解

有一个重要例外,派生自由同一文件支持的任何文件映射对象的文件视图在特定时间是一致的或相同的。 对于进程内的视图以及由不同进程映射的视图,可以保证一致性。

异常与远程文件相关。 尽管 MapViewOfFileFromApp 适用于远程文件,但它并不能使它们保持一致。 例如,如果两台计算机都将一个文件映射为可写文件,并且都更改了同一页,则每台计算机只看到自己对页面的写入。 在磁盘上更新数据时,不会合并数据。

仅当应用具有 codeGeneration 功能时,才能成功请求可执行保护。

要求

要求
最低受支持的客户端 Windows 8 [桌面应用 |UWP 应用]
最低受支持的服务器 Windows Server 2012 [桌面应用 |UWP 应用]
目标平台 Windows
标头 memoryapi.h (包括 Windows.h)
Library onecore.lib
DLL Kernel32.dll

另请参阅

CreateFileMapping

创建文件视图

DuplicateHandle

GetSystemInfo

MapViewOfFile

MapViewOfFileEx

内存管理函数

OpenFileMapping

SYSTEM_INFO

UnmapViewOfFile