The server provides:
Open: An Open of a DataFile or DirectoryFile.
InputBufferSize: The number of bytes in InputBuffer.
On 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.<101>
Pseudocode for the operation is as follows:
If InputBufferSize is not equal to sizeof(ObjectId.ExtendedInfo) (48 bytes), the operation MUST be failed with STATUS_INVALID_PARAMETER.
If Volume.IsReadOnly is TRUE, the operation MUST be failed with STATUS_MEDIA_WRITE_PROTECTED.
If Open.File.Volume.IsObjectIDsSupported is FALSE, the operation MUST be failed with STATUS_VOLUME_NOT_UPGRADED.
If Open.GrantedAccess contains neither FILE_WRITE_DATA nor FILE_WRITE_ATTRIBUTES, the operation MUST be failed with STATUS_ACCESS_DENIED.
If Open.File.ObjectId is empty, the operation MUST be failed with STATUS_OBJECTID_NOT_FOUND.
Before completing the operation successfully, the object store MUST set:
Open.File.LastChangeTime to the current time.<102>
Post a USN change as specified in section 220.127.116.11 with File equal to File, Reason equal to USN_REASON_OBJECT_ID_CHANGE, and FileName equal to Open.Link.Name.
Open.File.BirthVolumeId to InputBuffer.BirthVolumeId.
Open.File.BirthObjectId to InputBuffer.BirthObjectId.
Open.File.DomainId to InputBuffer.DomainId.
Upon successful completion of this operation, the object store MUST return:
Status set to STATUS_SUCCESS.