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 中找到替换名称和打印名称字符串,请使用 SubstituteNameOffsetSubstituteNameLengthPrintNameOffsetPrintNameLength 成员。

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 中找到替换名称和打印名称字符串,请使用 SubstituteNameOffsetSubstituteNameLengthPrintNameOffsetPrintNameLength 成员。

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)

另请参阅

FILE_OBJECT

FLT_CALLBACK_DATA

FltTagFile

FltTagFileEx

FltUntagFile