REPARSE_DATA_BUFFER 结构 (ntifs.h)

REPARSE_DATA_BUFFER 结构包含 Microsoft 重分析点的重分析点数据。 可以改用 REPARSE_DATA_BUFFER_EX 。 (第三方重分析点所有者必须改用 REPARSE_GUID_DATA_BUFFER 结构。)

语法

typedef struct _REPARSE_DATA_BUFFER {
  ULONG  ReparseTag;
  USHORT ReparseDataLength;
  USHORT Reserved;
  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;
  } DUMMYUNIONNAME;
} REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER;

成员

ReparseTag

重分析点标记。 必须是 Microsoft 重分析点标记。 (请参阅以下 “备注 ”部分。)

ReparseDataLength

DataBuffer 指向的缓冲区中重新分析数据的大小(以字节为单位)。

Reserved

关联文件对象的 FileName 成员指向的文件名未解析部分的长度(以字节为单位)。 有关 FileName 成员的详细信息,请参阅 FILE_OBJECT<。 仅当 I/O 失败并出现STATUS_REPARSE时,此成员才对创建操作有效。 对于所有其他目的,例如设置或查询重分析数据的重分析点,此成员被视为保留。

DUMMYUNIONNAME

DUMMYUNIONNAME.SymbolicLinkReparseBuffer

DUMMYUNIONNAME.SymbolicLinkReparseBuffer.SubstituteNameOffset

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

DUMMYUNIONNAME.SymbolicLinkReparseBuffer.SubstituteNameLength

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

DUMMYUNIONNAME.SymbolicLinkReparseBuffer.PrintNameOffset

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

DUMMYUNIONNAME.SymbolicLinkReparseBuffer.PrintNameLength

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

DUMMYUNIONNAME.SymbolicLinkReparseBuffer.Flags

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

DUMMYUNIONNAME.SymbolicLinkReparseBuffer.PathBuffer[1]

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

DUMMYUNIONNAME.MountPointReparseBuffer

DUMMYUNIONNAME.MountPointReparseBuffer.SubstituteNameOffset

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

DUMMYUNIONNAME.MountPointReparseBuffer.SubstituteNameLength

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

DUMMYUNIONNAME.MountPointReparseBuffer.PrintNameOffset

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

DUMMYUNIONNAME.MountPointReparseBuffer.PrintNameLength

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

DUMMYUNIONNAME.MountPointReparseBuffer.PathBuffer[1]

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

DUMMYUNIONNAME.GenericReparseBuffer

DUMMYUNIONNAME.GenericReparseBuffer.DataBuffer[1]

指向缓冲区的指针,该缓冲区包含重新分析点的 Microsoft 定义数据。

注解

microsoft 文件系统、筛选器和微筛选器驱动程序以及 I/O 管理器使用 REPARSE_DATA_BUFFER 结构来存储重分析点的数据。

此结构只能用于 Microsoft 重新分析点。 第三方重分析点所有者必须改用 REPARSE_GUID_DATA_BUFFER 结构。

Microsoft 重分析点可以使用REPARSE_DATA_BUFFER结构或REPARSE_GUID_DATA_BUFFER结构。

在联合中,可以使用 GenericReparseBuffer 结构来解释任何IO_REPARSE_TAG_XXX标记的有效负载,也可以选择使用联合中的其他结构之一,如下所示:

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

  • IO_REPARSE_TAG_MOUNT_POINT FileTag 时,请使用 MountPointReparseBuffer 结构。

有关重新分析点标记的详细信息,请参阅Microsoft Windows SDK文档。

要求

要求
Header ntifs.h (包括 Ntifs.h、Fltkernel.h)

另请参阅

FILE_OBJECT

FILE_REPARSE_POINT_INFORMATION

IRP_MJ_FILE_SYSTEM_CONTROL 的 FLT_PARAMETERS

FSCTL_DELETE_REPARSE_POINT

FSCTL_GET_REPARSE_POINT

FSCTL_SET_REPARSE_POINT

FltFsControlFile

FltTagFile

FltTagFileEx

FltUntagFile

IRP_MJ_FILE_SYSTEM_CONTROL

IsReparseTagMicrosoft

IsReparseTagNameSurrogate

REPARSE_DATA_BUFFER_EX

REPARSE_GUID_DATA_BUFFER

ZwFsControlFile