MapUserPhysicalPagesScatter 関数 (winbase.h)
以前に割り当てられた物理メモリ ページを、 アドレス ウィンドウ拡張機能 (AWE) リージョンの指定されたアドレスにマップします。
Itanium ベースのシステム上の 64 ビット Windows: ページ サイズの違いにより、 MapUserPhysicalPagesScatter は 32 ビット アプリケーションではサポートされていません。
構文
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 の対応するエントリをマップ解除し、0 以外の値をマップする必要があることを示します。
このパラメーターが 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 |