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.<90>
Pseudocode for the operation is as follows:
If InputBufferSize is not equal to sizeof(FILE_OBJECTID_BUFFER), 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.HasRestoreAccess is FALSE, the operation MUST be failed with STATUS_ACCESS_DENIED.
If Open.File.ObjectId is not empty, the operation MUST be failed with STATUS_OBJECT_NAME_COLLISION.
If InputBuffer.ObjectId is not unique on Open.File.Volume, the operation MUST be failed with STATUS_DUPLICATE_NAME.
Before completing the operation successfully, the object store MUST set:
Open.File.LastChangeTime to the current time.<91>
Post a USN change as per 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.ObjectId to InputBuffer.ObjectId.
Open.File.BirthVolumeId to InputBuffer.BirthVolumeId.
Open.File.BirthObjectId to InputBuffer.BirthObjectId.
Open.File.DomainId to InputBuffer.DomainId.
Upon successful completion of the operation, the object store MUST return:
Status set to STATUS_SUCCESS.