次の方法で共有


FltGetTunneledName 関数 (fltkernel.h)

FltGetTunneledName ルーチンは、FltGetFileNameInformation、fltGetFileNameInformationUnsafe、または FltGetGetDestinationFileNameInformation呼び出してファイルに対して返された正規化された名前を指定して、ファイルのトンネル名を取得します。

構文

NTSTATUS FLTAPI FltGetTunneledName(
  [in]  PFLT_CALLBACK_DATA         CallbackData,
  [in]  PFLT_FILE_NAME_INFORMATION FileNameInformation,
  [out] PFLT_FILE_NAME_INFORMATION *RetTunneledFileNameInformation
);

パラメーター

[in] CallbackData

I/O 操作 (FLT_CALLBACK_DATA) のコールバック データ構造体へのポインター。 このパラメーターは必須であり、NULLすることはできません。

[in] FileNameInformation

FltGetFileNameInformation、FltGetFileNameInformationUnsafe、またはファイルの FltGetDestinationFileNameInformation を する前の呼び出しによって返された正規化された名前情報を含む FLT_FILE_NAME_INFORMATION 構造体へのポインター。

[out] RetTunneledFileNameInformation

トンネリングされたファイル名を含む新しく割り当てられた構造体のアドレスを受け取る呼び出し元によって割り当てられた変数へのポインター。 トンネル名が見つからない場合、この変数は NULL受け取ります。 このパラメーターは必須であり、入力時に NULL することはできません。

戻り値

FltGetTunneledName 、トンネリングされた名前が見つかった場合、またはファイルのトンネル名がない場合にSTATUS_SUCCESSを返します。 それ以外の場合は、次のような NTSTATUS 値を返します。

リターン コード 形容
STATUS_INSUFFICIENT_RESOURCES FltGetTunneledName プール割り当てエラーが発生しました。 これはエラー コードです。

備考

NTFS や FAT などのファイル システムでは、ボリュームごとのトンネル キャッシュを使用して、名前変更、リンク、または削除されるファイルのファイル名やその他のメタデータを簡単に保持します。 ファイル名のトンネリングにより、FltGetFileNameInformation、fltGetFileNameInformationUnsafe、または FltGetDestinationFileNameInformation への事前操作呼び出しによって返される正規化されたファイル名情報の最終コンポーネントが無効になる可能性があります。

ミニフィルター ドライバーが、作成 (IRP_MJ_CREATE) の事前操作コールバック ルーチン (PFLT_PRE_OPERATION_CALLBACK) で正規化されたファイル名情報を取得する場合、FILE_INFORMATION_CLASS が FileLinkInformationに設定されたハード リンク (IRP_MJ_SET_INFORMATION)、または名前変更操作 (FILE_INFORMATION_CLASSが FileRenameInformationに設定 IRP_MJ_SET_INFORMATION) その後のコールバック ルーチン (PFLT_POST_OPERATION_CALLBACK) から FltGetTunneledName を呼び出して、ファイルの正しいファイル名情報を取得する必要があります。

正規化されたファイル名情報のみがトンネリングの影響を受けます。 フィルター マネージャーでは、トンネリングによって短い名前が長い名前に変更される可能性があるため、作成、ハード リンク、または名前変更操作が実際に行われるまで、最終的なコンポーネントを正規化することはできません。 したがって、ミニフィルター ドライバーは、操作後コールバック ルーチンから FltGetTunneledName を呼び出して、事前操作コールバック ルーチンで取得された正規化されたファイル名情報が有効かどうかを判断する必要があります。

正規化されたファイル名の情報の詳細については、FLT_FILE_NAME_INFORMATIONを参照してください。

短いファイル名または開いているファイル名の情報のみを取得するミニフィルター ドライバーは、FltGetTunneledName呼び出さないでください。

FltGetFileNameInformation、fltGetFileNameInformationUnsafe、または preoperation コールバック ルーチンで FltGetDestinationFileNameInformation を 呼び出した後、 ミニフィルター ドライバーは、返された FileNameInformation ポインターをプリ操作コールバック ルーチンの CompletionContext 構造体に格納する必要があります。これにより、事後処理コールバックは、このポインターを FileNameInformation パラメーターで FltGetTunneledName渡すことができます。

手記

ファイル名トンネリングは、この方法で作成、ハード リンク、名前変更の操作にのみ影響します。 読み取りと書き込みなど、他の I/O 操作には影響しません。

次のペアの操作により、ファイル名 名前 トンネリングが発生する可能性があります。

  • delete(name)/create(name)
  • delete(name)/rename(source, name)
  • rename(name, newname)/create(name)
  • rename(name, newname)/rename(source, name)

ファイルのトンネル名が見つからない場合、RetTunneledFileNameInformation パラメーターは NULL受け取ります。

FltGetTunneledName正常に呼び出された後、呼び出し元は、fltReleaseFileNameInformation呼び出して不要になったときに、RetTunneledFileNameInformation を解放し、FileNameInformation ポインターを します。

FltGetTunneledName は、ミニフィルター ドライバーのIRP_MJ_CREATEまたはIRP_MJ_SET_INFORMATIONのポスト操作コールバック ルーチンからのみ呼び出す必要があります。 他 種類の I/O 操作に対して、操作後コールバック ルーチンから FltGetTunneledName を呼び出すか、プリ操作コールバック ルーチンから呼び出すことは、プログラミング エラーです。

呼び出し元は、RetTunneledFileNameInformation パラメーターで返される構造体の内容を変更しないでください。この構造体はフィルター マネージャーによってキャッシュされるため、すべてのミニフィルター ドライバーで使用できます。

ファイル トンネリングを使用すると、ファイル システムに依存するプログラムとの互換性により、ファイルメタ情報を短期間保持できます。たとえば、安全な保存プロセスの場合などです。 トンネリングでは、ファイルの長い名前と短い名前 (8.3) の間の関連付けが保持されます。 ディレクトリからファイル名を削除すると (名前の変更または削除)、その短い名前と長い名前のペアと作成時間がトンネル キャッシュに保存され、削除された名前でキーが設定されます。 名前がディレクトリに追加されると (名前の変更または作成)、キャッシュが検索され、復元する情報があるかどうかを判断します。 キャッシュは、ディレクトリのインスタンスごとに有効です。 ディレクトリが削除されると、そのキャッシュが削除されます。

必要条件

要件 価値
ターゲット プラットフォーム の 万国
ヘッダー fltkernel.h (Fltkernel.h を含む)
ライブラリ FltMgr.lib
DLL Fltmgr.sys
IRQL <= APC_LEVEL

関連項目

FLT_CALLBACK_DATA

FLT_FILE_NAME_INFORMATION

FltGetDestinationFileNameInformation の

FltGetFileNameInformation の

FltGetFileNameInformationUnsafe の

FltParseFileNameInformation の

FltReferenceFileNameInformation の

FltReleaseFileNameInformation の

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK