3.6.1 Document Programmable Tags Example

Office

Document-level programmable tags are found inside the DocProgTagsContainer record (section 2.4.23.1) contained within the DocInfoListContainer record (section 2.4.4). The DocInfoListContainer record D from the table titled "DocumentContainer child-record hierarchy" in section 3.4 is shown expanded in the following table.

Offset

Size

Structure

00006199

04D7

DocInfoListContainer - docInfoList

00006199

0008

    RecordHeader - rh

000061A1

0024

    NormalViewSetInfoContainer - case of RT_NormalViewSetInfo9

000061C5

00AF

    SlideViewInfoInstance - case of RT_SlideViewInfo

00006274

0044

    NotesTextViewInfoContainer - case of RT_NotesTextViewInfo9

000062B8

001C

    VBAInfoContainer - case of RT_VbaInfo

000062D4

006F

    SlideViewInfoInstance - case of RT_SlideViewInfo

00006343

0044

    SorterViewInfoContainer - case of RT_SorterViewInfo

00006387

0044

    OutlineViewInfoContainer - case of RT_OutlineViewInfo

000063CB

02A5

    A: DocProgTagsContainer - case of RT_ProgTags

Figure 74: DocInfoListContainer child-record hierarchy

The DocProgTagsContainerrecord A from the previous table is shown expanded in the following table.

Offset

Size

Structure

Value

000063CB

02A5

DocProgTagsContainer - case of RT_ProgTags

000063CB

0008

    RecordHeader - rh

000063D3

0038

    A: DocProgBinaryTagContainer - case of RT_ProgBinaryTag

000063D3

0008

        RecordHeader - rh

000063D3

4 bits

            unsigned integer - recVer

0xF

000063D3

12 bits

            unsigned integer - recInstance

0x000

000063D5

0002

            RecordType - recType

0x138A

000063D7

0004

            unsigned integer - recLen

0x00000030

000063DB

0030

        B: PP10DocBinaryTagExtension - case of ___PPT10

0000640B

0265

    C: DocProgBinaryTagContainer - case of RT_ProgBinaryTag

0000640B

0008

        RecordHeader - rh

0000640B

4 bits

            unsigned integer - recVer

0xF

0000640B

12 bits

            unsigned integer - recInstance

0x000

0000640D

0002

            RecordType - recType

0x138A

0000640F

0004

            unsigned integer - recLen

0x0000025D

00006413

025D

        D: PP9DocBinaryTagExtension - case of ___PPT9

Figure 75: DocProgTagsContainer child-record hierarchy

The DocProgTagsContainer record shown in the previous table has two programmable tags, represented by records labeled A and C, both of which store binary data as specified by the 0x138A value for their rh.recType fields.

The PP2.4.23.6DocBinaryTagExtension record B from the previous table is shown expanded in the following table.

Offset

Size

Structure

Value

000063DB

0030

B: PP10DocBinaryTagExtension - case of ___PPT10

000063DB

0008

    RecordHeader - rh

000063DB

4 bits

        unsigned integer - recVer

0x0

000063DB

12 bits

        unsigned integer - recInstance

0x000

000063DD

0002

        RecordType - recType

0x0FBA

000063DF

0004

        unsigned integer - recLen

0x00000010

000063E3

0010

    PrintableUnicodeString - tagName

___PPT10

000063F3

0008

    RecordHeader - rhData

000063F3

4 bits

        unsigned integer - recVer

0x0

000063F3

12 bits

        unsigned integer - recInstance

0x000

000063F5

0002

        RecordType - recType

0x138B

000063F7

0004

        unsigned integer - recLen

0x00000010

000063FB

0010

    GridSpacing10Atom - gridSpacingAtom

Figure 76: PP10DocBinaryTagExtension child-record hierarchy

Most records that have a RecordHeader structure (section 2.3.1) as the first field are either an atom record or a container record. However, the PP2.4.23.6DocBinaryTagExtension record is not a single atom record, but rather a pair of atom records and has two RecordHeader structures identified by the rh and rhData fields.

rh: The value of the rh.recLen field is 0x00000010 and specifies the size of all subsequent fields until the next RecordHeader structure.

tagName: "___PPT10" specifies that the binary tag data following the rhData field is as specified by the PP2.4.23.6DocBinaryTagExtension record.

rhData: The value of the rhData.recVer field is 0x0. Generally when the recVer field of a RecordHeader structure is not equal to 0xF, it indicates that the record that contains the RecordHeader structure is an atom record. However, in this context, rhData behaves more like a RecordHeader structure found as the first field of a container record, because following it are more atom records and container records, specifically a GridSpacing2.4.21.1Atom record. Accordingly, the value of the rhData.recLen field is 0x00000010 and specifies the size of all subsequent records to be included as part of the PP2.4.23.6DocBinaryTagExtension record.

The PP2.4.23.5DocBinaryTagExtension record D from the table titled "DocProgTagsContainer child-record hierarchy" in this section is shown expanded in the following table.

Offset

Size

Structure

Value

00006413

025D

D: PP9DocBinaryTagExtension - case of ___PPT9

00006413

0008

    RecordHeader - rh

00006413

4 bits

        unsigned integer - recVer

0x0

00006413

12 bits

        unsigned integer - recInstance

0x000

00006415

0002

        RecordType - recType

0x0FBA

00006417

0004

        unsigned integer - recLen

0x0000000E

0000641B

000E

    PrintableUnicodeString - tagName

___PPT9

00006429

0008

    RecordHeader - rhData

00006429

4 bits

        unsigned integer - recVer

0x0

00006429

12 bits

        unsigned integer - recInstance

0x000

0000642B

0002

        RecordType - recType

0x138B

0000642D

0004

        unsigned integer - recLen

0x0000023F

00006431

01F1

    BlipCollection9Container - blipCollectionContainer

00006622

0020

    ExHyperlink9Container - exHyperlinkContainer

00006642

002E

    OutlineTextProps9Container - outlineTextPropsContainer

Figure 77: PP9DocBinaryTagExtension child-record hierarchy

Most records that have a RecordHeader structure as the first field are either an atom record or a container record. However, the PP2.4.23.5DocBinaryTagExtension record is not a single atom record, but rather a pair of atom records and has two RecordHeader structures identified by the rh and rhData fields.

rh:  The value of the rh.recLen field is 0x0000000E and specifies the size of all subsequent fields until the next RecordHeader structure.

tagName: "___PPT9" specifies that the binary tag data following the rhData is as specified by the PP2.4.23.5DocBinaryTagExtension record.

rhData: The value of the rhData.recVer field is 0x0. Generally when the recVer field of a RecordHeader structure is not equal to 0xF, it indicates that the record that contains the RecordHeader structure is an atom record. However, in this context, rhData behaves more like a RecordHeader structure found as the first field of a container record, because following it are more atom records and container records, specifically a BlipCollection9Container record (section 2.9.72), a ExHyperlink2.10.21Container record, and a OutlineTextProps2.9.60Container record. Accordingly, the value of the rhData.recLen field is 0x0000023F and specifies the size of all subsequent records to be included as part of the PP2.4.23.5DocBinaryTagExtension record.

Show: