次の方法で共有


FltRetrieveFileInfoOnCreateCompletionEx 関数 (fltkernel.h)

FltRetrieveFileInfoOnCreateCompletionEx は、ファイルの作成時に指定されたファイル情報を照会します。

構文

NTSTATUS FLTAPI FltRetrieveFileInfoOnCreateCompletionEx(
  [in]  PFLT_FILTER        Filter,
  [in]  PFLT_CALLBACK_DATA Data,
  [in]  ULONG              InfoClass,
  [out] PULONG             RetInfoSize,
  [out] PVOID              *RetInfoBuffer
);

パラメーター

[in] Filter

ミニフィルター ドライバーを一意に識別する不透明なフィルター ポインター。 FltRegisterFilter によって返され、ミニフィルター ドライバーが読み込まれる限り、一定のままになります。

[in] Data

I/O 操作を表す FLT_CALLBACK_DATA コールバック データへのポインター。

[in] InfoClass

返すファイル情報の種類を示すフラグ。 フラグは結合できないことに注意してください。 値は、次のいずれかです。

フラグ 説明
QoCFileStatInformation (0x00000001) ファイル システムは、 QUERY_ON_CREATE_FILE_STAT_INFORMATION 構造体内のファイル統計情報を返します。
QoCFileLxInformation (0x00000002) ファイル システムは、 QUERY_ON_CREATE_FILE_LX_INFORMATION 構造内の拡張 Linux に似た情報を返します。
QoCFileEaInformation (0x00000004) ファイル システムは、 QUERY_ON_CREATE_EA_INFORMATION 構造の拡張属性 (EA) を返します。
QoCFileUsnInformation (0x00000008) ファイル システムは、 QUERY_ON_CREATE_USN_INFORMATION 構造体で USN 情報を返します。
QoCFileSecurityInformation (0x00000010) ファイル システムは、 QUERY_ON_CREATE_SECURITY_INFORMATION 構造のファイル セキュリティ情報を返します。

[out] RetInfoSize

RetInfoBuffer が指すバッファーのサイズをバイト単位で受け取る ULONG へのポインター。

[out] RetInfoBuffer

要求された InfoClass 構造体へのポインターを受け取ります。 ファイル システムが要求を処理できても、要求されたファイル情報が見つからない場合、このパラメーターは NULL に設定されます。

戻り値

リターン コード 説明
STATUS_SUCCESS ファイル システムは、要求されたファイル情報を正常に返しました。
STATUS_NOT_FOUND ファイル システムは要求を処理しましたが、要求された情報がファイルに存在しないか、ファイル システムが InfoClass の情報要求を認識しません。 呼び出し元は、従来のファイル システム API を使用して情報を要求しないでください。
STATUS_NOT_SUPPORTED ファイル システムは、要求された情報を取得できませんでした。 このエラーは、ファイル システムが情報要求または関連付けられた ECP をサポートしていない場合、またはファイルの事前作成時に FltRequestFileInfoOnCreateCompletion が呼び出されなかった場合に発生します。 呼び出し元は、代わりに従来のファイル システム API を使用して、情報の要求を再試行する必要があります。
STATUS_UNSUCCESSFUL 要求された情報を取得しようとしたときに、ファイル システムにエラーが発生しました。 呼び出し元は、通常のファイル システム API を使用して情報の要求を試みることができますが、失敗する可能性があります。

注釈

FltRequestFileInfoOnCreateCompletionFltRetrieveFileInfoOnCreateCompletionEx を使用すると、ファイルの作成時にミニフィルターでファイルに関する情報を取得できるため、スタック トラバーサルを必要とする後のクエリのパフォーマンス コストを回避できます。

  • 事前作成では、ミニフィルターは FltRequestFileInfoOnCreateCompletion を 1 回呼び出し、入力 InfoClassFlags を組み合わせて要求された情報を識別します。
  • ファイル システムは適切な構造体を割り当て、サポートされている場合は、作成の処理中に要求された情報を入力します。
  • 作成後、ミニフィルターは FltRetrieveFileInfoOnCreateCompletionEx を呼び出して、事前作成呼び出しで要求した情報を取得します。 ミニフィルターが複数の情報の種類を要求した場合は、情報の種類ごとに FltRetrieveFileInfoOnCreateCompletionEx を 1 回呼び出す必要があります。 例:

// Pre-create:
NTSTATUS status;
status = FltRequestFileInfoOnCreateCompletion( Filter,
                                               CallbackData,
                                               QoCFileStatInformation
                                                | QoCFileLxInformation
                                                | QoCFileEaInformation 
                                                | QoCFileUsnInformation );

// Post-create:
NTSTATUS status;
ULONG fileStatSize, fileLxSize, fileEaSize;
QUERY_ON_CREATE_FILE_STAT_INFORMATION* fileStatInfo;
QUERY_ON_CREATE_FILE_LX_INFORMATION* fileLxInfo;
QUERY_ON_CREATE_EA_INFORMATION* fileEaInfo;
QUERY_ON_CREATE_USN_INFORMATION* fileUsnInfo;
QUERY_ON_CREATE_SECURITY_INFORMATION* fileSecurityInfo;

status = FltRetrieveFileInfoOnCreateCompletionEx( Filter,
                                                  CallbackData,
                                                  QoCFileStatInformation,
                                                  &fileStatSize,
                                                  &fileStatInfo );
status = FltRetrieveFileInfoOnCreateCompletionEx( Filter,
                                                  CallbackData,
                                                  QoCFileLxInformation,
                                                  &fileLxSize,
                                                  &fileLxInfo );
status = FltRetrieveFileInfoOnCreateCompletionEx( Filter,
                                                  CallbackData,
                                                  QoCFileEaInformation, 
                                                  &fileEaSize, 
                                                  &fileEaInfo );
status = FltRetrieveFileInfoOnCreateCompletionEx( Filter,
                                                  CallbackData,
                                                  QoCFileUsnInformation, 
                                                  &fileUsnInfo, 
                                                  &fileUsnInfo );
status = FltRetrieveFileInfoOnCreateCompletionEx( Filter,
                                                  CallbackData,
                                                  QoCFileSecurityInformation,
                                                  &fileSecurityInfo,
                                                  &fileSecurityInfo);

FltRetrieveFileInfoOnCreateCompletionEx が返されると、ミニフィルターは RetInfoBuffer が指すバッファーに書き込むことができます。 そのミニフィルターの上にあるフィルターは、変更された情報の種類で FltRetrieveFileInfoOnCreateCompletionEx を呼び出すと変更が表示されます。

要件

要件
サポートされている最小のクライアント Windows 10 Version 1809
Header fltkernel.h

こちらもご覧ください

ECP_LIST

FLT_CALLBACK_DATA

FltRequestFileInfoOnCreateCompletion

QUERY_ON_CREATE_EA_INFORMATION

QUERY_ON_CREATE_FILE_STAT_INFORMATION

QUERY_ON_CREATE_FILE_LX_INFORMATION