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

唯一标识重分析点的标记。 可以是 microsoft 定义的IO_REPARSE_TAG_ ntifs.h 中定义的XXX 值之一,也可以是 ISV 定义的值。

TagDataLength

DataBuffer 成员指向的重分析数据的大小(以字节为单位)。

UnparsedNameLength

关联文件对象的 FileName 成员指向的文件名未解析部分的长度(以字节为单位)。 有关 FileName 成员的详细信息,请参阅 FILE_OBJECT

SymbolicLinkReparseBuffer

IO_REPARSE_TAG_SYMLINK FileTag 时,可以使用此结构来解释有效负载。

SymbolicLinkReparseBuffer.SubstituteNameOffset

PathBuffer 数组中替换名称字符串的偏移量(以字节为单位)。 请注意,此偏移量必须除以 sizeof (WCHAR) 才能获取数组索引。

SymbolicLinkReparseBuffer.SubstituteNameLength

替换名称字符串的长度(以字节为单位)。 如果此字符串NULL_terminated, 则 SubstituteNameLength 不包含UNICODE_NULL终止符的空间。

SymbolicLinkReparseBuffer.PrintNameOffset

PathBuffer 数组中打印名称字符串的偏移量(以字节为单位)。 请注意,此偏移量必须除以 sizeof (WCHAR) 才能获取数组索引。

SymbolicLinkReparseBuffer.PrintNameLength

打印名称字符串的长度(以字节为单位)。 如果此字符串NULL_terminated, 则 PrintNameLength 不包含UNICODE_NULL终止符的空间。

SymbolicLinkReparseBuffer.Flags

指示符号链接是绝对链接还是相对链接。 如果 Flags 包含SYMLINK_FLAG_RELATIVE,则 Offset SubstituteNameOffset) 的 PathBuffer (中包含的符号链接将作为相对链接进行处理;否则,它将作为绝对链接进行处理。

SymbolicLinkReparseBuffer.PathBuffer[1]

路径字符串的第一个字符。 此字符在内存中后跟字符串的其余部分。 路径字符串包含替换名称字符串和打印名称字符串。 替换名称和打印名称字符串可以按任何顺序显示在 PathBuffer 中。 若要在 PathBuffer 中找到替换名称和打印名称字符串,请使用 SubstituteNameOffsetSubstituteNameLengthPrintNameOffsetPrintNameLength 成员。

MountPointReparseBuffer

IO_REPARSE_TAG_MOUNT_POINT FileTag 时,可以使用此结构来解释有效负载。

MountPointReparseBuffer.SubstituteNameOffset

PathBuffer 数组中替换名称字符串的偏移量(以字节为单位)。 请注意,此偏移量必须除以 sizeof (WCHAR) 才能获取数组索引。

MountPointReparseBuffer.SubstituteNameLength

替换名称字符串的长度(以字节为单位)。 如果此字符串NULL_terminated, 则 SubstituteNameLength 不包含UNICODE_NULL终止符的空间。

MountPointReparseBuffer.PrintNameOffset

PathBuffer 数组中打印名称字符串的偏移量(以字节为单位)。 请注意,此偏移量必须除以 sizeof (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 结构。

  • IO_REPARSE_TAG_SYMLINK FileTag 时,请使用 SymbolicLinkReparseBuffer 结构。

  • IO_REPARSE_TAG_MOUNT_POINT FileTag 时,请使用 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