次の方法で共有


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_READONLY、PAGE_READWRITEPAGE_EXECUTE_READ、または PAGE_EXECUTE_READWRITE保護を使用 して 作成されている必要があります。

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

MapViewOfFileFromApp と共に使用する場合、 (FILE_MAP_WRITE | FILE_MAP_READ)FILE_MAP_WRITEと同じです。

 

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

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

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

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

FILE_MAP_LARGE_PAGES
バージョン 1703 Windows 10以降、このフラグは、大きなページのサポートを使用してビューをマップする必要があることを指定します。 ビューのサイズは 、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 アプリ]
対象プラットフォーム Windows
ヘッダー memoryapi.h (Windows.h を含む)
Library onecore.lib
[DLL] Kernel32.dll

関連項目

CreateFileMapping

ファイル ビューの作成

DuplicateHandle

GetSystemInfo

MapViewOfFile

MapViewOfFileEx

メモリ管理関数

OpenFileMapping

SYSTEM_INFO

UnmapViewOfFile