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
标志的位掩码,指示哪些名称组件已通过 FltParseFileNameInformation 从 Name 字符串进行分析。 请注意,在分析 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结构,其中包含 FltParseFileNameInformation 从 Name 字符串分析的父目录名称。 如果未找到父目录名称,或者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结构,请调用 FltGetFileNameInformation、 FltGetFileNameInformationUnsafe 或 FltGetDestinationFileNameInformation。 这些例程返回指向筛选器管理器拥有的FLT_FILE_NAME_INFORMATION结构的指针,该结构由所有微筛选器共享。
尽管它包含许多 UNICODE_STRING 结构,但FLT_FILE_NAME_INFORMATION结构不会占用内存中的太多空间,因为FLT_FILE_NAME_INFORMATION结构中的所有UNICODE_STRING结构共享单个缓冲区。
若要分析 Name 字符串的内容,请调用 FltParseFileNameInformation。 此例程设置此结构的 Extension、Stream、FinalComponent、ParentDir 和 NamesParsed 成员的值。
微筛选器负责调用 FltReleaseFileNameInformation ,以便在不再需要时释放FLT_FILE_NAME_INFORMATION结构。
要求
要求 | 值 |
---|---|
Header | fltkernel.h (包括 Fltkernel.h) |
另请参阅
FltGetDestinationFileNameInformation
FltGetFileNameInformationUnsafe