次の方法で共有


FLT_FILE_NAME_INFORMATION 構造体 (fltkernel.h)

FLT_FILE_NAME_INFORMATION構造体には、ファイル名の情報が含まれています。

構文

typedef struct _FLT_FILE_NAME_INFORMATION {
  USHORT                     Size;
  FLT_FILE_NAME_PARSED_FLAGS NamesParsed;
  FLT_FILE_NAME_OPTIONS      Format;
  UNICODE_STRING             Name;
  UNICODE_STRING             Volume;
  UNICODE_STRING             Share;
  UNICODE_STRING             Extension;
  UNICODE_STRING             Stream;
  UNICODE_STRING             FinalComponent;
  UNICODE_STRING             ParentDir;
} FLT_FILE_NAME_INFORMATION, *PFLT_FILE_NAME_INFORMATION;

メンバー

Size

FLT_FILE_NAME_INFORMATION構造体のサイズ (バイト単位)。

NamesParsed

FltParseFileNameInformation によって Name 文字列から解析された名前コンポーネントを示すフラグのビットマスク。 Name 文字列を解析するときに、FltParseFileNameInformation は、コンポーネントが文字列内に存在することが検出されたかどうかに関係なく、各コンポーネントにこのフラグを設定することに注意してください。 これらの値は、OR 演算子を使用して組み合わせることができます。

フラグ コンポーネント
FLTFL_FILE_NAME_PARSED_FINAL_COMPONENT FinalComponent
FLTFL_FILE_NAME_PARSED_EXTENSION 拡張子
FLTFL_FILE_NAME_PARSED_STREAM Stream
FLTFL_FILE_NAME_PARSED_PARENT_DIR ParentDir

Format

Name メンバーに格納されている名前情報の形式。 このメンバーには、次のいずれかの値を指定できます。 (これらの形式の説明については、次の「解説」セクションを参照してください)。

意味
FLT_FILE_NAME_NORMALIZED Name メンバーには、ファイルの正規化された名前が含まれています。
FLT_FILE_NAME_OPENED Name メンバーには、ファイルを開いたときに使用された名前が含まれます。 この名前の文字列は正規化されません。
FLT_FILE_NAME_SHORT Name メンバーには、ファイルの短い (8.3) 名が含まれています。 ファイルの短い名前には、ボリューム名、ディレクトリ パス、またはストリーム名は含まれません。 この名前の文字列は正規化されません。

Name

UNICODE_STRINGFormat メンバーで 指定された形式のファイル名文字列を含む構造体です。

Volume

name 文字列から 解析されたボリューム名を含む構造体をUNICODE_STRINGします。 Format がFLT_FILE_NAME_SHORTの場合、Volume.Length は 0 です。

Share

UNICODE_STRINGリモート ファイルの Name 文字列から解析されたネットワーク共有名を含む構造体です。 Format がFLT_FILE_NAME_SHORTの場合、Share.Length は 0 です。

Extension

name 文字列から解析された拡張子を含む構造体をUNICODE_STRINGします。 拡張子が見つからない場合、 FltParseFileNameInformationExtension.Length を 0 に設定します。

Stream

name 文字列から 解析されたストリーム名を含む構造体をUNICODE_STRINGします。 ストリーム名が見つからない場合、または Format がFLT_FILE_NAME_SHORTの場合、FltParseFileNameInformationStream設定します。長さは 0 です。

FinalComponent

name 文字列から 解析された最終的な名前コンポーネントを含む構造体をUNICODE_STRINGします。 最終的なコンポーネント名が見つからない場合、または Format がFLT_FILE_NAME_SHORT場合、 FltParseFileNameInformationは FinalComponent.Length を 0 に設定します。

ParentDir

UNICODE_STRING FltParseFileNameInformation によって Name 文字列から解析された親ディレクトリ名を含む構造体です。 親ディレクトリ名が見つからない場合、または Format がFLT_FILE_NAME_SHORTの場合、 FltParseFileNameInformationParentDir.Length を 0 に設定します。

注釈

Name メンバーには、次のいずれかが含まれます。

  • ファイルの正規化された名前
  • ファイルの開かれた名前
  • ファイルの短い名前
次のすべてが当てはまる場合、ファイル名は 正規化されたもの と見なされます。
  • ユーザーがファイル ID でファイルを開いたが、パス全体に対する走査特権がない場合を除き、ボリューム名を含むファイルの完全なディレクトリ パスが含まれます。 (詳細については、「 FltGetFileNameInformation」を参照してください)。
  • ボリューム名は、ボリュームの非永続デバイス オブジェクト名 ("\Device\HarddiskVolume1" など) です。
  • すべての短い名前は、同等の長い名前に展開されます。
  • 末尾の ":$DATA" または "::$DATA" 文字列は、ストリーム名から削除されます。
  • すべてのマウント ポイントが解決されます。
ローカル ファイルの正規化されたファイル名の例を次に示します。
\Device\HarddiskVolume1\Documents and Settings\MyUser\My Documents\Test Results.txt:stream1

リモート ファイルの正規化されたファイル名の例を次に示します。

\Device\LanManRedirector\MyServer\MyShare\Documents and Settings\MyUser\My Documents\Test Results.txt:stream1

ファイルの 開いた名前 は、ファイルを開いたときに使用された名前です。 正規化された名前と同様に、ボリューム名を含むファイルの完全なディレクトリ パスが含まれます。 これは、次の点で正規化された名前とは異なります。

  • ファイルのディレクトリ パスには、短い名前と長い名前を含めることができます。
  • 末尾の ":$DATA" 文字列と "::$DATA" 文字列はストリーム名から削除されません。
  • マウント ポイントは解決されません。
ローカル ファイルの開かれたファイル名の例を次に示します。
\Device\HarddiskVolume1\Docume~1\MyUser\MYDOCU~1\Test Results.txt:stream1:$DATA

リモート ファイルの開かれたファイル名の例を次に示します。

\Device\LanManRedirector\MyServer\MyShare\Documents and Settings\MyUser\My Documents\Test Results.txt:stream1

ファイルの 短い名前 は、ファイル名の最後のコンポーネントの短い (8.3) 名です。 ファイルを開いたときに生成されるため、開いていないファイル オブジェクトでは短い名前を使用できません。また、作成ディスパッチ ("事前作成") パスでは使用できません。 NTFS ストリーム ファイル オブジェクトでは使用できません。 開いているすべてのファイルに短いファイル名があるわけではありません。 たとえば、短いファイル名の生成が無効になっている NTFS パーティションでは、短いファイル名を持つファイルはありません。

ファイルの短い名前の例を次に示します。

TestRe~1.txt

ファイルのFLT_FILE_NAME_INFORMATION構造体を取得するには、 FltGetFileNameInformationFltGetFileNameInformationUnsafe、または FltGetDestinationFileNameInformation を呼び出します。 これらのルーチンは、すべてのミニフィルターによって共有されるフィルター マネージャー所有のFLT_FILE_NAME_INFORMATION構造体へのポインターを返します。

メモ これらの構造体はフィルター マネージャーによってキャッシュされ、すべてのミニフィルターで使用できるため、FLT_FILE_NAME_INFORMATION構造体の内容は変更しないでください。 ミニフィルターで何らかの方法でこの情報を変更する必要がある場合は、最初に情報を別のバッファーにコピーする必要があります。
 
NTFS や FAT などのファイル システムでは、ボリュームごとのトンネル キャッシュを使用して、名前変更、リンク、または削除されるファイルのファイル名やその他のメタデータを簡単に保持します。 このファイル名トンネリングにより、FltGetFileNameInformation、FltGetFileNameInformationUnsafe、または FltGetDestinationFileNameInformation への事前操作呼び出しによって返される正規化されたファイル名情報の最終的なコンポーネントが無効になる可能性があります。 ミニフィルターが作成、ハードリンク、または名前変更操作の事前操作コールバック (PFLT_PRE_OPERATION_CALLBACK) ルーチンで正規化されたファイル名情報を取得する場合は、その後操作コールバック (PFLT_POST_OPERATION_CALLBACK) から FltGetTunneledName を呼び出して、ファイルの正しいファイル名情報を取得する必要があります。

多数のUNICODE_STRING構造体が含まれていますが、FLT_FILE_NAME_INFORMATION構造体内のすべてのUNICODE_STRING構造体が 1 つのバッファーを共有するため、FLT_FILE_NAME_INFORMATION構造体はメモリ内の領域をあまり占有しません。

Name 文字列の内容を解析するには、FltParseFileNameInformation を呼び出します。 このルーチンは、この構造体の ExtensionStreamFinalComponentParentDirNamesParsed メンバーの値を設定します。

ミニフィルターは、 FltReleaseFileNameInformation を呼び出して、不要になったときにFLT_FILE_NAME_INFORMATION構造体を解放する役割を担います。

要件

要件
Header fltkernel.h (Fltkernel.h を含む)

こちらもご覧ください

FLT_FILE_NAME_OPTIONS

FltGetDestinationFileNameInformation

FltGetFileNameInformation

FltGetFileNameInformationUnsafe

FltGetTunneledName

FltParseFileName

FltParseFileNameInformation

FltReferenceFileNameInformation

FltReleaseFileNameInformation

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK

UNICODE_STRING