meaning, language, or formatting of the technical content. 5/6/2011 7.0 Major Updated and revised the technical content. 6/17/2011 8.0 Major Updated and revised the technical content. 9/23/2011 9.0 Major Updated and revised the technical content. 12/16/2011 10.0 Major Updated and revised the technical content. 3/30/2012 11.0 Updated and revised the technical content. 7/12/2012 12.0 Major Updated and revised the technical content. 10/25/2012 13.0 Major Updated and revised the technical content. 1/31/2013 14.0 Updated and revised the technical content. 8/8/2013 15.0 Updated and revised the technical content.
11/14/2013 16.0 Major Updated and revised the technical content. 2/13/2014 17.0 Updated and revised the technical content. 5/15/2014 18.0 Major Updated and revised the technical content. 6/30/2015 19.0 Major Significantly changed the technical content. 10/16/2015 20.0 Major Significantly changed the technical content. 3/2/2016 21.0 Major Significantly changed the technical content. 7/14/2016 22.0 Major Significantly changed the technical content. 9/26/2016 23.0 Significantly changed the technical content. 6/1/2017 24.0 Major Significantly changed the technical content. 9/15/2017 25.0 Major Significantly changed the technical content. 12/1/2017 26.0 Significantly changed
StreamDeleted MUST be set to TRUE. PostUsnClose MUST be set to TRUE. EndIf Phase 3 - File Deletion: If Open.Link.IsDeleted is TRUE and there does not exist an ExistingOpen in Open.File.OpenList that has ExistingOpen.Link equal to Open.Link: Remove Open.Link from Open.File.LinkList. Remove Open.Link from Open.Link.ParentFile.DirectoryList. Set LinkDeleted to TRUE. If Open.File.LinkList is empty: Set FileDeleted to TRUE. EndIf EndIf If LinkDeleted is FALSE: The object store MUST update the duplicated information as specified in section with Link equal to Link. EndIf 4 - Truncate on Close: Set AllocationClusters to ClustersFromBytes(Open.File.Volume, Open.Stream.AllocationSize). Set FileClusters to ClustersFromBytes(Open.File.Volume, Open.Stream.FileSize). If AllocationClusters > FileClusters: This file has excess allocation. The object store SHOULD free (AllocationClusters - FileClusters) of allocation from the end of the stream, and set Open.Stream.AllocationSize to FileClusters * Open.File.Volume.ClusterSize. If the object store supports Open.File.Volume.ClusterRefcount, the object store MUST decrement the reference count of each cluster that is pointed to by the EXTENTS in the Open.Stream.ExtentList that were freed by the previous step. If the corresponding cluster's reference count goes to zero, the cluster MUST be freed. EndIf Phase 5 -- Directory Change Notification: When a directory Open with outstanding directory change notification requests is closed, these requests are completed using the algorithm below. If Open.Stream.StreamType is DirectoryStream: For each ChangeNotifyEntry in Volume.ChangeNotifyList where ChangeNotifyEntry.OpenedDirectory is equal to Open then the following actions MUST be taken:
OutputBuffer.PositionInformation MUST be filled using the operation described in section . OutputBuffer.ModeInformation MUST be filled the operation described in section . OutputBuffer.AlignmentInformation MUST be filled using the operation described in section . OutputBuffer.NameInformation MUST be filled using the operation described in section , saving the returned ByteCount in NameInformationLength and the returned Status in NameInformationStatus. Upon successful completion of the operation, the object store MUST return: ByteCount set to FieldOffset(FILE_ALL_INFORMATION.NameInformation) + NameInformationLength. Status set to NameInformationStatus. FileAlternateNameInformation OutputBuffer is of type FILE_NAME_INFORMATION as described in 2.4.5. Pseudocode for the operation is as follows: If OutputBufferSize is smaller than BlockAlign(FieldOffset(FILE_NAME_INFORMATION.FileName) + 2, 4), the operation MUST be failed with STATUS_INFO_LENGTH_MISMATCH. If Open.Link.ShortName is empty, the operation MUST be failed with STATUS_OBJECT_NAME_NOT_FOUND. OutputBuffer MUST be constructed as follows: OutputBuffer.FileNameLength set to the length, in bytes, of Open.Link.ShortName. OutputBuffer.FileName set to Open.Link.ShortName. Upon successful completion of the operation, the object store MUST return: ByteCount set to FieldOffset(FILE_NAME_INFORMATION.FileName) + OutputBuffer.FileNameLength. Status set to STATUS_SUCCESS. FileAttributeTagInformation OutputBuffer is of type FILE_ATTRIBUTE_TAG_INFORMATION as defined in section 2.4.6. Pseudocode for the operation is as follows: If OutputBufferSize is smaller than sizeof(FILE_ATTRIBUTE_TAG_INFORMATION), the operation MUST be failed with STATUS_INFO_LENGTH_MISMATCH. If Open.GrantedAccess does not contain FILE_READ_ATTRIBUTES, the operation MUST be failed with STATUS_ACCESS_DENIED. If Open.Stream.StreamType is DirectoryStream: The object store MUST set OutputBuffer.FileAttributes equal to the value of Open.File.FileAttributes.
LastWriteTime Stored in UTC 100 nanosecond granularity Stored in UTC 100 nanosecond granularity Stored in local time 2 second granularity Stored in UTC if available, else in local time 10 millisecond granularity Stored in UTC if available, else in local time 1 microsecond granularity <29> Section 2.1.1.4: The following table defines the support of file time stamps across various Windows file systems. More information can be found in section 6 of the File System Behavior Overview document [FSBO]. Timestamp ReFS NTFS FAT UDFS CreationTime Stored in UTC 100 nanosecond granularity Stored in UTC 100 nanosecond granularity Stored in local time 10 millisecond granularity Stored in UTC if available, else in local time 10 millisecond granularity Stored in UTC if available, else in local time 1 microsecond granularity LastAccessTime Stored in UTC 100 nanosecond granularity Updated at 60 minute granularity Stored in UTC 100 nanosecond granularity Updated at 60 minute granularity Stored in local time 1 day granularity Stored in UTC if available, else in local time 2 second granularity Stored in UTC if available, else in local time 1 microsecond granularity ChangeTime Stored in UTC 100 nanosecond granularity Stored in UTC 100 nanosecond granularity Not Supported Not Supported Stored in UTC if available, else in local time 1 microsecond granularity LastWriteTime Stored in UTC 100 nanosecond granularity Stored in UTC 100 nanosecond granularity Stored in time 2 second granularity Stored in UTC if available, else in local time 10 millisecond granularity Stored in UTC if available, else in local time 1 microsecond granularity <30> Section 2.1.1.4: In Windows Vista and subsequent LastAccessTime updates are disabled by default in the ReFS and NTFS file systems. It is only updated when the file is closed. This behavior is controlled by the following registry key:
FILE_SUPPORTS_EXTENDED_ATTRIBUTES 0x00800000 Always Set FILE_SUPPORTS_HARD_LINKS 0x00400000 Always Set Always Set FILE_SUPPORTS_TRANSACTIONS 0x00200000 Set if 3.0 format or higher volume FILE_SEQUENTIAL_WRITE_ONCE 0x00100000 Set if volume not mounted FILE_READ_ONLY_VOLUME 0x00080000 Set if volume mounted Set if volume mounted read-only Set if volume mounted Set if volume mounted Set if volume mounted Always Set FILE_NAMED_STREAMS 0x00040000 Always Set Set if 2.0 format or higher FILE_SUPPORTS_ENCRYPTION 0x00020000 Set if 3.0 format or higher volume and encryption is enabled on the system FILE_SUPPORTS_OBJECT_IDS 0x00010000 Set if 3.0 format or higher volume FILE_VOLUME_IS_COMPRESSED 0x00008000 FILE_SUPPORTS_REMOTE_STORAGE 0x00000100 FILE_SUPPORTS_REPARSE_POINTS 0x00000080 Always Set Set if 3.0 format or higher volume FILE_SUPPORTS_SPARSE_FILES 0x00000040 Set if 3.0 format or
Server Requests a Query of Security Information 8237 : Updated the conditions when STATUS_INVALID_DEVICE_REQUEST is returned. Major Algorithm to Request an Exclusive Oplock 8299 : Updated the indentation of Oplock Major Algorithm to Request a Shared Oplock 8247 : Updated the processing rules for ThisOpen Minor 2.1.5.17.2 Algorithm to Request a Shared Oplock 8294 : Updated the processing rules for when STATUS_OPLOCK_NOT_GRANTED is returned. Major
Index A Abstract data model 20 22 20 15 17 20 19 21 11 22 22 17 14 11 Algorithms - common 47 26 27 48 27 27 23 25 49 24 30 23 28 46 27 29 25 10 C 10 249 Common algorithms 47 26 27 48 27 27 23 25 49 24 30 23 28 46 27 29 25 D Data model - abstract 20 22 20 15 17 20 19 21 11 22 22 17 14 11 E Examples 230 230 F 10 G 8 H Higher-layer triggered events byte-range 93 95 92 76 directory 150 82 file information 151 176 51 system information 163 203 96 226 206 218 50 quota information 226 228 71 security information 170