fltkernel.h) (FLT_FILE_NAME_INFORMATION 结构

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 字符串进行分析。 请注意,在分析 Name 字符串时, FltParseFileNameInformation 会为每个组件设置此标志,无论该组件是否存在于字符串中。 可以使用 OR 运算符组合这些值。

标志 组件
FLTFL_FILE_NAME_PARSED_FINAL_COMPONENT FinalComponent
FLTFL_FILE_NAME_PARSED_EXTENSION 扩展名
FLTFL_FILE_NAME_PARSED_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_STRING 结构,其中包含格式为 Format 成员指定的文件名字符串。

Volume

UNICODE_STRING结构,其中包含从 Name 字符串分析的卷名称。 如果 Format 为 FLT_FILE_NAME_SHORT, 则 Volume.Length 为零。

Share

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

Extension

UNICODE_STRING结构,其中包含从 Name 字符串分析的扩展。 如果未找到任何扩展名, 则 FltParseFileNameInformation 会将 Extension.Length 设置为零。

Stream

UNICODE_STRING结构,其中包含从 Name 字符串分析的流名称。 如果未找到流名称,或者FLT_FILE_NAME_SHORT Format则 FltParseFileNameInformation将Stream。长度为零。

FinalComponent

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

ParentDir

UNICODE_STRING结构,其中包含 FltParseFileNameInformationName 字符串分析的父目录名称。 如果未找到父目录名称,或者FLT_FILE_NAME_SHORT Format则 FltParseFileNameInformation 会将 ParentDir.Length 设置为零。

注解

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) 名称。 由于它是在打开文件时生成的,因此短名称不适用于未打开的文件对象,并且它在创建调度 (“pre-create”) 路径中不可用。 它也不适用于 NTFS 流文件对象。 并非所有打开的文件都有短文件名。 例如,在禁用短文件名生成的 NTFS 分区上,没有文件具有短文件名。

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

TestRe~1.txt

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

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

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

若要分析 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