次の方法で共有


MapViewOfFileFromApp 関数 (memoryapi.h)

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

構文

PVOID MapViewOfFileFromApp(
  [in] HANDLE  hFileMappingObject,
  [in] ULONG   DesiredAccess,
  [in] ULONG64 FileOffset,
  [in] SIZE_T  NumberOfBytesToMap
);

パラメーター

[in] hFileMappingObject

ファイル マッピング オブジェクトへのハンドル。 CreateFileMappingFromApp 関数は、このハンドルを返します。

[in] DesiredAccess

ページのページ保護を決定するファイル マッピング オブジェクトへのアクセスの種類。 このパラメーターには、次のいずれかの値、または必要に応じて複数の値のビットごとの OR の組み合わせを指定できます。

価値 意味
FILE_MAP_ALL_ACCESS
ファイルの読み取り/書き込みビューがマップされます。 ファイル マッピング オブジェクトは、PAGE_READWRITE 保護を使用して作成されている必要があります。

MapViewOfFileFromApp使用する場合、FILE_MAP_ALL_ACCESSFILE_MAP_WRITEと同じです。

FILE_MAP_READ
ファイルの読み取り専用ビューがマップされます。 ファイル ビューに書き込もうとすると、アクセス違反が発生します。

ファイル マッピング オブジェクトは、PAGE_READONLYPAGE_READWRITEPAGE_EXECUTE_READ、または PAGE_EXECUTE_READWRITE 保護を使用して作成されている必要があります。

FILE_MAP_WRITE
ファイルの読み取り/書き込みビューがマップされます。 ファイル マッピング オブジェクトは、PAGE_READWRITE 保護を使用して作成されている必要があります。

MapViewOfFileFromApp使用する場合、FILE_MAP_WRITEと同じです。

 

ビットごとの OR を使用すると、上記の値とこれらの値を組み合わせることができます。

価値 意味
FILE_MAP_COPY
ファイルの書き込み時のコピー ビューがマップされます。 ファイル マッピング オブジェクトは、PAGE_READONLYPAGE_EXECUTE_READPAGE_WRITECOPY、または PAGE_READWRITE 保護を使用して作成されている必要があります。

プロセスが書き込み時のコピー ページに書き込むと、システムは元のページを、プロセスに対してプライベートな新しいページにコピーします。 新しいページはページング ファイルによってサポートされます。 新しいページの保護は、書き込み時のコピーから読み取り/書き込みに変わります。

書き込み時のコピー アクセスを指定すると、呼び出し元のプロセスがビュー内のすべてのページに書き込み、すべてのページをプライベートにする可能性があるため、システムとプロセスのコミット料金はビュー全体に対して行われます。 新しいページの内容は元のファイルに書き戻されることはなく、ビューがマップ解除されると失われます。

FILE_MAP_LARGE_PAGES
Windows 10 バージョン 1703 以降では、このフラグは、をサポートする大きなページ 使用してビューをマップする必要があることを指定します。 ビューのサイズは、GetLargePageMinimum 関数によって報告される大きなページのサイズの倍数である必要があり、ファイル マッピング オブジェクトは SEC_LARGE_PAGES オプションを使用して作成されている必要があります。 lpBaseAddressに null 以外の値を指定する場合、値は GetLargePageMinimumの倍数 必要があります。
FILE_MAP_TARGETS_INVALID
マップされたファイル内のすべての場所を、制御フロー ガード (CFG) の無効なターゲットとして設定します。 このフラグは、PAGE_TARGETS_INVALIDに似ています。 このフラグは、アクセス実行権限 FILE_MAP_EXECUTEと組み合わせて使用します。 これらのページ内の場所への間接呼び出しは CFG チェックに失敗し、プロセスは終了します。 割り当てられる実行可能ページの既定の動作は、CFG の有効な呼び出しターゲットとしてマークされます。
 

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

ファイル マッピング オブジェクトへのアクセスの詳細については、「ファイル マッピング のセキュリティとアクセス権の」を参照してください。

[in] FileOffset

ビューを開始するファイル オフセット。 オフセットは、ファイル マッピング内のオフセットを指定する必要があります。 また、システムのメモリ割り当て粒度と一致する必要があります。 つまり、オフセットは割り当て粒度の倍数である必要があります。 システムのメモリ割り当ての粒度を取得するには、GetSystemInfo 関数を使用します。この関数は、SYSTEM_INFO 構造体のメンバーを格納します。

[in] NumberOfBytesToMap

ビューにマップするファイル マッピングのバイト数。 すべてのバイトは、CreateFileMappingFromAppで指定 最大サイズ内にある必要があります。 このパラメーターが 0 (ゼロ) の場合、マッピングは指定されたオフセットからファイル マッピングの末尾まで拡張されます。

戻り値

関数が成功した場合、戻り値はマップされたビューの開始アドレスです。

関数が失敗した場合、戻り値は NULL。 拡張エラー情報を取得するには、GetLastError呼び出します。

備考

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

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

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

必要条件

要件 価値
サポートされる最小クライアント Windows 8 [デスクトップ アプリ |UWP アプリ]
サポートされる最小サーバー Windows Server 2012 [デスクトップ アプリ |UWP アプリ]
ターゲット プラットフォーム の ウィンドウズ
ヘッダー memoryapi.h (Windows.h を含む)
ライブラリ onecore.lib
DLL Kernel32.dll

関連項目

CreateFileMapping の

ファイル ビュー の作成

DuplicateHandle の

GetSystemInfo を する

MapViewOfFile

MapViewOfFileEx の

メモリ管理機能の

OpenFileMapping

SYSTEM_INFO

unmapViewOfFile の