Common Header

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.