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 |
|
00000CC5 |
09AC |
|
00001671 |
0527 |
|
00001B98 |
0630 |
|
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).