FltGetFileNameInformation 関数 (fltkernel.h)
FltGetFileNameInformation ルーチンは、ファイルまたはディレクトリの名前情報を返します。
構文
NTSTATUS FLTAPI FltGetFileNameInformation(
[in] PFLT_CALLBACK_DATA CallbackData,
[in] FLT_FILE_NAME_OPTIONS NameOptions,
[out] PFLT_FILE_NAME_INFORMATION *FileNameInformation
);
パラメーター
[in] CallbackData
I/O 操作のコールバック データ構造である FLT_CALLBACK_DATA 構造体へのポインター。 このパラメーターは必須であり、NULL することはできません。
[in] NameOptions
返される名前情報の形式とフィルター マネージャーが使用するクエリ メソッドを指定するフラグを含む FLT_FILE_NAME_OPTIONS 値。 呼び出し元には、名前形式フラグとクエリ メソッド フラグを含める必要があります。 名前プロバイダーのミニフィルター ドライバーで追加のフラグを使用して、名前クエリ オプションを指定できます。 このパラメーターは必須であり、NULL することはできません。
ファイル名形式のフラグ値を次に示します。 次のいずれかのフラグのみを指定できます。 これらの形式の説明については、FLT_FILE_NAME_INFORMATIONを参照してください。
名前書式フラグの値 | 意味 |
---|---|
FLT_FILE_NAME_NORMALIZED | FileNameInformation パラメーターは、ファイルの正規化された名前を含む構造体のアドレスを受け取ります。 |
FLT_FILE_NAME_OPENED | FileNameInformation パラメーターは、ファイルを開いたときに使用された名前を含む構造体のアドレスを受け取ります。 |
FLT_FILE_NAME_SHORT | FileNameInformation パラメーターは、ファイルの短い (8.3) 名を含む構造体のアドレスを受け取ります。 短い名前は最大 8 文字で構成され、その直後にピリオドが続き、さらに 3 文字まで続きます。 ファイルの短い名前には、ボリューム名、ディレクトリ パス、またはストリーム名は含まれません。 事前作成パスでは無効です。 |
ファイル名クエリ メソッドのフラグ値を次に示します。 次のいずれかのフラグのみを指定できます。
Query メソッドのフラグ値 | 意味 |
---|---|
FLT_FILE_NAME_QUERY_DEFAULT | 現在、ファイル名をファイル システムに照会しても安全でない場合は、FltGetFileNameInformation 何も行いません。 それ以外の場合は、FltGetFileNameInformation ファイル名情報をフィルター マネージャーの名前キャッシュに照会します。 名前がキャッシュに見つからない場合は、FltGetFileNameInformation ファイル システムに対してクエリを実行し、結果をキャッシュします。 |
FLT_FILE_NAME_QUERY_CACHE_ONLY | FltGetFileNameInformation 、フィルター マネージャーの名前キャッシュに対してファイル名情報を照会します。 FltGetFileNameInformation は、ファイル システムに対してクエリを実行しません。 |
FLT_FILE_NAME_QUERY_FILESYSTEM_ONLY | FltGetFileNameInformation ファイル名情報をファイル システムに照会します。 FltGetFileNameInformation フィルター マネージャーの名前キャッシュに対してクエリを実行せず、ファイル システム クエリの結果をキャッシュしません。 |
FLT_FILE_NAME_QUERY_ALWAYS_ALLOW_CACHE_LOOKUP | FltGetFileNameInformation 、フィルター マネージャーの名前キャッシュに対してファイル名情報を照会します。 名前がキャッシュに見つからず、現在安全に実行できる場合は、FltGetFileNameInformation ファイル名情報をファイル システムに照会し、結果をキャッシュします。 |
名前プロバイダーのミニフィルターでは、次のフラグを使用して、ファイル名の操作のプロパティを指定します。
Name Provider Flag Value | 意味 |
---|---|
FLT_FILE_NAME_REQUEST_FROM_CURRENT_PROVIDER | 名前プロバイダーのミニフィルターでは、このフラグを使用して、名前クエリ要求をスタック内の下位の名前プロバイダーが満たすのではなく、名前クエリ要求をそれ自体 (名前プロバイダー ミニフィルター) にリダイレクトするように指定できます。 |
FLT_FILE_NAME_DO_NOT_CACHE | このフラグは、このクエリから取得した名前をキャッシュしないことを示します。 名前プロバイダーのミニフィルターは、中間クエリを実行して名前を生成する場合に、このフラグを使用します。 |
FLT_FILE_NAME_ALLOW_QUERY_ON_REPARSE | 名前プロバイダーのミニフィルターでは、このフラグを使用して、STATUS_REPARSEが返された場合でも、作成後のパスの名前に対してクエリを実行しても安全であることを指定できます。 FileObject->FileName フィールドが変更されていないことを確認するのは呼び出し元の責任です。 マウント・ポイントまたはシンボリック・リンクの再解析ポイントでは、このフラグを使用しないでください。 |
[out] FileNameInformation
ファイル名情報を含むシステム割り当て FLT_FILE_NAME_INFORMATION 構造体のアドレスを受け取る呼び出し元割り当て変数へのポインター。 FltGetFileNameInformation ページ プールからこの構造体を割り当てます。 このパラメーターは必須であり、NULL することはできません。
戻り値
名前情報が正常に返された場合、FltGetFileNameInformation はSTATUS_SUCCESSを返します。 それ以外の場合は、次のいずれかの適切な NTSTATUS 値を返します。
リターン コード | 形容 |
---|---|
|
FltGetFileNameInformation 、フィルター マネージャーの名前キャッシュからクエリを満たすことができない場合、次の状況ではファイル名の情報を取得できません。
FltGetFileNameInformation は、事前作成パス内のファイルの短い名前を取得できません。 STATUS_FLT_INVALID_NAME_REQUESTはエラー コードです。 |
|
FltGetFileNameInformation プール割り当てエラーが発生しました。 これはエラー コードです。 |
|
次のいずれかの無効なパラメーターが渡されたときに返されます。
|
|
ファイル名の情報が名前キャッシュに見つからず、NameOptions FLT_FILE_NAME_QUERY_CACHE_ONLYが含まれています。
-又は- NameOptions にFLT_FILE_NAME_QUERY_ALWAYS_ALLOW_CACHE_LOOKUPが含まれており、ファイル名情報をファイル システムから照会できない場合、ファイル名情報は名前キャッシュに見つかりません。 NameOptions にFLT_FILE_NAME_QUERY_FILESYSTEM_ONLYが設定された FltGetFileNameInformation を する追加の呼び出し は、ファイル名の情報を返す場合があります。 |
|
事前作成中に照会されるファイルは、親ディレクトリとは異なるボリューム上にあります。 このエラーは、正規化された名前クエリで返されます。ファイルは、別のボリュームに解決されたジャンクションまたはシンボリック リンクでした。 |
|
ユーザーがファイル ID でファイルを開いたが、パス全体に対する走査特権がない場合、FltGetFileNameInformation は、この戻り値で失敗します。
STATUS_ACCESS_DENIEDはエラー コードです。 -又は- ファイルは、すべてのアクセスが拒否されたシステム ファイルです。 |
備考
FltGetFileNameInformation は、CallbackData によって記述された操作のターゲットであるファイルまたはディレクトリの要求された名前情報指定した形式で返します。 ファイルまたはディレクトリをファイル システムでまだ開く必要はありません。
事前作成操作の場合、CallbackData->Iopb->OperationFlags メンバーにSL_OPEN_TARGET_DIRECTORYビットごとのフラグが含まれている場合、FltGetFileNameInformation は、指定されたファイルの包含 (親) ディレクトリの名前を返します。 この名前は、作成操作が開く実際のパスです。
FltGetFileNameInformation によって返されるFLT_FILE_NAME_INFORMATION構造体の内容解析するには、FltParseFileNameInformation 呼び出します。 (ファイル名の形式の詳細については、FLT_FILE_NAME_INFORMATIONを参照してください)。
FltGetFileNameInformation 正常に呼び出された後、呼び出し元は、ポインターが不要になったときに、FileNameInformation パラメーターで返されたポインターを解放する必要があります。 呼び出し元は、fltReleaseFileNameInformation 呼び出すことによってこれを行います。
呼び出し元は、FileNameInformation パラメーターで返される構造体の内容を変更しないでください。この構造体はフィルター マネージャーによってキャッシュされるため、すべてのミニフィルター ドライバーで使用できます。
FltGetFileNameInformation 、開かれた名前を取得する作成操作の事前操作コールバック ルーチンで呼び出された場合、開いているファイルへのパスがボリューム上に存在しない場合でも、FltGetFileNameInformation 成功します。
作成操作 fltGetFileNameInformation が、正規化された名前を取得するための事前操作コールバック ルーチンで呼び出された場合、開いているファイルへのパスの最後のコンポーネントがボリューム上に存在しない場合でも、FltGetFileNameInformation は成功します。
手記
リモート ボリュームで正規化されたファイル名のクエリを実行するためのサーバー メッセージ ブロック (SMB) のサポートは、Windows 10 のバージョンによって異なります。 詳細については、MS-SMB2 プロトコルの を参照してください。
作成、ハード リンク、および名前変更の操作では、ファイル名トンネリングによって、ミニフィルター ドライバーが事前操作コールバック ルーチンで取得する正規化されたファイル名情報の最終的なコンポーネントが無効になる可能性があります。 ミニフィルター ドライバーは、FltGetFileNameInformationなどのルーチンを呼び出すことによって、事前操作コールバック (PFLT_PRE_OPERATION_CALLBACK) ルーチンで正規化されたファイル名情報を取得する場合は、その後のコールバック (PFLT_POST_OPERATION_CALLBACK) ルーチンから FltGetTunneledName を呼び 出して、ファイルの正しいファイル名情報を取得する必要があります。
Windows 8.1 以前の場合、fltGetFileNameInformation には、フィルターの事前作成コールバックから呼び出された場合にのみストリームの種類 含めることができます。 ファイルの既定のストリームとメタデータ ストリームを区別するには、事前作成操作でこの呼び出しを行う必要があります。 結果のストリームの種類は、ファイルの有効期間中も有効なままです。
Windows 8 より前のバージョンでは、フィルター マネージャーはファイル パスの各コンポーネントの名前情報を収集することで、ファイルまたはディレクトリの正規化された名前を取得しました。 これには、完全なパスをコンパイルするために、ファイル システムに対する複数のクエリが必要です。 Windows 8 以降では、ローカル ファイル システムは fileNormalizedNameInformation ファイル情報クラス をサポートしており、正規化された名前を取得するために必要なクエリは 1 つだけです。 リモート ファイル システムは、fileNormalizedNameInformation ファイル情報クラス をサポートしていない可能性があります。 この場合でも、正規化された名前をアセンブルするには、ファイル パスの各コンポーネントのクエリが必要です。 特定のネットワーク条件下では、フル ネーム クエリの完了にかなりの時間が必要になる場合があります。
正規化されたファイル名の情報の詳細については、FLT_FILE_NAME_INFORMATIONを参照してください。
手記
ファイル名トンネリングは、この方法で作成、ハード リンク、名前変更の操作にのみ影響します。 読み取りと書き込みなど、他の I/O 操作には影響しません。
次のペアの操作により、ファイル名 名前 トンネリングが発生する可能性があります。
- delete (name)/create(name)
- delete (name)/rename(source, name)
- rename (name, newname)/create(name)
- rename (name, newname)/rename(source,name)
必要条件
要件 | 価値 |
---|---|
ターゲット プラットフォーム の | 万国 |
ヘッダー | fltkernel.h (Fltkernel.h を含む) |
ライブラリ | FltMgr.lib |
DLL | Fltmgr.sys |
IRQL | <= APC_LEVEL (戻り値を参照) |
関連項目
FltGetDestinationFileNameInformation の
FltGetFileNameInformationUnsafe の
FltGetTunneledName を する
FltParseFileNameInformation の
FltReferenceFileNameInformation の
FltReleaseFileNameInformation の
IoGetTopLevelIrp の