次の方法で共有


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の事後操作コールバック ルーチン内。

  • すべての APCs が無効になっている場合。つまり、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を参照してください。

必要条件

要件 価値
ターゲット プラットフォーム 万国
ヘッダー fltkernel.h (Fltkernel.h を含む)
ライブラリ 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