次の方法で共有


MapViewOfFile3FromApp 関数 (memoryapi.h)

ファイル マッピングのビューを、呼び出し元の Windows ストア アプリのアドレス空間にマップします。

この関数を使用すると、新しい割り当てに対して、仮想アドレス空間の範囲と power-of-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.

BaseAddressNULL でない場合、指定されたMEM_ADDRESS_REQUIREMENTS構造体はすべてゼロで構成されている必要があります。

[in] Offset

セクションの先頭からのオフセット。 これは 64k アラインされている必要があります。

[in] ViewSize

マップするバイト数。 0 の値は、セクション全体をマップすることを指定します。

サイズは常にページ サイズの倍数である必要があります。

[in] AllocationType

メモリ割り当ての種類。 このパラメーターには、ゼロ (0) または次のいずれかの値を指定できます。

意味
MEM_RESERVE
0x00002000
予約ビューをマップします。
MEM_REPLACE_PLACEHOLDER
0x00004000
プレースホルダーをマップされたビューに置き換えます。 data/pf-backed セクション ビューのみがサポートされています (イメージ、物理メモリなどはサポートされていません)。 プレースホルダーを置き換える場合、 BaseAddressViewSize はプレースホルダーのものと完全に一致する必要があり、指定された MEM_ADDRESS_REQUIREMENTS 構造体はすべてゼロで構成されている必要があります。

プレースホルダーをマップされたビューに置き換えた後、そのマップされたビューをプレースホルダーに戻すには、UnmapViewOfFileEx および UnmapViewOfFile2UnmapFlags パラメーターを参照してください。

プレースホルダーは、予約済みメモリ領域の一種です。

MEM_LARGE_PAGES
0x20000000
大きなページ ビューをマップします。 大きなページのサポートに関するページを参照してください。

[in] PageProtection

目的のページ保護。

SEC_IMAGE属性を使用して作成されたファイル マッピング オブジェクトの場合、PageProtection パラメーターは無効であり、PAGE_READONLYなどの有効な値に設定する必要があります。

[in, out, optional] ExtendedParameters

MEM_EXTENDED_PARAMETER型の 1 つ以上の拡張パラメーターへの省略可能なポインター。 これらの拡張パラメーター値はそれぞれ、MemExtendedParameterAddressRequirements または MemExtendedParameterNumaNode のいずれかの Type フィールドを持つことができます。 MemExtendedParameterNumaNode 拡張パラメーターが指定されていない場合、動作は VirtualAlloc/MapViewOfFile 関数と同じです (つまり、物理ページに推奨される NUMA ノードは、メモリに最初にアクセスするスレッドの理想的なプロセッサに基づいて決定されます)。

[in] ParameterCount

ExtendedParameters が指す拡張パラメーターの数。

戻り値

成功した場合は、マップされたビューのベース アドレスを返します。 それ以外の場合は NULL を 返し、拡張エラーの状態は GetLastError を使用して使用できます。

解説

この API は、仮想アドレス空間の管理に関する特定の要件を持つハイパフォーマンス ゲームとサーバー アプリケーションをサポートするのに役立ちます。 たとえば、以前に予約されたリージョンの上にメモリをマッピングする場合などです。これは、リング バッファーを自動的にラップするを実装する場合に役立ちます。 特定のアラインメントを使用してメモリを割り当てる。たとえば、アプリケーションが大規模または巨大なページ マップ領域をオンデマンドでコミットできるようにする場合などです。

1 つの重要な例外では、同じファイルによってサポートされるファイル マッピング オブジェクトから派生したファイル ビューは、特定の時点で一貫性または同一です。 一貫性は、プロセス内のビューと、異なるプロセスによってマップされるビューに対して保証されます。

例外はリモート ファイルに関連しています。 MapViewOfFile3FromApp はリモート ファイルで動作しますが、一貫性を保つことはありません。 たとえば、2 台のコンピューターが両方ともファイルを書き込み可能としてマップし、両方が同じページを変更した場合、各コンピューターはページへの独自の書き込みのみを表示します。 データがディスク上で更新されると、マージされません。

実行可能な保護を正常に要求できるのは、アプリに codeGeneration 機能がある場合のみです。

コード例については、「 Virtual2Alloc のシナリオ 1」を参照してください。

要件

   
サポートされている最小のクライアント Windows 10 [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2016 [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー memoryapi.h (Windows.h を含む)
Library WindowsApp.lib
[DLL] Kernel32.dll

関連項目

CreateFileMapping

ファイル ビューの作成

DuplicateHandle

GetSystemInfo

MapViewOfFile3

MapViewOfFileEx

メモリ管理関数

OpenFileMapping

SYSTEM_INFO

UnmapViewOfFile