2.1.5.15.3 FileDispositionInformation

InputBuffer is of type FILE_DISPOSITION_INFORMATION as described in [MS-FSCC] section 2.4.11.

Pseudocode for the operation is as follows:

  • If InputBufferSize is less than the size, in bytes, of the FILE_DISPOSITION_INFORMATION structure, the operation MUST be failed with STATUS_INFO_LENGTH_MISMATCH.

  • If Open.GrantedAccess does not contain DELETE, the operation MUST be failed with STATUS_ACCESS_DENIED.

  • If InputBuffer.DeletePending is TRUE:

    • If File.FileAttributes.FILE_ATTRIBUTE_READONLY is TRUE, the operation MUST be failed with STATUS_CANNOT_DELETE.

    • If Open.Stream.Name is empty:

      • If Open.Stream.StreamType is DirectoryStream and Open.File.DirectoryList is not empty, the operation MUST be failed with STATUS_DIRECTORY_NOT_EMPTY.

      • Set Open.Link.IsDeleted to TRUE.

      • If Open.Stream.StreamType is DirectoryStream:

        • For each ChangeNotifyEntry in Volume.ChangeNotifyList where ChangeNotifyEntry .OpenedDirectory.File is equal to Open.File then the following actions MUST be taken:

          • Remove ChangeNotifyEntry from Volume.ChangeNotifyList.

          • Complete the ChangeNotify operation with status STATUS_DELETE_PENDING.

        • EndFor

      • EndIf

    • Else:

      • Set Open.Stream.IsDeleted to TRUE.

    • EndIf

  • Else:

    • If Open.Stream.Name is empty:

      • Set Open.Link.IsDeleted to FALSE.

    • Else:

      • Set Open.Stream.IsDeleted to FALSE.

    • EndIf

  • EndIf

  • The operation returns STATUS_SUCCESS.