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.