Share via


PFLT_NORMALIZE_NAME_COMPONENT_EX コールバック関数 (fltkernel.h)

フィルター マネージャーの名前キャッシュのファイル名を提供するミニフィルター ドライバーは、ミニフィルター ドライバーの NormalizeNameComponentExCallback コールバック ルーチンとしてPFLT_NORMALIZE_NAME_COMPONENT_EX型のルーチンを登録できます。

構文

PFLT_NORMALIZE_NAME_COMPONENT_EX PfltNormalizeNameComponentEx;

NTSTATUS PfltNormalizeNameComponentEx(
  [in]      PFLT_INSTANCE Instance,
  [in]      PFILE_OBJECT FileObject,
  [in]      PCUNICODE_STRING ParentDirectory,
  [in]      USHORT VolumeNameLength,
  [in]      PCUNICODE_STRING Component,
  [out]     PFILE_NAMES_INFORMATION ExpandComponentName,
  [in]      ULONG ExpandComponentNameLength,
  [in]      FLT_NORMALIZE_NAME_FLAGS Flags,
  [in, out] PVOID *NormalizationContext
)
{...}

パラメーター

[in] Instance

このコールバック ルーチンが登録されているミニフィルター ドライバー インスタンスの不透明なインスタンス ポインター。

[in] FileObject

名前が要求されているファイルのファイル オブジェクトへのポインター。FLTFL_NORMALIZE_NAME_DESTINATION_FILE_NAME フラグが設定されている場合は 、IRP_MJ_SET_INFORMATION 操作のターゲットであるファイル。 詳細については、以下の Flags パラメーターを参照してください。

[in] ParentDirectory

この名前 コンポーネントの親 ディレクトリの名前を含むUNICODE_STRING構造体へのポインター。

[in] VolumeNameLength

ParentDirectory パラメーターが指す構造体に格納されている親ディレクトリ名の長さ (バイト単位)。

[in] Component

展開する名前コンポーネントを含むUNICODE_STRING構造体へのポインター。

[out] ExpandComponentName

名前 コンポーネントの展開 された (正規化された) ファイル名情報を受け取るFILE_NAMES_INFORMATION構造体へのポインター。

[in] ExpandComponentNameLength

ExpandComponentName パラメーターが指すバッファーの長さ (バイト単位)。

[in] Flags

名前正規化フラグ。 FLTFL_NORMALIZE_NAME_CASE_SENSITIVEは、正規化する名前で大文字と小文字が区別されることを指定します。 FLTFL_NORMALIZE_NAME_DESTINATION_FILE_NAMEは、 FltGetDestinationFileNameInformation ルーチン呼び出しを処理するためにコールバック ルーチンが呼び出されたことを指定します。 FLTFL_NORMALIZE_NAME_DESTINATION_FILE_NAME フラグが設定されている場合、 FileObject は、IRP_MJ_SET_INFORMATION操作のターゲットであるファイル/ディレクトリを表します。 FLTFL_NORMALIZE_NAME_DESTINATION_FILE_NAME フラグが設定されていない場合、 FileObject は、名前が要求されているファイル/ディレクトリを表します。

[in, out] NormalizationContext

同じファイル名パス内の残りのコンポーネントを正規化するために行われる、このコールバック ルーチンへの後続の呼び出しで渡されるミニフィルター ドライバーによって提供されるコンテキスト情報へのポインター。

戻り値

このコールバック ルーチンは、STATUS_SUCCESSまたは適切な NTSTATUS 値を返します。 Component パラメーターが指定する名前コンポーネントが ParentDirectory パラメーターが指定する親ディレクトリに存在しない場合、このコールバック ルーチンはSTATUS_NO_SUCH_FILEを返す必要があります。 このコールバック ルーチンが親ディレクトリにIRP_MN_QUERY_DIRECTORY (FileNamesInformation) 要求を発行すると、ファイル システムは正しい状態コードを返します。 このような状況では、このコールバックは、ファイル システムが返す状態コードを返すだけです。

注釈

フィルター マネージャーの名前キャッシュのファイル名を提供するミニフィルター ドライバーは、ミニフィルター ドライバーの NormalizeNameComponentExCallback コールバック ルーチンとしてPFLT_NORMALIZE_NAME_COMPONENT_EX型のルーチンを登録できます。

NormalizeNameComponentExCallback コールバック ルーチンと NormalizeNameComponentCallback コールバック ルーチン (型PFLT_NORMALIZE_NAME_COMPONENT) の主な違いは、NormalizeNameComponentExCallback コールバック ルーチンが追加の FileObject パラメーターをサポートしていることです。 ファイル オブジェクト (FileObject) は、ミニフィルター ドライバーが IoGetTransactionParameterBlock ルーチンを呼び出すことによって、ファイル/ディレクトリが参加している操作のTXN_PARAMETER_BLOCK構造体を取得するために使用できます。 ミニフィルター ドライバーでは、TXN_PARAMETER_BLOCK構造体を使用して、このファイル オブジェクトが参加しているトランザクションのコンテキストで独自の作成要求を発行できます。

このコールバック ルーチンを登録するために、ミニフィルター ドライバーは、PFLT_NORMALIZE_NAME_COMPONENT_EX型のルーチンのアドレスを、ミニフィルター ドライバーが FltRegisterFilter にパラメーターとして渡すFLT_REGISTRATION構造体の NormalizeNameComponentExCallback メンバーに格納します。

フィルター マネージャーは、このコールバック ルーチンを呼び出して、ミニフィルター ドライバーの名前が変更されたファイル名パス内のコンポーネントの正規化された名前をミニフィルター ドライバーに照会します。 ファイル名パスにこのようなコンポーネントが複数含まれている場合、フィルター マネージャーは、パス内のすべてのコンポーネントを正規化するプロセスで、このコールバック ルーチンを複数回呼び出すことができます。 ミニフィルター ドライバーは 、NormalizationContext パラメーターを使用して、このコールバック ルーチンの後続の呼び出しにコンテキスト情報を渡すことができます。

ミニフィルター ドライバーで NormalizationContext パラメーターを使用する場合は、正規化コンテキスト クリーンアップ コールバック ルーチンも登録する必要があります。 詳細については、 PFLT_NORMALIZE_CONTEXT_CLEANUPのリファレンス エントリを参照してください。

要件

要件
対象プラットフォーム デスクトップ
Header fltkernel.h (Fltkernel.h を含む)
IRQL PASSIVE_LEVEL

こちらもご覧ください

FILE_NAMES_INFORMATION

FLT_REGISTRATION

FltGetDestinationFileNameInformation

FltRegisterFilter

IRP_MJ_SET_INFORMATION

IoGetTransactionParameterBlock

PFLT_GENERATE_FILE_NAME

PFLT_NORMALIZE_CONTEXT_CLEANUP

PFLT_NORMALIZE_NAME_COMPONENT

TXN_PARAMETER_BLOCK

UNICODE_STRING