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 |
ターゲット プラットフォーム の | 万国 |
ヘッダー | ntifs.h (Wdm.h、Ntifs.h を含む) |
ライブラリ | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
関連項目
CreateFileMappingの
InitializeObjectAttributesの