The server provides:
Open: An Open of a DataFile.
InputBufferSize: The byte count of the InputBuffer.
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. <94>
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.
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.
Set Open.ReadCopyNumber = InputBuffer.CopyNumber.
Else If InputBuffer.HandleInfo has MARK_HANDLE_NOT_READ_COPY set:
Set Open.ReadCopyNumber = 0xffffffff.
Upon successful completion of the operation, the object store MUST return:
Status set to STATUS_SUCCESS.