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 字符串进行分析。 请注意,分析 名称 字符串时,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 Format,Volume.Length 为零。
Share
UNICODE_STRING结构,其中包含从远程文件的 名称 字符串分析的网络共享名称。 如果FLT_FILE_NAME_SHORT Format,则 Share.Length 为零。
Extension
包含从 Name 字符串分析的扩展的UNICODE_STRING结构。 如果未找到扩展,FltParseFileNameInformation 将 Extension.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结构,该结构包含通过 FltParseFileNameInformation从 Name 字符串分析的父目录名称。 如果未找到父目录名称,或者 格式 FLT_FILE_NAME_SHORT,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结构共享单个缓冲区。
若要分析 名称 字符串的内容,请调用 FltParseFileNameInformation。 此例程设置 Extension、Stream、FinalComponent、ParentDir的值,以及此结构的 NamesParsed 成员。
微型筛选器负责调用 FltReleaseFileNameInformation,以便在不再需要结构时释放FLT_FILE_NAME_INFORMATION结构。
要求
要求 | 价值 |
---|---|
标头 | fltkernel.h (包括 Fltkernel.h) |
另请参阅
FltGetDestinationFileNameInformation
FltGetFileNameInformationUnsafe