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 |