2.1.2.4 Symbolic Link Reparse Data Buffer

The Symbolic Link Reparse Data Buffer data element is a subtype of REPARSE_DATA_BUFFER, which contains information on symbolic link reparse points. This reparse data buffer MUST be used only with reparse tag values whose high bit is set to 1.

A symbolic link has a substitute name and a print name associated with it. The substitute name is a pathname (section 2.1.5) identifying the target of the symbolic link. The print name SHOULD be an informative pathname, suitable for display to a user, that also identifies the target of the symbolic link. Either pathname can contain dot directory names as specified in section 2.1.5.1.


0


1


2


3


4


5


6


7


8


9

1
0


1


2


3


4


5


6


7


8


9

2
0


1


2


3


4


5


6


7


8


9

3
0


1

ReparseTag

ReparseDataLength

Reserved

SubstituteNameOffset

SubstituteNameLength

PrintNameOffset

PrintNameLength

Flags

PathBuffer (variable)

...

ReparseTag (4 bytes): A 32-bit unsigned integer value containing the reparse point tag that uniquely identifies the owner (that is, the implementer of the filter driver associated with this ReparseTag) of the reparse point. This value MUST be 0xA000000C.

ReparseDataLength (2 bytes): A 16-bit unsigned integer value containing the size, in bytes, of the reparse data that follows the common portion of the REPARSE_DATA_BUFFER element. This value is the length of the data starting at the SubstituteNameOffset field (or the size of the PathBuffer field, in bytes, plus 12).

Reserved (2 bytes): A 16-bit field. This field is not used. It SHOULD be set to 0 and MUST be ignored.

SubstituteNameOffset (2 bytes): A 16-bit unsigned integer that contains the offset, in bytes, of the substitute name string in the PathBuffer array, computed as an offset from byte 0 of PathBuffer. Note that this offset is divided by 2 to get the array index.

SubstituteNameLength (2 bytes):  A 16-bit unsigned integer that contains the length, in bytes, of the substitute name string. If this string is null-terminated, SubstituteNameLength does not include the Unicode null character.

PrintNameOffset (2 bytes): A 16-bit unsigned integer that contains the offset, in bytes, of the print name string in the PathBuffer array, computed as an offset from byte 0 of PathBuffer. Note that this offset is divided by 2 to get the array index.

PrintNameLength (2 bytes): A 16-bit unsigned integer that contains the length, in bytes, of the print name string. If this string is null-terminated, PrintNameLength does not include the Unicode null character.

Flags (4 bytes): A 32-bit field that specifies whether the substitute name is a full path name or a path name relative to the directory containing the symbolic link.

This field contains one of the values in the following table.

Value

Meaning

0x00000000

The substitute name is a full path name.

SYMLINK_FLAG_RELATIVE

0x00000001

The substitute name is a path name relative to the directory containing the symbolic link.

PathBuffer  (variable): Unicode character array that contains the substitute name string and print name string. The substitute name and print name strings can appear in any order in the PathBuffer. To locate the substitute name and print name strings in the PathBuffer, use the SubstituteNameOffset, SubstituteNameLength, PrintNameOffset, and PrintNameLength members.