次の方法で共有


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の参照エントリを参照してください。

必要条件

要件 価値
ターゲット プラットフォーム デスクトップ
ヘッダー 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