次の方法で共有


CreateFileMapping2 関数 (memoryapi.h)

指定したファイルの名前付きまたは名前のないファイル マッピング オブジェクトを作成または開きます。 物理メモリの優先 NUMA ノードを拡張パラメーターとして指定できます。ExtendedParameters パラメーターを参照してください。

構文

HANDLE CreateFileMapping2(
  HANDLE                 File,
  SECURITY_ATTRIBUTES    *SecurityAttributes,
  ULONG                  DesiredAccess,
  ULONG                  PageProtection,
  ULONG                  AllocationAttributes,
  ULONG64                MaximumSize,
  PCWSTR                 Name,
  MEM_EXTENDED_PARAMETER *ExtendedParameters,
  ULONG                  ParameterCount
);

パラメーター

File

型: _In_ HANDLE

ファイル マッピング オブジェクトの作成元となるファイルへのハンドル。

ファイルは、flProtect パラメーターが指定する保護フラグと互換性のあるアクセス権で開く必要があります。 必須ではありませんが、マップする予定のファイルを排他的アクセス用に開くことをお勧めします。 詳細については、「ファイルのセキュリティとアクセス権の」を参照してください。

hFile が INVALID_HANDLE_VALUE場合、呼び出し元プロセスでは、dwMaximumSizeHigh 内のファイル マッピング オブジェクトのサイズを指定し、dwMaximumSizeLow パラメーターを する必要もあります。 このシナリオでは、CreateFileMapping 、ファイル システム内のファイルではなく、システム ページング ファイルによってサポートされる、指定したサイズのファイル マッピング オブジェクトを作成します。

SecurityAttributes

型: _In_opt_ SECURITY_ATTRIBUTES*

返されたハンドルを子プロセスによって継承できるかどうかを決定する SECURITY_ATTRIBUTES 構造体へのポインター。 SECURITY_ATTRIBUTES 構造体の lpSecurityDescriptor メンバーは、新しいファイル マッピング オブジェクトのセキュリティ記述子を指定します。

lpAttributes が NULL場合、ハンドルを継承できず、ファイル マッピング オブジェクトは既定のセキュリティ記述子を取得します。 ファイル マッピング オブジェクトの既定のセキュリティ記述子のアクセス制御リスト (ACL) は、作成者のプライマリ トークンまたは偽装トークンから取得されます。 詳細については、「ファイル マッピングのセキュリティとアクセス権の」を参照してください。

DesiredAccess

型: _In_ ULONG

返されるファイル マッピング ハンドルに必要なアクセス マスク。 アクセス権の一覧については、「ファイル マッピングのセキュリティとアクセス権の」を参照してください。

PageProtection

型: _In_ ULONG

ファイル マッピング オブジェクトのページ保護を指定します。 オブジェクトのすべてのマップされたビューは、この保護と互換性がある必要があります。

このパラメーターには、次のいずれかの値を指定できます。

価値 意味
PAGE_EXECUTE_READ
0x20
読み取り専用、書き込み時のコピー、または実行アクセスに対してビューをマップできるようにします。

hFile パラメーターで指定されたファイル ハンドルは、GENERIC_READGENERIC_EXECUTE アクセス権を使用して作成する必要があります。

Windows Server 2003 および Windows XP: この値は、Windows XP SP2 および Windows Server 2003 SP1 まで使用できません。

PAGE_EXECUTE_READWRITE
0x40
読み取り専用、書き込み時のコピー、読み取り/書き込み、または実行アクセスに対してビューをマップできるようにします。

hFile パラメーターで指定するファイル ハンドルは、GENERIC_READGENERIC_WRITE、および GENERIC_EXECUTE アクセス権を使用して作成する必要があります。

Windows Server 2003 および Windows XP: この値は、Windows XP SP2 および Windows Server 2003 SP1 まで使用できません。

PAGE_EXECUTE_WRITECOPY
0x80
読み取り専用、書き込み時のコピー、または実行アクセスに対してビューをマップできるようにします。 この値は、PAGE_EXECUTE_READと同じです。

hFile パラメーターが指定するファイル ハンドルは、GENERIC_READGENERIC_EXECUTE アクセス権を使用して作成する必要があります。

Windows Vista: この値は、Windows Vista SP1 がインストールされるまで使用できません。

Windows Server 2003 および Windows XP: この値はサポートされていません。

PAGE_READONLY
0x02
読み取り専用または書き込み時のコピー アクセス用にビューをマップできるようにします。 特定のリージョンに書き込もうとすると、アクセス違反が発生します。

hFile パラメーターが指定するファイル ハンドルは、GENERIC_READ アクセス権を使用して作成する必要があります。

PAGE_READWRITE
0x04
読み取り専用、書き込み時のコピー、または読み取り/書き込みアクセスに対してビューをマップできるようにします。

hFile パラメーターが指定するファイル ハンドルは、GENERIC_READGENERIC_WRITE アクセス権を使用して作成する必要があります。

PAGE_WRITECOPY
0x08
読み取り専用または書き込み時のコピー アクセス用にビューをマップできるようにします。 この値は、PAGE_READONLYと同じです。

hFile パラメーターが指定するファイル ハンドルは、GENERIC_READ アクセス権を使用して作成する必要があります。

AllocationAttributes

型: _In_ ULONG

ファイル マッピング オブジェクトには、次の属性のうち 1 つ以上を指定できます。 PageProtection パラメーターも参照してください。

価値 意味
SEC_COMMIT
0x8000000
ファイル マッピング オブジェクトがオペレーティング システムページング ファイル (hfile パラメーターが INVALID_HANDLE_VALUE) によってサポートされている場合は、ファイルのビューがプロセス アドレス空間にマップされるときに、ページの範囲全体が予約ではなくコミットされることを指定します。 システムには、マッピング全体を保持するのに十分なコミット可能なページが必要です。 それ以外の場合、CreateFileMapping 失敗します。

この属性は、実行可能イメージ ファイルまたはデータ ファイルによってサポートされるファイル マッピング オブジェクトには影響しません (hfile パラメーターはファイルへのハンドルです)。

SEC_COMMITSEC_RESERVEと組み合わせることはできません。

属性が指定されていない場合は、SEC_COMMIT が想定されます。

SEC_IMAGE
0x1000000
hFile パラメーターが指定するファイルが実行可能イメージ ファイルであることを指定します。

SEC_IMAGE 属性は、PAGE_READONLYなどのページ保護値と組み合わせる必要があります。 ただし、このページ保護値は、実行可能イメージ ファイルのビューには影響しません。 実行可能イメージ ファイルのビューのページ保護は、実行可能ファイル自体によって決まります。

SEC_IMAGEで有効なその他の属性はありません。

SEC_IMAGE_NO_EXECUTE
0x11000000
hFile パラメーターが指定するファイルが実行されない実行可能イメージ ファイルであり、読み込まれたイメージ ファイルで強制整合性チェックが実行されないことを指定します。 さらに、SEC_IMAGE_NO_EXECUTE 属性で作成されたファイル マッピング オブジェクトのビューをマッピングしても、PsSetLoadImageNotifyRoutine カーネル API を使用して登録されたドライバー コールバックは呼び出されません。

SEC_IMAGE_NO_EXECUTE 属性は、PAGE_READONLY ページ保護の値と組み合わせる必要があります。 SEC_IMAGE_NO_EXECUTEで有効なその他の属性はありません。

Windows Server 2008 R2、Windows 7、Windows Server 2008、Windows Vista、Windows Server 2003、Windows XP: この値は、Windows Server 2012 および Windows 8 より前はサポートされていません。

SEC_LARGE_PAGES
0x80000000
オペレーティング システムのページング ファイルによってサポートされるファイル マッピング オブジェクトに大きなページを使用できるようにします (hfile パラメーター INVALID_HANDLE_VALUE)。 この属性は、実行可能イメージ ファイルまたはデータ ファイルによってサポートされるファイル マッピング オブジェクトではサポートされていません (hFile パラメーターは、実行可能イメージまたはデータ ファイルへのハンドルです)。

ファイル マッピング オブジェクトの最大サイズは、GetLargePageMinimum 関数によって返される大きなページの最小サイズの倍数である必要があります。 そうでない場合は、CreateFileMapping 失敗します。 SEC_LARGE_PAGESを使用して作成されたファイル マッピング オブジェクトのビューをマッピングする場合、ベース アドレスとビュー サイズも、最小サイズの大きいページ サイズの倍数である必要があります。

SEC_LARGE_PAGES 呼び出し元のトークンで有効にするには、SeLockMemoryPrivilege 特権が必要です。

SEC_LARGE_PAGES を指定する場合は、SEC_COMMIT も指定する必要があります。

Windows Server 2003: この値は、Windows Server 2003 SP1 までサポートされていません。

Windows XP: この値はサポートされていません。

SEC_NOCACHE
0x10000000
すべてのページをキャッシュ不可に設定します。

アプリケーションでは、デバイスに明示的に必要な場合を除き、この属性を使用しないでください。 SEC_NOCACHE にマップされたメモリでインターロックされた関数を使用すると、EXCEPTION_ILLEGAL_INSTRUCTION 例外が発生する可能性があります。

SEC_NOCACHE には、SEC_RESERVE または SEC_COMMIT 属性を設定する必要があります。

SEC_RESERVE
0x4000000
ファイル マッピング オブジェクトがオペレーティング システムページング ファイル (hfile パラメーターが INVALID_HANDLE_VALUE) によってサポートされている場合は、ファイルのビューがプロセス アドレス空間にマップされるときに、ページの範囲全体がコミットされるのではなく、後で使用するために予約されることを指定します。

予約済みページは、VirtualAlloc 関数の後続の呼び出しでコミットできます。 ページがコミットされた後は、VirtualFree 関数を使用してページを解放したり、コミットしたりすることはできません。

この属性は、実行可能イメージ ファイルまたはデータ ファイルによってサポートされるファイル マッピング オブジェクトには影響しません (hfile パラメーターはファイルへのハンドルです)。

SEC_RESERVESEC_COMMITと組み合わせることはできません。

SEC_WRITECOMBINE
0x40000000
すべてのページを書き込み結合に設定します。

アプリケーションでは、デバイスに明示的に必要な場合を除き、この属性を使用しないでください。 SEC_WRITECOMBINE にマップされたメモリでインターロックされた関数を使用すると、EXCEPTION_ILLEGAL_INSTRUCTION 例外が発生する可能性があります。

SEC_WRITECOMBINE には、SEC_RESERVE または SEC_COMMIT 属性を設定する必要があります。

Windows Server 2003 および Windows XP: このフラグは、Windows Vista までサポートされていません。

MaximumSize

型: _In_ ULONG64

ファイル マッピング オブジェクトの最大サイズ。

このパラメーターが 0 (ゼロ) の場合、ファイル マッピング オブジェクトの最大サイズは、hFile が識別 ファイルの現在のサイズと同じです。

長さが 0 (ゼロ) のファイルをマップしようとすると、エラー コード ERROR_FILE_INVALIDで失敗します。 長さが 0 (ゼロ) のファイルをテストし、それらのファイルを拒否する必要があります。

Name

型: _IN_OPT_ PCWSTR

ファイル マッピング オブジェクトの名前。

このパラメーターが既存のマッピング オブジェクトの名前と一致する場合、関数は flProtect が指定する保護 オブジェクトへのアクセスを要求します。

このパラメーターが NULL場合、ファイル マッピング オブジェクトは名前なしで作成されます。

lpName が既存のイベント、セマフォ、ミューテックス、待機可能タイマー、またはジョブ オブジェクトの名前と一致する場合、関数は失敗し、GetLastError 関数は ERROR_INVALID_HANDLEを返します。 これは、これらのオブジェクトが同じ名前空間を共有しているために発生します。

名前には、グローバル名前空間またはセッション名前空間にオブジェクトを明示的に作成するための "Global" または "Local" プレフィックスを付けることができます。 名前の残りの部分には、円記号 (\) を除く任意の文字を含めることができます。 セッション 0 以外のセッションからグローバル名前空間にファイル マッピング オブジェクトを作成するには、SeCreateGlobalPrivilege 特権が必要です。 詳細については、「カーネル オブジェクト名前空間を参照してください。

高速ユーザー切り替えは、ターミナル サービス セッションを使用して実装されます。 ログオンする最初のユーザーはセッション 0 (ゼロ) を使用し、次にログオンするユーザーはセッション 1 (1) を使用します。 カーネル オブジェクト名は、アプリケーションが複数のユーザーをサポートできるように、ターミナル サービスに関して概説されているガイドラインに従う必要があります。

ExtendedParameters

型: _Inout_updates_opt_(ParameterCount) MEM_EXTENDED_PARAMETER*

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

ParameterCount

ULONG ParameterCount の

ExtendedParametersによって指される拡張パラメーターの数。

戻り値

関数が成功した場合、戻り値は新しく作成されたファイル マッピング オブジェクトへのハンドルです。

関数呼び出しの前にオブジェクトが存在する場合、関数は (指定したサイズではなく、現在のサイズを持つ) 既存のオブジェクトにハンドルを返し、GetLastError ERROR_ALREADY_EXISTSを返します。

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

備考

CreateFileMappingの 解説 参照してください。

例については、「名前付き共有メモリの作成」または「大きなページを使用したファイル マッピングの作成」を参照してください。

必要条件

要件 価値
サポートされる最小クライアント Windows 10 ビルド 20348
サポートされる最小サーバー Windows 10 ビルド 20348
ターゲット プラットフォーム の ウィンドウズ
ヘッダー memoryapi.h (Windows.h、Memoryapi.h を含む)
ライブラリ onecore.lib
DLL Kernel32.dll

関連項目

CloseHandle の

CreateFileMappingNuma の

ファイル マッピング オブジェクト の作成

DuplicateHandle の

MapViewOfFile

MapViewOfFileEx の

メモリ管理機能

OpenFileMapping

ReadFile の

SECURITY_ATTRIBUTES

unmapViewOfFile の

VirtualAlloc の

WriteFile の