NtCreateSection 関数 (ntifs.h)

NtCreateSection ルーチンは、セクション オブジェクト** を作成します。

構文

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

パラメーター

[out] SectionHandle

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

[in] 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 の場合、セクションはページング ファイルによってサポートされます。 それ以外の場合、セクションは指定されたファイルによってサポートされます。

戻り値

NtCreateSection は 、成功した場合は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 を呼び出して閉じる必要があります。

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

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

注意

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

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

要件

要件
サポートされている最小のクライアント Windows 2000。
対象プラットフォーム ユニバーサル
Header ntifs.h (Wdm.h、Ntifs.h を含む)
Library NtosKrnl.lib
[DLL] NtosKrnl.exe
IRQL PASSIVE_LEVEL

こちらもご覧ください

ACCESS_MASK

CreateFileMapping

InitializeObjectAttributes

ZwClose

ZwMapViewOfSection

ZwOpenSection

ZwUnmapViewOfSection