Share via


FltGetFileNameInformationUnsafe 関数 (fltkernel.h)

FltGetFileNameInformationUnsafe ルーチンは、開いているファイルまたはディレクトリの名前情報を返します。

構文

NTSTATUS FLTAPI FltGetFileNameInformationUnsafe(
  [in]           PFILE_OBJECT               FileObject,
  [in, optional] PFLT_INSTANCE              Instance,
  [in]           FLT_FILE_NAME_OPTIONS      NameOptions,
  [out]          PFLT_FILE_NAME_INFORMATION *FileNameInformation
);

パラメーター

[in] FileObject

ファイルまたはディレクトリのファイル オブジェクトへのポインター。 ファイル オブジェクトは現在開いている必要があります。 このパラメーターは必須であり、 NULL に設定することはできません。

[in, optional] Instance

呼び出し元のインスタンス ポインター。 このパラメーターは NULL に設定できます。

[in] NameOptions

返される名前情報の形式と、フィルター マネージャーで使用するクエリ メソッドを指定するフラグを含むFLT_FILE_NAME_OPTIONS値。 このパラメーターは必須であり、 NULL に設定することはできません。

次の表では、名前書式フラグの値について説明します。 指定できるフラグは 1 つだけです。 これらの形式の詳細については、「 FLT_FILE_NAME_INFORMATION」を参照してください。

意味
FLT_FILE_NAME_NORMALIZED FileNameInformation パラメーターは、ファイルの正規化された名前を含む構造体のアドレスを受け取ります。
FLT_FILE_NAME_OPENED FileNameInformation パラメーターは、ファイルを開いたときに使用された名前を含む構造体のアドレスを受け取ります。
FLT_FILE_NAME_SHORT FileNameInformation パラメーターは、ファイルの短い (8.3) 名を含む構造体のアドレスを受け取ります。 短い名前は、最大 8 文字で構成され、その直後にピリオドが続き、さらに 3 文字まで続きます。 ファイルの短い名前には、ボリューム名、ディレクトリ パス、またはストリーム名は含まれません。

次の表では、クエリ メソッドのフラグ値について説明します。 指定できるフラグは 1 つだけです。

意味
FLT_FILE_NAME_QUERY_DEFAULT FltGetFileNameInformationUnsafe は、フィルター マネージャーの名前キャッシュに対してファイル名情報を照会します。 名前がキャッシュに見つからない場合、 FltGetFileNameInformationUnsafe はファイル システムに対してクエリを実行し、結果をキャッシュします。
FLT_FILE_NAME_QUERY_CACHE_ONLY FltGetFileNameInformationUnsafe は、フィルター マネージャーの名前キャッシュに対してファイル名情報を照会します。 FltGetFileNameInformationUnsafe はファイル システムに対してクエリを実行しません。
FLT_FILE_NAME_QUERY_FILESYSTEM_ONLY FltGetFileNameInformationUnsafe は、ファイル名情報をファイル システムに照会します。 FltGetFileNameInformationUnsafe はフィルター マネージャーの名前キャッシュに対してクエリを実行せず、ファイル システム クエリの結果をキャッシュしません。
FLT_FILE_NAME_QUERY_ALWAYS_ALLOW_CACHE_LOOKUP FltGetFileNameInformationUnsafe は、フィルター マネージャーの名前キャッシュに対してファイル名情報を照会します。 名前がキャッシュに見つからず、現在安全な場合、 FltGetFileNameInformationUnsafe はファイル システムに対してファイル名情報を照会し、結果をキャッシュします。

[out] FileNameInformation

システム割り当てFLT_FILE_NAME_INFORMATION構造体のアドレスを受け取る呼び出し元割り当て変数へのポインター。 FltGetFileNameInformationUnsafe は、ページ プールからこの構造体を割り当てます。 この情報が不要になった場合、呼び出し元は FltReleaseFileNameInformation を呼び出して構造体を解放する必要があります。 このパラメーターは必須であり、 NULL に設定することはできません。

戻り値

FltGetFileNameInformationUnsafe は、次のいずれかのSTATUS_SUCCESSまたは適切な NTSTATUS 値を返します。

リターン コード 説明
STATUS_FLT_INVALID_NAME_REQUEST
FileObject パラメーターが指すファイル オブジェクトは、現在開いていません。 これはエラー コードです。
STATUS_INVALID_PARAMETER
FileNameInformation パラメーターに無効な値が渡されました。 これはエラー コードです。

注釈

FltGetFileNameInformationUnsafe ルーチンが用意されているため、そのファイル オブジェクトに対する I/O 操作のコンテキストの外部でファイル オブジェクトの名前を照会できます。それ以外の場合は、FltGetFileNameInformation を呼び出す必要があります。

FltGetFileNameInformation ルーチンとは異なり、FltGetFileNameInformationUnsafe は、ファイル システムに名前情報を照会すると、FLT_FILE_NAME_QUERY_CACHE_ONLY以外のクエリ メソッドのデッドロックが発生する可能性がある、次の種類の状況から呼び出し元を保護しません。

  • ページング I/O パス。

  • 現在のスレッドの TopLevelIrp フィールドが NULL でない場合。 詳細については、「 IoGetTopLevelIrp」を参照してください。

  • IRP_MJ_CLEANUP操作が完了した後。つまり、ポスト クリーンアップ、プリクローズ、またはポストクローズ パス (ターゲット ファイル オブジェクトには FO_CLEANUP_COMPLETE フラグが設定されています)。

  • 次のいずれかの操作の事前操作 (PFLT_PRE_OPERATION_CALLBACK) または事後操作 (PFLT_POST_OPERATION_CALLBACK) コールバック ルーチン。

    • IRP_MJ_ACQUIRE_FOR_CC_FLUSH
    • IRP_MJ_ACQUIRE_FOR_MOD_WRITE
    • IRP_MJ_RELEASE_FOR_CC_FLUSH
    • IRP_MJ_RELEASE_FOR_MOD_WRITE
    • IRP_MJ_RELEASE_FOR_SECTION_SYNCHRONIZATION
  • IRP_MJ_ACQUIRE_FOR_SECTION_SYNCHRONIZATIONの事後操作コールバック ルーチン。

  • すべての APC が無効になっている場合。つまり、 KeAreAllApcsDisabled が TRUE を返す場合です。

Windows Vista/Server 2008 以降の場合、ミニフィルターに DriverEntry ルーチンなどのフィルター インスタンスがまだない場合は、Instance パラメーターに を使用NULLできます。 これにより、 DriverEntry ルーチンはファイル名情報にアクセスできます。 この場合を除き、 NULL インスタンス パラメーターの値はシステムで使用するために予約されています。

作成、ハードリンク、および名前変更の操作では、ファイル名トンネリングによって、ミニフィルター ドライバーがプリ操作コールバック ルーチンで取得する正規化されたファイル名情報の最終的なコンポーネントが無効になる可能性があります。 ミニフィルター ドライバーが FltGetFileNameInformationUnsafe などのルーチンを呼び出すことによって、事前操作コールバック (PFLT_PRE_OPERATION_CALLBACK) ルーチンで正規化されたファイル名情報を取得する場合は、その後のコールバック (PFLT_POST_OPERATION_CALLBACK) から FltGetTunneledName を呼び出して、ファイルの正しいファイル名情報を取得する必要があります。

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

要件

要件
対象プラットフォーム ユニバーサル
Header fltkernel.h (Fltkernel.h を含む)
Library FltMgr.lib
[DLL] Fltmgr.sys
IRQL <= APC_LEVEL (「解説」を参照)

こちらもご覧ください

FLT_FILE_NAME_INFORMATION

FLT_FILE_NAME_OPTIONS

FltGetDestinationFileNameInformation

FltGetFileNameInformation

FltGetTunneledName

FltReferenceFileNameInformation

FltReleaseFileNameInformation

IRP_MJ_CLEANUP

IoGetTopLevelIrp

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK