MapViewOfFile3 函式 (memoryapi.h)

將檔案或頁面檔支援的區段檢視對應至指定進程的地址空間。

使用此函式,您可以:針對新的配置,指定虛擬位址空間的範圍和 2 的對齊限制;指定任意數目的擴充參數;將實體記憶體的慣用NUMA節點指定為擴充參數;和會特別指定取代) (佔位符作業。

若要指定 NUMA 節點,請參閱 ExtendedParameters 參數。

語法

PVOID MapViewOfFile3(
  [in]                HANDLE                 FileMapping,
  [in]                HANDLE                 Process,
  [in, optional]      PVOID                  BaseAddress,
  [in]                ULONG64                Offset,
  [in]                SIZE_T                 ViewSize,
  [in]                ULONG                  AllocationType,
  [in]                ULONG                  PageProtection,
  [in, out, optional] MEM_EXTENDED_PARAMETER *ExtendedParameters,
  [in]                ULONG                  ParameterCount
);

參數

[in] FileMapping

要對應至指定進程的位址空間之區段的 HANDLE

[in] Process

要對應區段之進程的 HANDLE

[in, optional] BaseAddress

檢視所需的基位址。 位址會四捨五入到最接近的 64k 界限。

注意

如果此參數為 NULL,系統會挑選基位址。

如果 BaseAddress 不是 NULL,則任何提供的 MEM_ADDRESS_REQUIREMENTS 都必須包含所有零。

[in] Offset

區段開頭的位移。 這必須對齊 64k。

[in] ViewSize

要對應的位元組數目。 值為零 (0) 指定要對應的整個區段。

大小一律必須是頁面大小的倍數。

[in] AllocationType

記憶體配置的類型。 這個參數可以是零 (0) 或下列其中一個值。

意義
MEM_RESERVE
0x00002000
對應保留的檢視。
MEM_REPLACE_PLACEHOLDER
0x00004000
以對應的檢視取代佔位元。 (沒有映像、物理記憶體等 ) ,僅支持數據/pf 支援的區段檢視。 當您取代佔位元元時, BaseAddressViewSize 必須完全符合佔位符的佔位元,而且任何提供的 MEM_ADDRESS_REQUIREMENTS 結構都必須包含所有零。

將佔位元元取代為對應檢視之後,若要釋放該對應檢視回到佔位符,請參閱 UnmapViewOfFileExUnmapViewOfFile2UnmapFlags 參數。

佔位元是保留的記憶體區域類型。

指定此旗標時,不會套用 OffsetBaseAddress 上的 64k 對齊需求。

MEM_LARGE_PAGES
0x20000000
對應大型頁面檢視。 此旗標指定應該使用 大型頁面支援來對應檢視。 檢視的大小必須是 GetLargePageMinimum 函式所報告大型頁面大小的倍數,而且必須使用 SEC_LARGE_PAGES 選項建立檔案對應物件。 如果您為 BaseAddress 參數提供非 Null 值,則此值必須是 GetLargePageMinimum 的倍數。

[in] PageProtection

所需的頁面保護。

對於使用 SEC_IMAGE 屬性建立的檔案對應物件, PageProtection 參數沒有任何作用,而且應該設定為任何有效的值,例如 PAGE_READONLY

[in, out, optional] ExtendedParameters

MEM_EXTENDED_PARAMETER 類型之一或多個擴充參數的選擇性指標。 這些擴充參數值本身都可以有 MemExtendedParameterAddressRequirementsMemExtendedParameterNumaNodeType 字段。 如果未提供 MemExtendedParameterNumaNode 擴充參數,則行為與 VirtualAlloc/MapViewOfFile 函式 (相同,則實體頁面的慣用 NUMA 節點會根據第一次存取記憶體) 之線程的理想處理器來決定。

[in] ParameterCount

ExtendedParameters 所指向的擴充參數數目。

傳回值

如果成功,則傳回對應檢視的基位址。 否則,會使用 GetLastError 傳回 NULL 和擴充錯誤狀態。

備註

此 API 可協助支援高效能遊戲,以及伺服器應用程式,這些應用程式有管理其虛擬位址空間的特定需求。 例如,在先前保留的區域上方對應記憶體;這適用於實作自動包裝環形緩衝區。 並配置具有特定對齊方式的記憶體;例如,若要讓您的應用程式視需要認可大型/大型頁面對應區域。

範例

如需程式代碼範例,請參閱 VirtualAlloc2 中的案例 1。

規格需求

需求
最低支援的用戶端 Windows 10 版本 1803 [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2016 [僅限傳統型應用程式]
目標平台 Windows
標頭 memoryapi.h (包含 Windows.h)
程式庫 onecore.lib
DLL Kernel32.dll

另請參閱

VirtualAlloc2

MapViewOfFile

MapViewOfFile2

MapViewOfFileNuma2