MapViewOfFileExNuma 関数 (winbase.h)
ファイル マッピングのビューを呼び出し元プロセスのアドレス空間にマップし、物理メモリの NUMA ノードを指定します。
構文
LPVOID MapViewOfFileExNuma(
[in] HANDLE hFileMappingObject,
[in] DWORD dwDesiredAccess,
[in] DWORD dwFileOffsetHigh,
[in] DWORD dwFileOffsetLow,
[in] SIZE_T dwNumberOfBytesToMap,
[in, optional] LPVOID lpBaseAddress,
[in] DWORD nndPreferred
);
パラメーター
[in] hFileMappingObject
ファイル マッピング オブジェクトへのハンドル。
[in] dwDesiredAccess
ページのページ保護を決定するファイル マッピング オブジェクトへのアクセスの種類。 このパラメーターには、次のいずれかの値、または必要に応じて複数の値のビットごとの OR の組み合わせを指定できます。
価値 | 意味 |
---|---|
|
ファイルの書き込み時のコピー ビューがマップされます。 ファイル マッピング オブジェクトは、PAGE_READONLY、PAGE_EXECUTE_READ、PAGE_WRITECOPY、PAGE_EXECUTE_WRITECOPY、PAGE_READWRITE、または PAGE_EXECUTE_READWRITE 保護を使用して作成されている必要があります。
プロセスが書き込み時のコピー ページに書き込むと、システムは元のページを、プロセスに対してプライベートな新しいページにコピーします。 新しいページはページング ファイルによってサポートされます。 新しいページの保護は、書き込み時のコピーから読み取り/書き込みに変わります。 書き込み時のコピー アクセスを指定すると、呼び出し元のプロセスがビュー内のすべてのページに書き込み、すべてのページをプライベートにする可能性があるため、システムとプロセスのコミット料金はビュー全体に対して行われます。 新しいページの内容は元のファイルに書き戻されることはなく、ビューがマップ解除されると失われます。 |
|
ファイルの実行可能ビューがマップされます (マップされたメモリはコードとして実行できます)。 ファイル マッピング オブジェクトは、PAGE_EXECUTE_READ、PAGE_EXECUTE_WRITECOPY、または PAGE_EXECUTE_READWRITE 保護を使用して作成されている必要があります。 |
|
Windows 10 バージョン 1703 以降では、このフラグは、をサポートする大きなページ |
|
マップされたファイル内のすべての場所を、制御フロー ガード (CFG) の無効なターゲットとして設定します。 このフラグは、PAGE_TARGETS_INVALIDに似ています。 このフラグは、アクセス実行権限 FILE_MAP_EXECUTEと組み合わせて使用します。 これらのページ内の場所への間接呼び出しは CFG チェックに失敗し、プロセスは終了します。 割り当てられる実行可能ページの既定の動作は、CFG の有効な呼び出しターゲットとしてマークされます。 |
SEC_IMAGE 属性を使用して作成されたファイル マッピング オブジェクトの場合、dwDesiredAccess パラメーターは無効であり、FILE_MAP_READなどの任意の有効な値に設定する必要があります。
ファイル マッピング オブジェクトへのアクセスの詳細については、「ファイル マッピング のセキュリティとアクセス権の」を参照してください。
[in] dwFileOffsetHigh
ビューを開始するファイル オフセットの高次 DWORD。
[in] dwFileOffsetLow
ビューを開始するファイル オフセットの下位 DWORD。 高オフセットと低オフセットの組み合わせで、ファイル マッピング内のオフセットを指定する必要があります。 また、システムのメモリ割り当て粒度と一致する必要があります。 つまり、オフセットは割り当て粒度の倍数である必要があります。 システムのメモリ割り当ての粒度を取得するには、GetSystemInfo 関数を使用します。この関数は、SYSTEM_INFO 構造体のメンバーを格納します。
[in] dwNumberOfBytesToMap
ビューにマップするファイル マッピングのバイト数。 すべてのバイトは、CreateFileMappingで指定
[in, optional] lpBaseAddress
マッピングが開始される呼び出しプロセス・アドレス・スペース内のメモリー・アドレスへのポインター。 これは、システムのメモリ割り当て粒度の倍数である必要があります。または、関数が失敗します。 システムのメモリ割り当ての粒度を決定するには、getSystemInfo 関数
現在安全なアドレス (オペレーティング システムでは使用されていません) を指定することは可能ですが、アドレスが時間の経過と同時に安全である保証はありません。 したがって、オペレーティング システムでアドレスを選択することをお勧めします。 この場合、ポインターはメモリ マップファイルに格納されません。マッピングを任意のアドレスで使用できるように、ファイル マッピングのベースからのオフセットを格納します。
[in] nndPreferred
物理メモリが存在する NUMA ノード。
価値 | 意味 |
---|---|
|
NUMA ノードは推奨されません。 これは、MapViewOfFileEx 関数の呼び出しと同じです。 |
戻り値
関数が成功した場合、戻り値はマップされたビューの開始アドレスです。
関数が失敗した場合、戻り値は NULL
備考
ファイルをマッピングすると、ファイルの指定された部分が呼び出し元プロセスのアドレス空間に表示されます。
アドレス空間より大きいファイルの場合、一度にマップできるのはファイル データのごく一部のみです。 最初のビューが完了したら、マップを解除して新しいビューをマップします。
ビューのサイズを取得するには、VirtualQueryEx 関数を使用します。
ページ ファイルによってサポートされるファイル マッピング オブジェクト内のページの初期コンテンツは 0 (ゼロ) です。
推奨されるマッピング アドレスが指定されている場合、指定したアドレスに十分なアドレス空間がある場合、ファイルは指定されたアドレス (最も近い 64 KB の境界に切り捨てられます) でマップされます。 十分なアドレス空間がない場合、関数は失敗します。
通常、推奨されるアドレスは、複数のプロセスで同じアドレスでファイルをマップする必要があることを指定するために使用されます。 これには、関連するすべてのプロセスでアドレス空間の領域を使用できる必要があります。 VirtualAllocExNuma 関数を使用してメモリを予約するなど、マッピングに使用されるリージョンでは、他のメモリ割り当てを実行できません。
lpBaseAddress パラメーターでベース オフセットが指定されている場合、指定したメモリ領域が呼び出し元のプロセスでまだ使用されていない場合、関数は成功します。 システムでは、他の 32 ビット プロセスのメモリ マップファイルで同じメモリ領域が使用できることを確認しません。
ファイル (またはファイル マッピング オブジェクトとそのマップされたファイル) の複数のビューは、指定された時刻に同じデータが含まれている場合、一貫性のある
1 つの重要な例外では、同じファイルによってサポートされるファイル マッピング オブジェクトから派生したファイル ビューは、特定の時点で一貫性または同一になります。 一貫性は、プロセス内のビューと、異なるプロセスによってマップされるビューに対して保証されます。
例外はリモート ファイルに関連しています。 MapViewOfFileExNuma
ファイルのマップされたビューは、
EXCEPTION_IN_PAGE_ERROR 例外から保護するには、構造化例外処理を使用して、ページ ファイル以外のファイルのメモリ マップビューに対して書き込みまたは読み取りを行うコードを保護します。
詳細については、「ファイル ビューからの読み取りと書き込みの
マップされたビューを使用してファイルを変更する場合、最後の変更タイムスタンプが自動的に更新されない場合があります。 必要に応じて、呼び出し元 SetFileTime を使用してタイムスタンプを設定する必要があります。
実行可能なアクセス許可を持つファイルを持つアプリケーションは、
Windows Server 2012 では、この関数は次のテクノロジでサポートされています。
テクノロジー | サポート |
---|---|
サーバー メッセージ ブロック (SMB) 3.0 プロトコル | はい |
SMB 3.0 透過的フェールオーバー (TFO) | はい |
SMB 3.0 とスケールアウト ファイル共有 (SO) | はい |
クラスター共有ボリューム ファイル システム (CsvFS) | はい |
回復性のあるファイル システム (ReFS) | はい |
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows Vista [デスクトップ アプリのみ] |
サポートされる最小サーバー | Windows Server 2008 [デスクトップ アプリのみ] |
ターゲット プラットフォーム の |
ウィンドウズ |
ヘッダー | winbase.h (Windows.h を含む) |
ライブラリ | Kernel32.lib |
DLL | Kernel32.dll |
関連項目
CreateFileMappingNuma の
DuplicateHandle の
GetSystemInfo を
MapViewOfFileEx の
ReadFile の
unmapViewOfFile の
VirtualAlloc の
WriteFile の