2.1.5.9.11 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.<65>
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.
-