Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
Export (0) Print
Expand All
Expand Minimize

2.1.5.9.3 FSCTL_DELETE_REPARSE_POINT

The server provides:

  • Open: An Open of a DataFile or DirectoryFile.

  • ReparseTag: An identifier indicating the type of the reparse point to delete, as defined in [MS-FSCC] section 2.1.2.1.

  • ReparseGUID: A GUID indicating the type of the reparse point to delete.

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

Pseudocode for the operation is as follows:

  • Phase 1 -- Verify the parameters.

  • If (Open.GrantedAccess & (FILE_WRITE_DATA | FILE_WRITE_ATTRIBUTES)) == 0, the operation MUST be failed with STATUS_ACCESS_DENIED.

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

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

  • If the ReparseTag is either IO_REPARSE_TAG_RESERVED_ZERO or IO_REPARSE_TAG_RESERVED_ONE, the operation MUST be failed with STATUS_IO_REPARSE_TAG_INVALID. The reserved reparse tags are defined in [MS-FSCC] section 2.1.2.1.

  • If ReparseTag is a non-Microsoft Reparse Tag, then the ReparseGUID MUST be a valid GUID; otherwise the operation MUST be failed with STATUS_IO_REPARSE_DATA_INVALID.

  • Phase 2 -- Validate that the requested tag deletion type matches with the stored tag type.

  • If (ReparseTag != Open.File.ReparseTag), the operation MUST be failed with STATUS_IO_REPARSE_TAG_MISMATCH.

  • If (ReparseTag is a non-Microsoft Reparse Tag && Open.File.ReparseGUID != ReparseGUID), the operation MUST be failed with STATUS_REPARSE_ATTRIBUTE_CONFLICT.

  • Phase 3 -- Remove the reparse point from the File.

  • Set Open.File.ReparseData, Open.File.ReparseGUID, and Open.File.ReparseTag to empty.

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

  • If Open.File.FileType == DataFile, set Open.File.FileAttributes.FILE_ATTRIBUTE_ARCHIVE to TRUE.

  • Set Open.File.PendingNotifications.FILE_NOTIFY_CHANGE_LAST_ACCESS to TRUE.

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

    • Status set to STATUS_SUCCESS.

Show:
© 2015 Microsoft