FltCreateSectionForDataScan 関数 (fltkernel.h)
FltCreateSectionForDataScan ルーチンは、ファイルのセクション オブジェクトを作成します。 フィルター マネージャーは、必要に応じて、作成されたセクションと I/O を同期できます。
構文
NTSTATUS FLTAPI FltCreateSectionForDataScan(
[in] PFLT_INSTANCE Instance,
[in] PFILE_OBJECT FileObject,
[in] PFLT_CONTEXT SectionContext,
[in] ACCESS_MASK DesiredAccess,
[in, optional] POBJECT_ATTRIBUTES ObjectAttributes,
[in, optional] PLARGE_INTEGER MaximumSize,
[in] ULONG SectionPageProtection,
[in] ULONG AllocationAttributes,
[in] ULONG Flags,
[out] PHANDLE SectionHandle,
[out] PVOID *SectionObject,
[out, optional] PLARGE_INTEGER SectionFileSize
);
パラメーター
[in] Instance
コンテキストを取得するミニフィルター ドライバー インスタンスの不透明なインスタンス ポインター。
[in] FileObject
開いているファイルのファイル オブジェクト。 セクション オブジェクトは、指定されたファイルによってサポートされます。 このパラメーターは必須であり、NULL にすることはできません。
[in] SectionContext
以前に割り当てられたセクション コンテキストへのポインター。
[in] DesiredAccess
次の ACCESS_MASK フラグの 1 つ以上としてのセクション オブジェクトのアクセスの種類。
旗 | 呼び出し元が |
---|---|
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 マクロを使用します。
[in, optional] MaximumSize
このパラメーターは、将来使用するために予約されています。
[in] SectionPageProtection
セクション内の各ページに配置する保護。 次のいずれかの値を指定します。 このパラメーターは必須であり、0 にすることはできません。
旗 | 意味 |
---|---|
PAGE_READONLY | コミットされたページ領域への読み取り専用アクセスを有効にします。 コミットされたリージョンに書き込もうとすると、アクセス違反が発生します。 システムが読み取り専用アクセスと実行アクセスを区別する場合、コミットされたリージョンでコードを実行しようとすると、アクセス違反が発生します。 |
PAGE_READWRITE | コミットされたページ領域への読み取りと書き込みの両方のアクセスを有効にします。 |
[in] AllocationAttributes
SEC_XXX フラグのビットマスクによって、セクションの割り当て属性が決まります。 次の値のうち 1 つ以上を指定します。 このパラメーターは必須であり、0 にすることはできません。
旗 | 意味 |
---|---|
SEC_COMMIT | セクションのすべてのページに対して、メモリまたはディスク上のページング ファイルに物理ストレージを割り当てます。 これが既定の設定です。 このフラグは必須であり、省略できないことに注意してください。 |
SEC_FILE | FileObject パラメーターで指定されたファイルは、マップされたファイルです。 |
[in] Flags
このパラメーターは、将来使用するために予約されています。
[out] SectionHandle
セクションへの不透明なハンドルを受け取る呼び出し元によって割り当てられた変数へのポインター。 既定では、セクション ハンドルはユーザー ハンドルです。 呼び出し元がカーネル ハンドルを必要とする場合は、OBJ_KERNEL_HANDLE フラグが設定された ObjectAttributes パラメーター内の初期化された OBJECT_ATTRIBUTES 構造体へのポインターを渡す必要があります。
[out] SectionObject
セクション オブジェクトへの不透明なポインターを受け取る呼び出し元によって割り当てられた変数へのポインター。
[out, optional] SectionFileSize
セクション オブジェクトの作成時にファイルのサイズ (バイト単位) を受け取る呼び出し元によって割り当てられた変数へのポインター。 このパラメーターは省略可能であり、NULL にすることができます。
戻り値
FltCreateSectionForDataScan
リターン コード | 形容 |
---|---|
STATUS_END_OF_FILE | FileObject パラメーターで指定されたファイルのサイズは 0 です。 |
STATUS_FILE_LOCK_CONFLICT | FileObject パラメーターで指定されたファイルはロックされています。 |
STATUS_INSUFFICIENT_RESOURCES | FltCreateSectionForDataScan |
STATUS_INVALID_FILE_FOR_SECTION | FileObject パラメーターで指定されたファイルは、セクションをサポートしていません。 |
STATUS_INVALID_PARAMETER | ミニフィルターは登録されていません。 |
STATUS_INVALID_PARAMETER_8 | SectionPageProtection パラメーターに指定された値が無効です。 |
STATUS_INVALID_PARAMETER_9 | 呼び出し元が、AllocationAttributes パラメーターに無効な値を指定しました。 |
STATUS_NOT_SUPPORTED | このインスタンスにアタッチされているボリュームは、セクション コンテキストをサポートしていません。 |
STATUS_PRIVILEGE_NOT_HELD | 呼び出し元には、DesiredAccess パラメーターで指定されたアクセス権を持つセクション オブジェクトを作成するために必要な特権がありませんでした。 |
STATUS_FILE_IS_A_DIRECTORY | FileObject パラメーターで指定されたファイルはディレクトリです。 |
STATUS_FLT_CONTEXT_ALREADY_DEFINED | Instance によって指定されたフィルター インスタンスには、ストリームの開いているセクションが既に存在します。 ストリームごとに 1 つのセクションのみがサポートされるため、インスタンスごとに 1 つのセクションがサポートされます。 |
備考
FltCreateSectionForDataScan
FltCreateSectionForDataScan
ハンドルには、ユーザー ハンドルまたはカーネル ハンドルのいずれかを指定できます。 ObjectAttributes が指
セクションを開いたままにすると、現在のファイル I/O と互換性がない場合があります。 特に、キャッシュの消去をトリガーするファイル I/O では、セクションが開いているためにキャッシュの消去が禁止されている場合、キャッシュの一貫性が低下する可能性があります。 ミニフィルターは、これらのイベントの通知にオプションのコールバック ルーチンを提供できます。 ミニフィルター ドライバーは、これらの通知を受信する PFLT_SECTION_CONFLICT_NOTIFICATION_CALLBACK を実装します。 FLT_REGISTRATION の SectionNotificationCallback メンバーがミニフィルターの登録時にこのコールバック ルーチンに設定されている場合、競合通知が有効になります。 通知を受信すると、セクションを閉じて、競合する I/O 操作を続行できます。
手記
セクション通知コールバックは、FltCreateSectionForDataScan が返
このルーチンによって作成されたセクション オブジェクトが不要になった場合は、ZwClose ルーチンを呼び出してセクション オブジェクトのハンドル (SectionHandle) を閉じ、ObDereferenceObject ルーチンを呼び出してセクション オブジェクト自体 (SectionObject) を逆参照してください。
マップされたセクションとメモリのビューの作成の概要については、「Section Objects and Views」を参照してください。 また、Microsoft Windows SDK の CreateFileMapping ルーチンのドキュメントも参照してください。
大事な
ミニフィルターでは、FltCreateSectionForDataScanに渡されたセクション コンテキスト
一般に、セクションは読み取り専用として作成する必要があります。 特に、読み取り専用ファイルがトランザクション内にあり、ミニフィルターで読み取り専用セクションが作成されない場合、セクションへの書き込みは破棄され、トランザクションの一部として含まれません。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 8 |
ターゲット プラットフォーム の |
万国 |
ヘッダー | fltkernel.h (Fltkernel.h を含む) |
ライブラリ | FltMgr.lib |
IRQL | <= APC_LEVEL |
関連項目
ccPurgeCacheSection を
FltAllocateContext の
FltCloseSectionForDataScan の
FltRegisterForDataScan の
ObDereferenceObject の