MapViewOfFile3FromApp 函式 (memoryapi.h)

將檔案對應的檢視對應對應至呼叫 Windows 市集應用程式的位址空間。

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

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

語法

PVOID MapViewOfFile3FromApp(
  [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 界限。

              If this parameter is <b>NULL</b>, the system picks the base
              address.

如果 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參數。

預留位置是保留的記憶體區欄位型別。

MEM_LARGE_PAGES
0x20000000
對應大型頁面檢視。 請參閱 大型頁面支援

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

有一個重要的例外狀況,衍生自相同檔案所支援之任何檔案對應物件的檔案檢視在特定時間是一致或相同的。 對於進程內的檢視,以及由不同進程對應的檢視,保證一致性。

例外狀況與遠端檔案有關。 雖然 MapViewOfFile3FromApp 可與遠端檔案搭配運作,但不會讓它們保持一致。 例如,如果兩部電腦都將檔案對應為可寫入,而且兩者都變更相同的頁面,每部電腦只會看到自己的寫入頁面。 當資料在磁片上更新時,它不會合並。

如果您的應用程式具有 codeGeneration 功能,您只能成功要求可執行保護。

範例

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

規格需求

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

另請參閱

CreateFileMapping

建立檔案檢視

DuplicateHandle

GetSystemInfo

MapViewOfFile3

MapViewOfFileEx

記憶體管理功能

OpenFileMapping

SYSTEM_INFO

UnmapViewOfFile