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 値を返します。
リターン コード | 説明 |
---|---|
|
FileObject パラメーターが指すファイル オブジェクトは、現在開いていません。 これはエラー コードです。 |
|
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 (「解説」を参照) |
こちらもご覧ください
FltGetDestinationFileNameInformation