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_READONLYPAGE_EXECUTE_READPAGE_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 应用]
目标平台 窗户
标头 memoryapi.h (包括 Windows.h)
onecore.lib
DLL Kernel32.dll

另请参阅

CreateFileMapping

创建文件视图

DuplicateHandle

GetSystemInfo

MapViewOfFile

MapViewOfFileEx

内存管理功能

OpenFileMapping

SYSTEM_INFO

UnmapViewOfFile