3.3 Persist Objects

The PowerPoint Document Stream (section 2.1.2) is fundamentally a sequence of container records and atom records that represent persist objects, the PersistDirectoryAtom records (section 2.3.4) that comprise the persist object directory, and the UserEditAtom records (section 2.3.3) that identify the content comprising each user edit. The specific top-level record sequence for the sample presentation is shown in the following table.

Offset

Size

Structure

00000000

82B4

Stream - PowerPoint Document

00000000

0CC5

    A: DocumentContainer

00000CC5

09AC

    B: MainMasterContainer

00001671

0527

    C: SlideContainer

00001B98

0630

    D: NotesContainer

000021C8

022C

    E: SlideContainer

000023F4

0A8D

    F: SlideContainer

00002E81

024C

    G: SlideContainer

000030CD

06E8

    H: SlideContainer

000037B5

06CE

    I: SlideContainer

00003E83

0248

    J: SlideContainer

000040CB

024E

    K: NotesContainer

00004319

02BB

    L: NotesContainer

000045D4

029F

    M: NotesContainer

00004873

02AF

    N: NotesContainer

00004B22

0247

    O: NotesContainer

00004D69

0E88

    P: ExOleObjStg

00005BF1

0054

    Q: PersistDirectoryAtom

00005C45

0024

    R: UserEditAtom

00005C69

0CFB

    S: DocumentContainer

00006964

1192

    T: SlideContainer

00007AF6

04ED

    U: SlideContainer

00007FE3

0289

    V: NotesContainer

0000826C

0024

    W: PersistDirectoryAtom

00008290

0024

    X: UserEditAtom

Figure 25: Top-level record sequence in the PowerPoint Document Stream from sample.ppt

For each record in the previous table, the type of the record and its offset from the beginning of the PowerPoint Document Stream are listed. The atom records are: ExOleObjStg (section 2.10.34), PersistDirectoryAtom and UserEditAtom. The rest are container records. The letter labels are used to identify specific records in the text that follows.

The first user edit comprises records labeled A through R and the second user edit comprises records labeled S through X. By cross-referencing the previous table with the output from the second table in section 3.2, some dead records can be immediately identified, because their offsets do not appear in the second table in section 3.2. Specifically, DocumentContainer (section 2.4.1) record A is a dead record and is superseded by record S; SlideContainer (section 2.5.1) record H is also a dead record and is superseded by record T. Although SlideContainer record G is referenced by the persist object directory shown in the second table in section 3.2, further parsing of the slideList field of the DocumentContainer record S determines that no SlidePersistAtom (section 2.4.14.5) child-record has a persistIdRef field equal to 0x00000012. For more information about how the records from the previous table are associated with the slide images as shown in figures titled "Presentation slide 1" through "Notes master slide" in section 3.1, see the Slides Example (section 3.5).