次の方法で共有


FsRtlCreateSectionForDataScan 関数 (ntifs.h)

FsRtlCreateSectionForDataScan ルーチンは、セクション オブジェクトを作成します。 このルーチンは細心の注意を払って使用してください。 (次の 「備考」セクションを 参照してください。

構文

NTSTATUS FsRtlCreateSectionForDataScan(
  [out]           PHANDLE            SectionHandle,
  [out]           PVOID              *SectionObject,
  [out, optional] PLARGE_INTEGER     SectionFileSize,
  [in]            PFILE_OBJECT       FileObject,
  [in]            ACCESS_MASK        DesiredAccess,
  [in, optional]  POBJECT_ATTRIBUTES ObjectAttributes,
  [in, optional]  PLARGE_INTEGER     MaximumSize,
  [in]            ULONG              SectionPageProtection,
  [in]            ULONG              AllocationAttributes,
  [in]            ULONG              Flags
);

パラメーター

[out] SectionHandle

セクション オブジェクトへの不透明なハンドルを受け取る呼び出し元によって割り当てられた変数へのポインター。

[out] SectionObject

セクション オブジェクトへの不透明なポインターを受け取る呼び出し元によって割り当てられた変数へのポインター。

[out, optional] SectionFileSize

セクション オブジェクトの作成時にファイルのサイズ (バイト単位) を受け取る呼び出し元によって割り当てられた変数へのポインター。 このパラメーターは省略可能であり、 NULL にすることができます。

[in] FileObject

開いているファイルの File オブジェクト。 セクション オブジェクトは、指定したファイルによってサポートされます。 このパラメーターは必須であり、 NULL にすることはできません。

[in] DesiredAccess

セクション オブジェクトの目的のアクセス権を、次の ACCESS_MASK フラグの 1 つ以上として指定します。

DesiredAccess フラグ 呼び出し元が
SECTION_MAP_READ セクションのビューを読み取る。
SECTION_MAP_WRITE セクションのビューを書き込みます。
SECTION_QUERY セクションに関する情報をセクション オブジェクトに照会します。 ドライバーは、このフラグを設定する必要があります。
SECTION_ALL_ACCESS 前のフラグによって定義されたすべてのアクションと、STANDARD_RIGHTS_REQUIREDによって定義されたアクション。 (STANDARD_RIGHTS_REQUIREDの詳細については、「 ACCESS_MASK」を参照してください。

[in, optional] ObjectAttributes

オブジェクト名とその他の属性を指定する OBJECT_ATTRIBUTES 構造体へのポインター。 InitializeObjectAttributes マクロを使用して、この構造体を初期化します。 FsRtlCreateSectionForDataScan によってこのオブジェクトがプロセス ハンドル テーブルに挿入されるため、呼び出し元は InitializeObjectAttributes を呼び出すときに OBJ_KERNEL_HANDLE 属性を指定する必要があります。

[in, optional] MaximumSize

このパラメーターは将来使用するために予約されています。

[in] SectionPageProtection

セクション内の各ページに配置する保護を指定します。 次のいずれかの値を指定します。 このパラメーターは必須であり、0 にすることはできません。

フラグ 説明
PAGE_READONLY コミットされたページ領域への読み取り専用アクセスを有効にします。 コミットされたリージョンに書き込もうとすると、アクセス違反が発生します。 システムが読み取り専用アクセスと実行アクセスを区別する場合、コミットされたリージョンでコードを実行しようとすると、アクセス違反が発生します。
PAGE_READWRITE コミットされたページ領域への読み取りと書き込みの両方のアクセスを有効にします。

[in] AllocationAttributes

SEC_XXX フラグのビットマスクによって、セクションの割り当て属性が決まります。 次の値の 1 つ以上を指定します。 このパラメーターは必須であり、0 にすることはできません。

フラグ 説明
SEC_COMMIT セクションのすべてのページに対して、ディスク上のメモリまたはページング ファイルに物理ストレージを割り当てます。 これが既定の設定です。 このフラグは必須であり、省略できないことに注意してください。
SEC_FILE FileObject パラメーターで指定されたファイルは、マップされたファイルです。

[in] Flags

このパラメーターは将来使用するために予約されています。

戻り値

FsRtlCreateSectionForDataScan は 、次のいずれかのSTATUS_SUCCESSまたは適切な NTSTATUS 値を返します。

リターン コード 説明
STATUS_END_OF_FILE
FileObject パラメーターで指定されたファイルのサイズは 0 です。 これはエラー コードです。
STATUS_FILE_LOCK_CONFLICT
FileObject パラメーターで指定されたファイルはロックされています。 これはエラー コードです。
STATUS_INSUFFICIENT_RESOURCES
FsRtlCreateSectionForDataScan でプール割り当てエラーが発生しました。 これはエラー コードです。
STATUS_INVALID_FILE_FOR_SECTION
FileObject パラメーターで指定されたファイルは、セクションをサポートしていません。 これはエラー コードです。
STATUS_INVALID_PARAMETER_8
SectionPageProtection パラメーターに指定された値が無効です。 これはエラー コードです。
STATUS_INVALID_PARAMETER_9
呼び出し元が AllocationAttributes パラメーターに無効な値を指定しました。 これはエラー コードです。
STATUS_PRIVILEGE_NOT_HELD

呼び出し元には、DesiredAccess パラメーターで指定されたアクセス権を持つセクション オブジェクトを作成するために必要な特権がありませんでした。 これはエラー コードです。

注釈

大事なFsRtlCreateSectionForDataScan ルーチンは、FileObject パラメーターで指定されたファイル オブジェクトへのハンドルがまだ作成されていない場合 (通常は作成後操作の処理中) にのみ使用する必要があります。 ドライバーがファイル オブジェクトへのハンドルを持っているか、ファイル オブジェクトへのハンドルを取得できる場合、ドライバーは代わりに ZwCreateSection ルーチンを使用する必要があります。
 
このルーチンによって作成されたセクション オブジェクトが不要になったら、必ず ZwClose ルーチンを呼び出してセクション オブジェクトのハンドル (SectionHandle) を閉じ、ObDereferenceObject ルーチンを呼び出してセクション オブジェクト自体 (SectionObject) を逆参照してください。

マップされたセクションとメモリのビューの作成の詳細については、「 セクション オブジェクトとビュー」を参照してください。 Microsoft Windows SDKの CreateFileMapping ルーチンのドキュメントも参照してください。

要件

要件
サポートされている最小のクライアント Windows 2000 Service Pack 4 (SP4) の更新プログラムのロールアップ。Windows XP Service Pack 2 (SP2) のフィルター マネージャー ロールアップ。
サポートされている最小のサーバー Microsoft Windows Server 2003 SP1
対象プラットフォーム ユニバーサル
Header ntifs.h (Ntifs.h を含む)
Library NtosKrnl.lib
[DLL] NtosKrnl.exe
IRQL <= APC_LEVEL

こちらもご覧ください

ACCESS_MASK

CcPurgeCacheSection

MmFlushImageSection

MmForceSectionClosed

ZwCreateSection