Share via


MapUserPhysicalPages 関数 (memoryapi.h)

以前に割り当てられた物理メモリ ページを、 アドレス ウィンドウ拡張機能 (AWE) リージョンの指定されたアドレスにマップします。

複数のリージョンのバッチ マッピングとマップ解除を実行するには、 MapUserPhysicalPagesScatter 関数を使用します。

Itanium ベースのシステム上の 64 ビット Windows: ページ サイズの違いにより、 MapUserPhysicalPages は 32 ビット アプリケーションではサポートされていません。

構文

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

パラメーター

[in] VirtualAddress

再マップするメモリ領域の開始アドレスへのポインター。

lpAddress の値は、Address Windowing Extensions (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 を含む)
Library onecore.lib
[DLL] Kernel32.dll

関連項目

アドレス ウィンドウ拡張機能

AllocateUserPhysicalPages

FreeUserPhysicalPages

MapUserPhysicalPagesScatter

メモリ管理関数