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 |