Share via


MapUserPhysicalPages 函式 (memoryapi.h)

對應先前在位址 視窗延伸 模組 (AWE) 區域中指定位址的實體記憶體頁面。

若要執行多個區域的批次對應和取消對應,請使用 MapUserPhysicalPagesScatter 函式。

Itanium 系統上的 64 位 Windows: 由於頁面大小的差異,32 位應用程式不支援 MapUserPhysicalPages

語法

BOOL MapUserPhysicalPages(
  [in] PVOID      VirtualAddress,
  [in] ULONG_PTR  NumberOfPages,
  [in] PULONG_PTR PageArray
);

參數

[in] VirtualAddress

要重新對應之內存區域起始位址的指標。

lpAddress 的值必須位於 VirtualAlloc 函式在配置 AWE) 區域 (時,VirtualAlloc 函式所傳回的位址範圍內。

[in] NumberOfPages

在頁面中建立翻譯的實體記憶體和虛擬位址空間大小。

虛擬位址範圍是從 lpAddress 開始連續的。 實體框架是由 UserPfnArray所指定。

總頁數無法從在 AllocateUserPhysicalPages 中指定的範圍結尾以外的起始位址延伸。

[in] PageArray

實體頁面框架編號陣列的指標。

這些畫面會由自變數 lpAddress 對應,以傳回此函式。 配置的記憶體大小至少應為 NumberOfPages,以ULONG_PTR數據類型的大小。

請勿嘗試修改此緩衝區。 它包含操作系統數據,而損毀可能是重大的。 緩衝區中的資訊不適用於應用程式。

如果此參數為 NULL,則指定的位址範圍會取消對應。 此外,指定的實體頁面不會釋出,而且您必須呼叫 FreeUserPhysicalPages 以釋放它們。

傳回值

如果函式成功,則傳回值為 TRUE

如果函式失敗,則傳回值為 FALSE ,且未完成任何對應,否則為部分或否。 若要取得擴充的錯誤資訊,請呼叫 GetLastError

備註

實體頁面未對應,但不會釋出。 您必須呼叫 FreeUserPhysicalPages 以釋放實體頁面。

您可以指定任意數目的實體記憶體分頁,但記憶體不得延伸到 VirtualAlloc 配置的虛擬位址空間之外。 任何現有的位址對應都會使用新的翻譯自動覆寫,而舊的翻譯則未對應。

您無法將實體記憶體頁面對應到 AllocateUserPhysicalPages 中指定的範圍之外。 您可以同時對應多個區域,但無法重疊。

實體頁面可以位於任何實體位址,但不會假設實體頁面的連續性。

若要取消對應目前的位址範圍,請將 NULL 指定為實體記憶體頁面陣列參數。 任何目前對應的頁面都未對應,但不會釋出。 您必須呼叫 FreeUserPhysicalPages 以釋放實體頁面。

在多處理器環境中,此函式會維護硬體轉譯緩衝區的一致性。 從此函式傳回時,保證所有處理器上的所有線程都可以看到正確的對應。

若要編譯使用此函式的應用程式,請將_WIN32_WINNT宏定義為0x0500或更新版本。 如需詳細資訊,請參閱 使用 Windows 標頭

範例

如需範例,請參閱 AWE 範例

規格需求

需求
最低支援的用戶端 Windows XP [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2003 [僅限傳統型應用程式]
目標平台 Windows
標頭 memoryapi.h (包括 Windows.h、Memoryapi.h)
程式庫 onecore.lib
DLL Kernel32.dll

另請參閱

位址視窗延伸模組

AllocateUserPhysicalPages

FreeUserPhysicalPages

MapUserPhysicalPagesScatter

記憶體管理功能