2.1.5.10.36 FSCTL_SET_OBJECT_ID_EXTENDED

The server provides:

  • Open: An Open of a DataFile or DirectoryFile.

  • InputBuffer: An array of bytes containing a FILE_OBJECTID_BUFFER structure as specified in [MS-FSCC] section 2.1.3.1.

  • 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.<144>

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.<145>

  • Post a USN change as specified in section 2.1.4.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.