mapUserPhysicalPagesScatter 函数 (winbase.h)

在地址 窗口扩展 (AWE) 区域中的指定地址映射以前分配的物理内存页。

基于 Itanium 的系统上的 64 位 Windows: 由于页面大小不同,32 位应用程序不支持 MapUserPhysicalPagesScatter

语法

BOOL MapUserPhysicalPagesScatter(
  [in] PVOID      *VirtualAddresses,
  [in] ULONG_PTR  NumberOfPages,
  [in] PULONG_PTR PageArray
);

参数

[in] VirtualAddresses

指向要重新映射的内存区域的起始地址数组的指针。

VirtualAddresses 中的每个条目都必须在分配地址窗口扩展 (AWE) 区域时 VirtualAlloc 函数返回的地址范围内。 NumberOfPages 中的值指示数组的大小。 条目可以来自多个地址窗口扩展 (AWE) 区域。

[in] NumberOfPages

要为其建立转换的物理内存和虚拟地址空间的大小(以页为单位)。

VirtualAddresses 处的数组指定虚拟地址范围。

[in] PageArray

指向值数组的指针,该值指示应如何处理 VirtualAddresses 中的每个相应页面。

0 (零) 指示应取消映射 VirtualAddresses 中的相应条目,并映射它具有的任何非零值。

如果此参数为 NULL,则会取消映射 VirtualAddresses 数组中的每个地址。

NumberOfPages 中的值指示数组的大小。

返回值

如果函数成功,则返回值为 TRUE

如果函数失败,则返回值为 FALSE,并且该函数不会映射或取消映射(部分或其他)。 要获得更多的错误信息,请调用 GetLastError。

注解

物理页面可能未映射,但不会释放。 必须调用 FreeUserPhysicalPages 才能释放物理页面。

可以指定任意数量的物理内存页,但内存不能扩展到 VirtualAlloc 分配的虚拟地址空间之外。 新翻译会自动覆盖任何现有地址映射,而旧翻译则取消映射。

不能在 AllocateUserPhysicalPages 中指定的范围之外映射物理内存页。 可以同时映射多个区域,但它们不能重叠。

物理页可以位于任何物理地址,但不要假设物理页的连续性。

在多处理器环境中,此函数维护硬件转换缓冲区一致性。 从此函数返回时,保证所有处理器上的所有线程都能看到正确的映射。

若要编译使用此函数的应用程序,请将_WIN32_WINNT宏定义为 0x0500 或更高版本。 有关详细信息,请参阅 使用 Windows 标头

要求

要求
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 winbase.h (包括 Windows.h)
Library Kernel32.lib
DLL Kernel32.dll

另请参阅

地址窗口化扩展

AllocateUserPhysicalPages

FreeUserPhysicalPages

MapUserPhysicalPages

内存管理函数