2.1.5.10.19 FSCTL_MARK_HANDLE
The server provides:
Open: An Open of a DataFile.
InputBufferSize: The byte count of the InputBuffer.
InputBuffer: A buffer of type MARK_HANDLE_INFO as defined in [MS-FSCC] section 2.3.39.
Upon completion, the object store MUST return:
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. If the object store supports FSCTL_MARK_HANDLE but does not support MARK_HANDLE_READ_COPY or MARK_HANDLE_NOT_READ_COPY, then STATUS_INVALID_PARAMETER MUST be returned. <109>
Pseudocode for the operation is as follows:
If InputBufferSize is less than the size of the MARK_HANDLE_INFO structure, the operation MUST be failed with STATUS_BUFFER_TOO_SMALL.
If Open.Stream.StreamType == DirectoryStream, the operation MUST be failed with STATUS_DIRECTORY_NOT_SUPPORTED.<110>
STATUS_INVALID_PARAMETER is returned if:
InputBuffer.HandleInfo contains any flag other than one and only one of either MARK_HANDLE_READ_COPY or MARK_HANDLE_NOT_READ_COPY.
Open.Mode.FILE_NO_INTERMEDIATE_BUFFERING was not specified at open time, meaning the file was opened for cached IO operations.
If InputBuffer.CopyNumber > (Open.File.Volume.NumberOfDataCopies – 1).
If Open.Stream.StreamType != DataStream.
If InputBuffer.HandleInfo has MARK_HANDLE_READ_COPY set:
If Open.File.Volume.NumberOfDataCopies < 2, the operation MUST be failed with STATUS_NOT_REDUNDANT_STORAGE.
If Open.Stream.IsCompressed is TRUE, the operation MUST be failed with STATUS_COMPRESSED_FILE_NOT_SUPPORTED.
If a file is resident the operation MUST be failed with STATUS_RESIDENT_FILE_NOT_SUPPORTED.<111>
Set Open.ReadCopyNumber = InputBuffer.CopyNumber.
Else If InputBuffer.HandleInfo has MARK_HANDLE_NOT_READ_COPY set:
For ReFS File System, if Open.File.Volume.NumberOfDataCopies < 2, the operation MUST be failed with STATUS_NOT_REDUNDANT_STORAGE.
Set Open.ReadCopyNumber = 0xffffffff.
EndIf
Upon successful completion of the operation, the object store MUST return:
Status set to STATUS_SUCCESS.