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

标志的位掩码,这些标志指示哪些名称组件已通过 FltParseFileNameInformationName 字符串进行分析。 请注意,分析 名称 字符串时,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

存储在 名称 成员中的名称信息的格式。 此成员可以是以下值之一。 (有关这些格式的说明,请参阅以下备注部分。

价值 意义
FLT_FILE_NAME_NORMALIZED Name 成员包含文件的规范化名称。
FLT_FILE_NAME_OPENED Name 成员包含打开文件时使用的名称。 此名称字符串未规范化。
FLT_FILE_NAME_SHORT 名称 成员包含文件的短名称(8.3)。 文件的短名称不包括卷名称、目录路径或流名称。 此名称字符串未规范化。

Name

包含文件名字符串的 UNICODE_STRING 结构,格式由 Format 成员指定。

Volume

包含从 名称 字符串分析的卷名称的UNICODE_STRING结构。 如果FLT_FILE_NAME_SHORT FormatVolume.Length 为零。

Share

UNICODE_STRING结构,其中包含从远程文件的 名称 字符串分析的网络共享名称。 如果FLT_FILE_NAME_SHORT Format,则 Share.Length 为零。

Extension

包含从 Name 字符串分析的扩展的UNICODE_STRING结构。 如果未找到扩展,FltParseFileNameInformationExtension.Length 设置为零。

Stream

包含从 Name 字符串分析的流名称的UNICODE_STRING结构。 如果未找到流名称,或者 格式 FLT_FILE_NAME_SHORT,FltParseFileNameInformationStream.Length 设置为零。

FinalComponent

包含从 Name 字符串分析的最终名称组件UNICODE_STRING结构。 如果未找到最终组件名称,或者 格式 FLT_FILE_NAME_SHORT,FltParseFileNameInformation将 finalComponent.Length 设置为零。

ParentDir

UNICODE_STRING结构,该结构包含通过 FltParseFileNameInformationName 字符串分析的父目录名称。 如果未找到父目录名称,或者 格式 FLT_FILE_NAME_SHORT,FltParseFileNameInformation将 parentDir.Length 设置为零。

言论

Name 成员包含以下项之一:

  • 文件的规范化名称
  • 文件打开的名称
  • 文件的短名称
如果以下所有内容均为 true,则文件名被视为 规范化
  • 它包含文件的完整目录路径,包括卷名称,除非用户按文件 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)。 由于该文件在打开时生成,因此短名称不适用于未打开的文件对象,在创建调度(“pre-create”)路径中不可用。 它也不适用于 NTFS 流文件对象。 并非所有打开的文件都有短文件名。 例如,在禁用短文件名生成的 NTFS 分区上,没有文件具有短文件名。

下面是文件的短名称示例:

TestRe~1.txt

若要获取文件的FLT_FILE_NAME_INFORMATION结构,请调用 FltGetFileNameInformationFltGetFileNameInformationUnsafeFltGetDestinationFileNameInformation。 这些例程返回指向所有微型筛选器共享的筛选器管理器拥有FLT_FILE_NAME_INFORMATION结构的指针。

注意 不要修改FLT_FILE_NAME_INFORMATION结构的内容,因为这些结构由筛选器管理器缓存,以便所有微型筛选器都可以使用这些结构。 如果微型筛选器必须以某种方式修改此信息,则应先将信息复制到另一个缓冲区中。
 
文件系统(如 NTFS 和 FAT)使用每卷隧道缓存来简要保留要重命名、链接到或删除的文件的文件名和其他元数据。 此文件名隧道可能导致规范化文件名信息中的最终组件通过预作调用 FltGetFileNameInformationFltGetFileNameInformationUnsafeFltGetDestinationFileNameInformation 失效。 如果微型筛选器检索创建、硬链接或重命名作的预作回调(PFLT_PRE_OPERATION_CALLBACK)例程中的规范化文件名信息,则必须从其后作回调(PFLT_POST_OPERATION_CALLBACK)例程中调用 FltGetTunneledName,以检索文件的正确文件名信息。

尽管它包含大量 UNICODE_STRING 结构,但FLT_FILE_NAME_INFORMATION结构在内存中不占用太多空间,因为FLT_FILE_NAME_INFORMATION结构中的所有UNICODE_STRING结构共享单个缓冲区。

若要分析 名称 字符串的内容,请调用 FltParseFileNameInformation。 此例程设置 ExtensionStreamFinalComponentParentDir的值,以及此结构的 NamesParsed 成员。

微型筛选器负责调用 FltReleaseFileNameInformation,以便在不再需要结构时释放FLT_FILE_NAME_INFORMATION结构。

要求

要求 价值
标头 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