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

指示符号链接是绝对链接还是相对链接。 如果 标志 包含SYMLINK_FLAG_RELATIVE,则 PathBuffer 数组中包含的符号链接(偏移量 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标记的有效负载,或者根据需要使用联合中的其他结构之一,如下所示:

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

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

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

要求

要求 价值
标头 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