次の方法で共有


NtCreateSectionEx 関数 (ntifs.h)

NtCreateSectionExセクション オブジェクト** を 作成し、指定した目的のアクセス権を持つ オブジェクトへのハンドルを開きます。 これは NtCreateSection の拡張バージョンであり、 を指定してセクション オブジェクトを作成し、これが実際には Address Windowing Extensions (AWE) セクションであることを示します。

構文

__kernel_entry NTSYSCALLAPI NTSTATUS NtCreateSectionEx(
  [out]          PHANDLE                 SectionHandle,
  [out]          ACCESS_MASK             DesiredAccess,
  [in, optional] POBJECT_ATTRIBUTES      ObjectAttributes,
  [in, optional] PLARGE_INTEGER          MaximumSize,
  [in]           ULONG                   SectionPageProtection,
  [in]           ULONG                   AllocationAttributes,
  [in, optional] HANDLE                  FileHandle,
  [in/out]       PMEM_EXTENDED_PARAMETER ExtendedParameters,
                 ULONG                   ExtendedParameterCount
);

パラメーター

[out] SectionHandle

セクション オブジェクトへのハンドルを受け取る HANDLE 変数へのポインター。

[out] DesiredAccess

オブジェクトへの要求されたアクセスを決定する ACCESS_MASK 値を指定します。 呼び出し元は、すべての種類のオブジェクトに対して定義されているアクセス権に加えて、セクション オブジェクトに固有の次のいずれかのアクセス権を指定できます。

DesiredAccess フラグ 呼び出し元がこれを行うことを許可します
SECTION_EXTEND_SIZE セクションのサイズを動的に拡張します。
SECTION_MAP_EXECUTE セクションのビューを実行します。
SECTION_MAP_READ セクションのビューを読み取る。
SECTION_MAP_WRITE セクションのビューを書き込みます。
SECTION_QUERY セクションに関する情報をセクション オブジェクトに照会します。 ドライバーは、このフラグを設定する必要があります。
SECTION_ALL_ACCESS 前のすべてのフラグをSTANDARD_RIGHTS_REQUIREDと組み合わせて使用します。

[in, optional] ObjectAttributes

オブジェクト名とその他の属性を指定する OBJECT_ATTRIBUTES 構造体へのポインター。 InitializeObjectAttributes を使用して、この構造体を初期化します。 呼び出し元がシステム スレッド コンテキストで実行されていない場合は、 InitializeObjectAttributes を呼び出すときにOBJ_KERNEL_HANDLE属性を設定する必要があります。

[in, optional] MaximumSize

セクションの最大サイズをバイト単位で指定します。 NtCreateSection は、この値をPAGE_SIZEの最も近い倍数に丸めます。 セクションがページング ファイルによってサポートされている場合、 MaximumSize はセクションの実際のサイズを指定します。 セクションが通常のファイルでサポートされている場合、 MaximumSize は、ファイルを拡張またはマップできる最大サイズを指定します。

[in] SectionPageProtection

セクション内の各ページに配置する保護を指定します。 PAGE_READONLY、PAGE_READWRITE、PAGE_EXECUTE、PAGE_WRITECOPYの 4 つの値のいずれかを使用します。 これらの値の説明については、「 CreateFileMapping」を参照してください。

[in] AllocationAttributes

セクションの割り当て属性を決定するSEC_XXX フラグのビットマスクを指定します。 これらのフラグの説明については、「 CreateFileMapping」を参照してください。

[in, optional] FileHandle

必要に応じて、開いているファイル オブジェクトのハンドルを指定します。 FileHandle の値が NULL の場合、セクションはページング ファイルによってサポートされます。 それ以外の場合、セクションは指定されたファイルによってサポートされます。

[in/out] ExtendedParameters

MEM_EXTENDED_PARAMETER構造体の配列へのポインターには、セクションを作成するための拡張パラメーターが含まれています。

ExtendedParameterCount

ExtendedParameters が指す配列のサイズ。

戻り値

NtCreateSectionEx は、成功した場合はSTATUS_SUCCESS、失敗した場合は適切な NTSTATUS エラー コードを返します。 考えられるエラー状態コードは次のとおりです。

リターン コード 説明
STATUS_FILE_LOCK_CONFLICT FileHandle パラメーターで指定されたファイルはロックされています。
STATUS_INVALID_FILE_FOR_SECTION FileHandle で指定されたファイルは、セクションをサポートしていません。
STATUS_INVALID_PAGE_PROTECTION SectionPageProtection パラメーターに指定された値が無効です。
STATUS_MAPPED_FILE_SIZE_ZERO FileHandle で指定されたファイルのサイズは 0、MaximumSize は 0 です。
STATUS_SECTION_TOO_BIG MaximumSize の値が大きすぎます。 これは、 MaximumSize がセクションのシステム定義の最大値より大きい場合、または MaximumSize が指定されたファイルより大きく、セクションが書き込み可能でない場合に発生します。

注釈

SectionHandle が指すハンドルが使用されなくなったら、ドライバーは NtClose を呼び出して閉じる必要があります。

呼び出し元がシステム スレッド コンテキストで実行されていない場合は、作成するハンドルがプライベート ハンドルであることを確認する必要があります。 それ以外の場合は、ドライバーが実行されているコンテキスト内のプロセスによってハンドルにアクセスできます。 詳細については、「 オブジェクト ハンドル」を参照してください。

メモリのマップされたセクションとビューの設定の詳細については、「 セクションとビュー」を参照してください。

注意

この関数の呼び出しがユーザー モードで発生する場合は、"ZwCreateSectionEx" ではなく"NtCreateSectionEx" という名前を使用する必要があります。

カーネル モード ドライバーからの呼び出しの場合、Windows ネイティブ システム サービス ルーチンの NtXxx および ZwXxx バージョンは、入力パラメーターを処理および解釈する方法で動作が異なります。 ルーチンの NtXxx バージョンと ZwXxx バージョン間の関係の詳細については、「Using Nt and Zw Versions of the Native System Services Routines」を参照してください。

ExtendedParameters は、優先する NUMA ノードが指定されている場合にスタック ベースの拡張パラメーターです。

拡張パラメーターのインスタンスは 1 つだけ指定できます。

この API のダウンストリームで想定される 1 から始まる numa ノード番号に変換します。

要件

要件
サポートされている最小のクライアント Windows 10 バージョン 1803
Header ntifs.h
Library NtosKrnl.lib
[DLL] NtosKrnl.exe

こちらもご覧ください

ACCESS_MASK

CreateFileMapping

InitializeObjectAttributes

ZwClose

ZwMapViewOfSection

ZwOpenSection

ZwUnmapViewOfSection