The server provides:

  • Open: An Open of a DataFile or DirectoryFile.

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

Pseudocode for the operation is as follows:

  • If Open.File.Volume.IsObjectIDsSupported is FALSE, the operation MUST be failed with STATUS_VOLUME_NOT_UPGRADED.

  • If Volume.IsReadOnly is TRUE, the operation MUST be failed with STATUS_MEDIA_WRITE_PROTECTED.

  • If Open.File.ObjectId is empty, the operation MUST be completed with STATUS_SUCCESS.

  • Update Open.File.LastChangeTime to the current time.<71>

  • Post a USN change as specified in section with File equal to File, Reason equal to USN_REASON_OBJECT_ID_CHANGE, and FileName equal to Open.Link.Name.

    • The object store MUST construct a FILE_OBJECTID_INFORMATION structure (as specified in [MS-FSCC] section ObjectIdInfo as follows:

      • ObjectIdInfo.FileReference set to zero.

      • ObjectIdInfo.ObjectId set to Open.File.ObjectId.

      • ObjectIdInfo.BirthVolumeId set to Open.File.BirthVolumeId.

      • ObjectIdInfo.BirthObjectId set to Open.File.BirthObjectId.

      • ObjectIdInfo.DomainId set to Open.File.DomainId.

  • Send directory change notification as specified in section, with Volume equal to Open.File.Volume, Action equal to FILE_ACTION_REMOVED, FilterMatch equal to FILE_NOTIFY_CHANGE_FILE_NAME, FileName equal to "\$Extend\$ObjId", NotifyData equal to ObjectIdInfo, and NotifyDataLength equal to sizeof(FILE_OBJECTID_INFORMATION).

  • Set Open.File.ObjectId to empty.

  • Upon successful completion of the operation, the object store MUST return:

    • Status set to STATUS_SUCCESS.