The common record header is an 8-byte structure defined in msodr.h as follows:
typedef struct MSOFBH { struct { ULONG ver : 4; ULONG inst: 12; ULONG fbt : 16; }; ULONG cbLength; } MSOFBH;
The fields are:
Record Type: (fbt) Indicates the signature or type of the record. Each record has a symbolic and a numeric signature in msodr.h. Escher uses values from 0xF000 to 0xFFFF. Clients may define their own records in other ranges. A description of each of the different types can be found in the following sections.
Record Instance: (inst) Differentiates atoms. Depending on the instance a record's contents it can have different meanings. For example a list container can store a list of slides or a list of fonts, and its instance would vary accordingly. The instance of a record is useful for differentiating atoms when there is more than one atom of the same type in a particular container
Record Version: (ver) Indicates the version if the record is an atom. If the record is a container, this field has a value of 0xFFFF.
Record Length: (cbLength) Stores the length of the record in bytes. If the record is an atom, it refers to the length of the atom excluding the header. If the record is a container, it refers to the sum of the lengths of the atoms inside it, plus the length of the record headers.