PFLT_GENERATE_FILE_NAME コールバック関数 (fltkernel.h)
フィルター マネージャーの名前キャッシュのファイル名を提供するミニフィルター ドライバーは、ミニフィルター ドライバーの GenerateFileNameCallback ルーチンとしてPFLT_GENERATE_FILE_NAME型のルーチンを登録できます。
構文
PFLT_GENERATE_FILE_NAME PfltGenerateFileName;
NTSTATUS PfltGenerateFileName(
[in] PFLT_INSTANCE Instance,
[in] PFILE_OBJECT FileObject,
[in, optional] PFLT_CALLBACK_DATA CallbackData,
[in] FLT_FILE_NAME_OPTIONS NameOptions,
[out] PBOOLEAN CacheFileNameInformation,
[out] PFLT_NAME_CONTROL FileName
)
{...}
パラメーター
[in] Instance
このコールバック ルーチンが登録されているミニフィルター ドライバー インスタンスの不透明なインスタンス ポインター。
[in] FileObject
名前が要求されているファイルのファイル オブジェクトへのポインター。
[in, optional] CallbackData
この名前が要求されている操作のコールバック データ構造へのポインター。 FltGetFileNameInformationUnsafe を呼び出してファイルの名前を取得する場合、このパラメーターは NULL です。
[in] NameOptions
この ファイル名情報クエリの名前の形式、クエリ メソッド、フラグを指定する値をFLT_FILE_NAME_OPTIONSします。
[out] CacheFileNameInformation
この名前をキャッシュできるかどうかを指定するブール値へのポインター。 名前をキャッシュできる場合は、出力時に TRUE に 設定します。それ以外の場合は FALSE に設定します。
[out] FileName
出力時にファイル名を受け取るフィルター マネージャーによって割り当てられた FLT_NAME_CONTROL 構造体へのポインター。
戻り値
このコールバック ルーチンは、STATUS_SUCCESSまたは適切な NTSTATUS 値を返します。
注釈
フィルター マネージャーの名前キャッシュのファイル名を提供するミニフィルター ドライバーは、ミニフィルター ドライバーの GenerateFileNameCallback ルーチンとしてPFLT_GENERATE_FILE_NAME型のルーチンを登録できます。
このコールバック ルーチンを登録するために、ミニフィルター ドライバーは、ミニフィルター ドライバーが FltRegisterFilter にパラメーターとして渡すFLT_REGISTRATION構造体の GenerateFileNameCallback メンバーにPFLT_GENERATE_FILE_NAME型のルーチンのアドレスを格納します。
フィルター マネージャーはこのコールバック ルーチンを呼び出して、ミニフィルター ドライバーがミニフィルター ドライバー インスタンス スタック内のその上にある他のミニフィルター ドライバーによるファイル名要求をインターセプトできるようにします。 このコールバック ルーチンと PFLT_NORMALIZE_NAME_COMPONENT コールバック ルーチンを使用して、ミニフィルター ドライバーは独自のファイル名情報を提供できます。
要求されているファイル名の形式を確認するには、NameOptions パラメーターで FltGetFileNameFormat を呼び出します。
Windows 8より前では、このコールバック ルーチンは、開かれたファイル名と短いファイル名に対してのみ呼び出されます。 フィルター マネージャーは、正規化されたファイル名の要求を受け取ると、このコールバック ルーチンを呼び出して、開かれたファイル名を要求します。 次に、ミニフィルター ドライバーの PFLT_NORMALIZE_NAME_COMPONENT コールバックを呼び出して、ファイル名の各コンポーネントを正規化します。
Windows 8以降、このコールバック ルーチンは正規化された名前にも呼び出されます。 フィルター マネージャーは、正規化されたファイル名の要求を受信すると、 NameOptions パラメーターで指定されたFLT_FILE_NAME_NORMALIZEDを使用してこのコールバック ルーチンを呼び出します。 ミニフィルターがこのコールバックからSTATUS_SUCCESSを返した場合、ミニフィルターの PFLT_NORMALIZE_NAME_COMPONENT コールバックは呼び出されません。 ミニフィルターがエラー コード (STATUS_NOT_SUPPORTED など) を返した場合、フィルター マネージャーはこのコールバック ルーチンを再度呼び出し、開いているファイル名を要求します。 フィルター マネージャーは、ミニフィルター ドライバーの PFLT_NORMALIZE_NAME_COMPONENT コールバックを呼び出して、ファイル名の各コンポーネントを正規化します。
このコールバック ルーチンが呼び出されると、ミニフィルター ドライバーは、ファイル システムのファイル名情報に基づいて、独自のファイル名情報を生成します。 ファイル システムのファイル名情報を取得するには、 FltGetFileNameInformation、 FltGetFileNameInformationUnsafe、または FltGetDestinationFileNameInformation を呼び出します。
開かれたファイル名の場合、生成されたファイル名情報にはボリューム情報が含まれている必要があります。 リモート ファイルの場合は、共有情報も含める必要があります。
リモート ファイルの開かれたファイル名の例を次に示します。
\Device\LanManRedirector\MyServer\MyShare\Docume~1\MyUser\My Documents\TestRe~1.txt:stream1
ファイル名の形式の詳細については、 FLT_FILE_NAME_INFORMATION および FltParseFileNameInformation のリファレンス エントリを参照してください。
ファイル名情報を生成した後、ミニフィルター ドライバーは FltCheckAndGrowNameControl を呼び出して、FileName パラメーターが指すFLT_NAME_CONTROL構造体に、生成されたファイル名を保持するのに十分な大きさの名前バッファーが含まれているかどうかをチェックする必要があります。 名前バッファーが小さすぎる場合は、 FltCheckAndGrowNameControl によって大きなバッファーに置き換えられます。 その後、ミニフィルター ドライバーはファイル名情報を名前バッファーに格納し、 を返します。
要件
要件 | 値 |
---|---|
対象プラットフォーム | デスクトップ |
Header | fltkernel.h (Fltkernel.h を含む) |
IRQL | PASSIVE_LEVEL |
こちらもご覧ください
FltGetDestinationFileNameInformation
FltGetFileNameInformationUnsafe
FltPurgeFileNameInformationCache