FLT_TAG_DATA_BUFFER结构 (fltkernel.h)
FLT_TAG_DATA_BUFFER结构包含有关重新分析点标记的信息。
语法
typedef struct _FLT_TAG_DATA_BUFFER {
ULONG FileTag;
USHORT TagDataLength;
USHORT UnparsedNameLength;
union {
struct {
USHORT SubstituteNameOffset;
USHORT SubstituteNameLength;
USHORT PrintNameOffset;
USHORT PrintNameLength;
ULONG Flags;
WCHAR PathBuffer[1];
} SymbolicLinkReparseBuffer;
struct {
USHORT SubstituteNameOffset;
USHORT SubstituteNameLength;
USHORT PrintNameOffset;
USHORT PrintNameLength;
WCHAR PathBuffer[1];
} MountPointReparseBuffer;
struct {
UCHAR DataBuffer[1];
} GenericReparseBuffer;
struct {
GUID TagGuid;
UCHAR DataBuffer[1];
} GenericGUIDReparseBuffer;
};
} FLT_TAG_DATA_BUFFER, *PFLT_TAG_DATA_BUFFER;
成员
FileTag
唯一标识重新分析点的标记。 可以是在 ntifs.h 中定义的 Microsoft 定义的IO_REPARSE_TAG_XXX 值之一,也可以是 ISV 定义的值。
TagDataLength
DataBuffer 成员指向的重新分析数据的大小(以字节为单位)。
UnparsedNameLength
由关联文件对象的 FileName 成员指向的文件名未分析部分的长度(以字节为单位)。 有关 FileName 成员的详细信息,请参阅 FILE_OBJECT。
SymbolicLinkReparseBuffer
当 FileTag IO_REPARSE_TAG_SYMLINK时,可以使用此结构来解释有效负载。
SymbolicLinkReparseBuffer.SubstituteNameOffset
PathBuffer 数组中替换名称字符串的偏移量(以字节为单位)。 请注意,此偏移量必须除以 大小 ( WCHAR) 才能获取数组索引。
SymbolicLinkReparseBuffer.SubstituteNameLength
替换名称字符串的长度(以字节为单位)。 如果此字符串NULL_terminated, 则 SubstituteNameLength 不包含UNICODE_NULL终止符的空间。
SymbolicLinkReparseBuffer.PrintNameOffset
PathBuffer 数组中打印名称字符串的偏移量(以字节为单位)。 请注意,此偏移量必须除以 大小 ( WCHAR) 才能获取数组索引。
SymbolicLinkReparseBuffer.PrintNameLength
打印名称字符串的长度(以字节为单位)。 如果此字符串NULL_terminated, 则 PrintNameLength 不包含UNICODE_NULL终止符的空间。
SymbolicLinkReparseBuffer.Flags
指示符号链接是绝对链接还是相对链接。 如果标志包含SYMLINK_FLAG_RELATIVE,则 offset SubstituteNameOffset () 的 PathBuffer 中包含的符号链接) 作为相对链接进行处理;否则,它将作为绝对链接进行处理。
SymbolicLinkReparseBuffer.PathBuffer[1]
路径字符串的第一个字符。 此字符在内存中后跟字符串的其余部分。 路径字符串包含替换名称字符串和打印名称字符串。 替换名称和打印名称字符串可以按 PathBuffer 中的任何顺序显示。 若要在 PathBuffer 中找到替换名称和打印名称字符串,请使用 SubstituteNameOffset、 SubstituteNameLength、 PrintNameOffset 和 PrintNameLength 成员。
MountPointReparseBuffer
当 FileTag IO_REPARSE_TAG_MOUNT_POINT时,可以使用此结构来解释有效负载。
MountPointReparseBuffer.SubstituteNameOffset
PathBuffer 数组中替换名称字符串的偏移量(以字节为单位)。 请注意,此偏移量必须除以 大小 ( WCHAR) 才能获取数组索引。
MountPointReparseBuffer.SubstituteNameLength
替换名称字符串的长度(以字节为单位)。 如果此字符串NULL_terminated, 则 SubstituteNameLength 不包含UNICODE_NULL终止符的空间。
MountPointReparseBuffer.PrintNameOffset
PathBuffer 数组中打印名称字符串的偏移量(以字节为单位)。 请注意,此偏移量必须除以 大小 ( WCHAR) 才能获取数组索引。
MountPointReparseBuffer.PrintNameLength
打印名称字符串的长度(以字节为单位)。 如果此字符串NULL_terminated, 则 PrintNameLength 不包含UNICODE_NULL终止符的空间。
MountPointReparseBuffer.PathBuffer[1]
路径字符串的第一个字符。 此字符在内存中后跟字符串的其余部分。 路径字符串包含替换名称字符串和打印名称字符串。 替换名称和打印名称字符串可以按 PathBuffer 中的任何顺序显示。 若要在 PathBuffer 中找到替换名称和打印名称字符串,请使用 SubstituteNameOffset、 SubstituteNameLength、 PrintNameOffset 和 PrintNameLength 成员。
GenericReparseBuffer
可以使用此结构来解释任何 Microsoft 定义的 IO_REPARSE_TAG_XXX 标记的有效负载。
GenericReparseBuffer.DataBuffer[1]
指向包含重新分析点的用户定义数据的缓冲区的指针。
GenericGUIDReparseBuffer
可以使用此结构来解释任何 IO_REPARSE_TAG_XXX 标记的有效负载。
GenericGUIDReparseBuffer.TagGuid
标识重新分析点类型的全局唯一标识符 (GUID) 。 如果 FileTag 不是 Microsoft 标记,则此成员不能为 NULL。
GenericGUIDReparseBuffer.DataBuffer[1]
指向包含重新分析点的用户定义数据的缓冲区的指针。
注解
微型筛选器可以使用FLT_TAG_DATA_BUFFER结构来存储有关重新分析点标记的信息。
在联合中,可以使用 GenericGUIDReparseBuffer 结构来解释任何 IO_REPARSE_TAG_XXX 标记的有效负载,或者根据需要使用联合中的其他一个结构,如下所示:
对任何 Microsoft 定义的IO_REPARSE_TAG_XXX 标记使用 GenericReparseBuffer 结构。
当 FileTag IO_REPARSE_TAG_SYMLINK时,请使用 SymbolicLinkReparseBuffer 结构。
当 FileTag IO_REPARSE_TAG_MOUNT_POINT时,请使用 MountPointReparseBuffer 结构。
指向包含操作重新分析点标记数据的FLT_TAG_DATA_BUFFER结构的指针存储在操作FLT_CALLBACK_DATA结构的 TagData 成员中。
FLT_TAG_DATA_BUFFER_HEADER_SIZE宏返回FLT_TAG_DATA_BUFFER结构的固定部分的大小。
要求
Header | fltkernel.h (包括 FltKernel.h) |