2.1.5.10.14 FSCTL_GET_REPARSE_POINT
The server provides:
Open: An Open of a DataFile or DirectoryFile.
OutputBufferSize: The maximum number of bytes to return in OutputBuffer.
On completion, the object store MUST return:
OutputBuffer: An array of bytes containing a REPARSE_DATA_BUFFER or REPARSE_GUID_DATA_BUFFER structure as defined in [MS-FSCC] sections 2.1.2.2 and 2.1.2.3, respectively.
BytesReturned: The number of bytes returned to the caller.
Status: An NTSTATUS code that specifies the result.
Support for this operation is optional. If the object store does not implement this functionality, the operation MUST be failed with STATUS_INVALID_DEVICE_REQUEST.<107>
Pseudocode for the operation is as follows:
If Open.File.Volume.IsReparsePointsSupported is FALSE, the operation MUST be failed with STATUS_VOLUME_NOT_UPGRADED.
Phase 1 -- Check whether there is a reparse point on the File
If Open.File.ReparseTag is empty, the operation MUST be failed with STATUS_NOT_A_REPARSE_POINT.
Phase 2 -- Verify that OutputBufferSize is large enough to contain the reparse point data header.
If Open.File.ReparseTag is a Microsoft reparse tag as defined in [MS-FSCC] section 2.1.2.1, then OutputBufferSize MUST be >= sizeof(REPARSE_DATA_BUFFER). If not, the operation MUST be failed with STATUS_BUFFER_TOO_SMALL.
If Open.File.ReparseTag is a non-Microsoft reparse tag, then OutputBufferSize MUST be >= sizeof(REPARSE_GUID_DATA_BUFFER). If it is not, the operation MUST be failed with STATUS_BUFFER TOO_SMALL.
Phase 3 -- Return the reparse data
Set OutputBuffer.ReparseTag to Open.File.ReparseTag.
Set OutputBuffer.ReparseDataLength to the size of Open.File.ReparseData, in bytes.
Set OutputBuffer.Reserved to zero.
Copy as much of Open.File.ReparseData as can fit into the remainder of OutputBuffer starting at OutputBuffer.DataBuffer.
If Open.File.ReparseTag is a non-Microsoft reparse tag, set OutputBuffer.ReparseGUID to Open.File.ReparseGUID.
Upon successful completion of the operation, the object store MUST return:
BytesReturned set to the number of bytes written to OutputBuffer.
Status set to STATUS_SUCCESS.