Export (0) Print
Expand All

2.6.3 Other Directory Entries

Directory entries other than the root storage directory entry are marked as either stream objects, storage objects, or unallocated objects.

Storage objects MAY have CLSID, creation time, modified time, and Child Stream ID values. Stream objects MUST set these values to zero.

Stream objects MAY have valid Starting Sector Location and Stream Size values, whereas these fields are set to zero for storage objects (except as noted for the root directory entry).

To determine the file location of actual stream data from a stream directory entry, it is necessary to determine whether the stream exists in the FAT or the mini FAT. Streams whose size is less than the Mini Sector Cutoff value (typically 4096 bytes) for the file exist in the mini stream. The Starting Sector Location is used as an index into the mini FAT (which starts at mini FAT Starting Location) to track the chain of sectors through the mini stream. Streams whose size is greater than the Mini Sector Cutoff value for the file exist as standard streams--their Starting Sector Location value is used as an index into the standard FAT, which describes the chain of full sectors containing their data.

For 512-byte sectors, the Stream Size upper 32-bits field MUST be set to zero when the compound file is written. However, the high DWORD of this field was not initialized in older implementations, so current implementations MUST accept uninitialized high DWORD for the Stream Size field. For version 4 compound files that support 4096-byte sector size, the Stream Size MUST be a full 64-bit integer stream size.

Free (unused) directory entries are marked with Object Type 0x0 (unknown or unallocated). The entire directory entry should consist of all zeroes except for the child, right sibling, and left sibling pointers, which should be initialized to NOSTREAM (0xFFFFFFFF).

© 2014 Microsoft