Mercurial > libpst
annotate xml/libpst.in @ 51:06c0262ad689 stable-0-6-5
code cleanup
author | carl |
---|---|
date | Tue, 22 Jan 2008 14:39:02 -0800 |
parents | fb3818370dd6 |
children | 034641c26ab9 |
rev | line source |
---|---|
16 | 1 <reference> |
2 <title>@PACKAGE@ Utilities - Version @VERSION@</title> | |
3 <partintro> | |
4 <title>Packages</title> | |
31 | 5 |
6 <para>This is a fork of the libpst project at SourceForge. Another fork | |
7 is located at <ulink | |
8 url="http://alioth.debian.org/projects/libpst/">http://alioth.debian.org/projects/libpst/</ulink> | |
9 </para> | |
10 | |
11 <para>The various source and binary packages are available at <ulink | |
12 url="http://www.five-ten-sg.com/@PACKAGE@/packages/">http://www.five-ten-sg.com/@PACKAGE@/packages/</ulink> | |
13 The most recent documentation is available at <ulink | |
14 url="http://www.five-ten-sg.com/@PACKAGE@/">http://www.five-ten-sg.com/@PACKAGE@/</ulink> | |
15 </para> | |
16 | |
51 | 17 <para>This version can now convert both 32 bit Outlook files (pre 2003), and the |
18 64 bit Outlook 2003 pst files. | |
19 </para> | |
20 | |
24 | 21 </partintro> |
16 | 22 |
23 | |
24 <refentry id="readpst.1"> | |
25 <refentryinfo> | |
50 | 26 <date>2008-01-19</date> |
16 | 27 </refentryinfo> |
28 | |
29 <refmeta> | |
30 <refentrytitle>readpst</refentrytitle> | |
31 <manvolnum>1</manvolnum> | |
32 <refmiscinfo>readpst @VERSION@</refmiscinfo> | |
33 </refmeta> | |
34 | |
20 | 35 <refnamediv id='readpst.name.1'> |
16 | 36 <refname>readpst</refname> |
51 | 37 <refpurpose>convert PST (MS Outlook Personal Folders) files to mbox and other formats</refpurpose> |
16 | 38 </refnamediv> |
39 | |
20 | 40 <refsynopsisdiv id='readpst.synopsis.1'> |
16 | 41 <title>Synopsis</title> |
42 <cmdsynopsis> | |
43 <command>readpst</command> | |
31 | 44 <arg><option>-b</option></arg> |
43 | 45 <arg><option>-C</option></arg> |
16 | 46 <arg><option>-c <replaceable class="parameter">format</replaceable></option></arg> |
47 <arg><option>-d <replaceable class="parameter">debug-file</replaceable></option></arg> | |
48 <arg><option>-h</option></arg> | |
49 <arg><option>-k</option></arg> | |
50 <arg><option>-o <replaceable class="parameter">output-directory</replaceable></option></arg> | |
51 <arg><option>-q</option></arg> | |
52 <arg><option>-r</option></arg> | |
53 <arg><option>-S</option></arg> | |
25 | 54 <arg><option>-M</option></arg> |
16 | 55 <arg><option>-V</option></arg> |
56 <arg><option>-w</option></arg> | |
43 | 57 <arg choice='plain'>pstfile</arg> |
16 | 58 </cmdsynopsis> |
59 </refsynopsisdiv> | |
60 | |
20 | 61 <refsect1 id='readpst.description.1'> |
62 <title>Description</title> | |
28 | 63 <para><command>readpst</command> is a program that can read an Outlook |
64 PST (Personal Folders) file and convert it into an mbox file, a format | |
65 suitable for KMail, a recursive mbox structure, or separate emails. | |
20 | 66 </para> |
67 </refsect1> | |
68 | |
69 <refsect1 id='readpst.options.1'> | |
16 | 70 <title>Options</title> |
71 <variablelist> | |
72 <varlistentry> | |
31 | 73 <term>-b</term> |
74 <listitem><para> | |
75 Do not save the attachments for the RTF format of the email body. | |
76 </para></listitem> | |
77 </varlistentry> | |
78 <varlistentry> | |
43 | 79 <term>-C</term> |
80 <listitem><para> | |
81 Decrypt the entire pst file and dump it to stdout. | |
82 </para></listitem> | |
83 </varlistentry> | |
84 <varlistentry> | |
16 | 85 <term>-c <replaceable class="parameter">format</replaceable></term> |
86 <listitem><para> | |
87 Set the Contact output mode. Use -cv for vcard format or -cl for an email list. | |
88 </para></listitem> | |
89 </varlistentry> | |
90 <varlistentry> | |
91 <term>-d <replaceable class="parameter">debug-file</replaceable></term> | |
92 <listitem><para> | |
33
12cac756bc05
enable -d option, but if not specified, don't generate a debug file
carl
parents:
32
diff
changeset
|
93 Specify name of debug log file. The |
28 | 94 log file is not an ascii file, it is a binary file readable |
95 by <command>readpstlog</command>. | |
16 | 96 </para></listitem> |
97 </varlistentry> | |
98 <varlistentry> | |
99 <term>-h</term> | |
100 <listitem><para> | |
31 | 101 Show summary of options and exit. |
16 | 102 </para></listitem> |
103 </varlistentry> | |
104 <varlistentry> | |
105 <term>-k</term> | |
106 <listitem><para> | |
107 Changes the output format to KMail. | |
108 </para></listitem> | |
109 </varlistentry> | |
110 <varlistentry> | |
20 | 111 <term>-o <replaceable class="parameter">output-directory</replaceable></term> |
16 | 112 <listitem><para> |
113 Specifies the output directory. The directory must already exist, and | |
114 is entered after the PST file is opened, but before any processing of | |
115 files commences. | |
116 </para></listitem> | |
117 </varlistentry> | |
118 <varlistentry> | |
119 <term>-q</term> | |
120 <listitem><para> | |
121 Changes to silent mode. No feedback is printed to the screen, except | |
122 for error messages. | |
123 </para></listitem> | |
124 </varlistentry> | |
125 <varlistentry> | |
126 <term>-r</term> | |
127 <listitem><para> | |
128 Changes the output format to Recursive. This will create folders as | |
21 | 129 named in the PST file, and will put all emails in a file called "mbox" |
16 | 130 inside each folder. These files are then compatible with all |
131 mbox-compatible email clients. | |
132 </para></listitem> | |
133 </varlistentry> | |
134 <varlistentry> | |
135 <term>-S</term> | |
136 <listitem><para> | |
25 | 137 Output messages into separate files. This will create folders as named |
138 in the PST file, and will put each email in its own file. These files | |
28 | 139 will be numbered from 1 increasing in intervals of 1 (ie 1, 2, 3, ...). |
140 Any attachments are saved alongside each email as XXXXXXXXX-attach1, | |
141 XXXXXXXXX-attach2 and so on, or with the name of the attachment if one | |
142 is present. | |
16 | 143 </para></listitem> |
144 </varlistentry> | |
145 <varlistentry> | |
25 | 146 <term>-M</term> |
147 <listitem><para> | |
148 Output messages in MH format as separate files. This will create | |
28 | 149 folders as named in the PST file, and will put each email together with |
150 any attachments into its own file. These files will be numbered from 1 | |
151 to n with no leading zeros. | |
25 | 152 </para></listitem> |
153 </varlistentry> | |
154 <varlistentry> | |
16 | 155 <term>-V</term> |
156 <listitem><para> | |
31 | 157 Show program version and exit. |
16 | 158 </para></listitem> |
159 </varlistentry> | |
160 <varlistentry> | |
161 <term>-w</term> | |
162 <listitem><para> | |
20 | 163 Overwrite any previous output files. Beware: When used with the -S |
16 | 164 switch, this will remove all files from the target folder before |
165 writing. This is to keep the count of emails and attachments correct. | |
166 </para></listitem> | |
167 </varlistentry> | |
168 </variablelist> | |
169 </refsect1> | |
170 | |
20 | 171 <refsect1 id='readpst.also.1'> |
16 | 172 <title>See Also</title> |
173 <para> | |
25 | 174 <citerefentry><refentrytitle>readpstlog</refentrytitle> <manvolnum>1</manvolnum> </citerefentry> |
16 | 175 </para> |
176 </refsect1> | |
177 | |
20 | 178 <refsect1 id='readpst.author.1'> |
16 | 179 <title>Author</title> |
180 <para> | |
181 This manual page was originally written by Dave Smith | |
182 <dave.s@earthcorp.com>, and updated by Joe Nahmias <joe@nahmias.net> | |
183 for the Debian GNU/Linux system (but may be used by others). It was | |
20 | 184 subsequently updated by Brad Hards <bradh@frogmouth.net>, and converted to |
16 | 185 xml format by Carl Byington <carl@five-ten-sg.com>. |
186 </para> | |
187 </refsect1> | |
188 | |
20 | 189 <refsect1 id='readpst.copyright.1'> |
16 | 190 <title>Copyright</title> |
191 <para> | |
192 Copyright (C) 2002 by David Smith <dave.s@earthcorp.com>. | |
28 | 193 XML version Copyright (C) 2006 by 510 Software Group <carl@five-ten-sg.com>. |
16 | 194 </para> |
195 <para> | |
196 This program is free software; you can redistribute it and/or modify it | |
197 under the terms of the GNU General Public License as published by the | |
198 Free Software Foundation; either version 2, or (at your option) any | |
199 later version. | |
200 </para> | |
201 <para> | |
202 You should have received a copy of the GNU General Public License along | |
203 with this program; see the file COPYING. If not, please write to the | |
204 Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. | |
205 </para> | |
206 </refsect1> | |
207 | |
20 | 208 <refsect1 id='readpst.version.1'> |
16 | 209 <title>CVS Version</title> |
210 <para> | |
211 $Id$ | |
212 </para> | |
213 </refsect1> | |
214 </refentry> | |
215 | |
216 | |
43 | 217 <refentry id="lspst.1"> |
218 <refentryinfo> | |
50 | 219 <date>2008-01-19</date> |
43 | 220 </refentryinfo> |
221 | |
222 <refmeta> | |
223 <refentrytitle>lspst</refentrytitle> | |
224 <manvolnum>1</manvolnum> | |
225 <refmiscinfo>lspst @VERSION@</refmiscinfo> | |
226 </refmeta> | |
227 | |
228 <refnamediv id='lspst.name.1'> | |
229 <refname>lspst</refname> | |
230 <refpurpose>list PST (MS Outlook Personal Folders) file data</refpurpose> | |
231 </refnamediv> | |
232 | |
233 <refsynopsisdiv id='lspst.synopsis.1'> | |
234 <title>Synopsis</title> | |
235 <cmdsynopsis> | |
236 <command>lspst</command> | |
50 | 237 <arg><option>-d <replaceable class="parameter">debug-file</replaceable></option></arg> |
238 <arg><option>-h</option></arg> | |
239 <arg><option>-V</option></arg> | |
43 | 240 <arg choice='plain'>pstfile</arg> |
241 </cmdsynopsis> | |
242 </refsynopsisdiv> | |
243 | |
50 | 244 <refsect1 id='lspst.options.1'> |
245 <title>Options</title> | |
246 <variablelist> | |
247 <varlistentry> | |
248 <term>-d <replaceable class="parameter">debug-file</replaceable></term> | |
249 <listitem><para> | |
250 Specify name of debug log file. The | |
251 log file is not an ascii file, it is a binary file readable | |
252 by <command>readpstlog</command>. | |
253 </para></listitem> | |
254 </varlistentry> | |
255 <varlistentry> | |
256 <term>-h</term> | |
257 <listitem><para> | |
258 Show summary of options and exit. | |
259 </para></listitem> | |
260 </varlistentry> | |
261 <varlistentry> | |
262 <term>-V</term> | |
263 <listitem><para> | |
264 Show program version and exit. | |
265 </para></listitem> | |
266 </varlistentry> | |
267 </variablelist> | |
268 </refsect1> | |
269 | |
43 | 270 <refsect1 id='lspst.description.1'> |
271 <title>Description</title> | |
272 <para><command>lspst</command> is a program that can read an Outlook | |
273 PST (Personal Folders) file and produce a simple listing of the | |
274 data (contacts, email subjects, etc). | |
275 </para> | |
276 </refsect1> | |
277 | |
278 <refsect1 id='lspst.also.1'> | |
279 <title>See Also</title> | |
280 <para> | |
281 <citerefentry><refentrytitle>readpstlog</refentrytitle> <manvolnum>1</manvolnum> </citerefentry> | |
282 </para> | |
283 </refsect1> | |
284 | |
285 <refsect1 id='lspst.author.1'> | |
286 <title>Author</title> | |
287 <para> | |
288 lspst was written by Joe Nahmias <joe@nahmias.net> based on readpst. | |
289 This man page was written by 510 Software Group <carl@five-ten-sg.com>. | |
290 </para> | |
291 </refsect1> | |
292 | |
293 <refsect1 id='lspst.copyright.1'> | |
294 <title>Copyright</title> | |
295 <para> | |
296 Copyright (C) 2004 by Joe Nahmias <joe@nahmias.net>. | |
297 </para> | |
298 <para> | |
299 This program is free software; you can redistribute it and/or modify it | |
300 under the terms of the GNU General Public License as published by the | |
301 Free Software Foundation; either version 2, or (at your option) any | |
302 later version. | |
303 </para> | |
304 <para> | |
305 You should have received a copy of the GNU General Public License along | |
306 with this program; see the file COPYING. If not, please write to the | |
307 Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. | |
308 </para> | |
309 </refsect1> | |
310 | |
311 <refsect1 id='lspst.version.1'> | |
312 <title>CVS Version</title> | |
313 <para> | |
314 $Id$ | |
315 </para> | |
316 </refsect1> | |
317 </refentry> | |
318 | |
319 | |
16 | 320 <refentry id="readpstlog.1"> |
321 <refentryinfo> | |
50 | 322 <date>2008-01-19</date> |
16 | 323 </refentryinfo> |
324 | |
325 <refmeta> | |
326 <refentrytitle>readpstlog</refentrytitle> | |
327 <manvolnum>1</manvolnum> | |
328 <refmiscinfo>readpstlog @VERSION@</refmiscinfo> | |
329 </refmeta> | |
330 | |
20 | 331 <refnamediv id='readpstlog.name.1'> |
16 | 332 <refname>readpstlog</refname> |
24 | 333 <refpurpose>convert a <command>readpst</command> logfile to text format</refpurpose> |
16 | 334 </refnamediv> |
335 | |
20 | 336 <refsynopsisdiv id='readpstlog.synopsis.1'> |
16 | 337 <title>Synopsis</title> |
338 <cmdsynopsis> | |
24 | 339 <command>readpstlog</command> |
16 | 340 <arg><option>-f <replaceable class="parameter">format</replaceable></option></arg> |
341 <arg><option>-t <replaceable class="parameter">include-types</replaceable></option></arg> | |
342 <arg><option>-x <replaceable class="parameter">exclude-types</replaceable></option></arg> | |
24 | 343 <arg choice='plain'>logfile</arg> |
16 | 344 </cmdsynopsis> |
345 </refsynopsisdiv> | |
346 | |
20 | 347 <refsect1 id='readpstlog.description.1'> |
348 <title>Description</title> | |
21 | 349 <para><command>readpstlog</command> |
24 | 350 is a program that converts the binary logfile generated |
351 by <command>readpst</command> to a more desirable text format. | |
20 | 352 </para> |
353 </refsect1> | |
354 | |
355 <refsect1 id='readpstlog.options.1'> | |
16 | 356 <title>Options</title> |
357 <variablelist> | |
358 <varlistentry> | |
359 <term>-f <replaceable class="parameter">format</replaceable></term> | |
360 <listitem><para> | |
361 Sets the format of the text log output. Currently, the only valid output | |
36 | 362 formats are T, for single line text, D for the default default multi line |
363 format, and I for an indented style with single line text. | |
16 | 364 </para></listitem> |
365 </varlistentry> | |
366 <varlistentry> | |
367 <term>-t <replaceable class="parameter">include-types</replaceable></term> | |
368 <listitem><para> | |
369 Print only the specified types of log messages. | |
370 Types are specified in a comma-delimited list (e.g. 3,10,5,6). | |
371 </para></listitem> | |
372 </varlistentry> | |
373 <varlistentry> | |
374 <term>-x <replaceable class="parameter">exclude-types</replaceable></term> | |
375 <listitem><para> | |
376 Exclude the specified types of log messages. | |
377 Types are specified in a comma-delimited list (e.g. 3,10,5,6). | |
378 </para></listitem> | |
379 </varlistentry> | |
380 </variablelist> | |
381 </refsect1> | |
382 | |
20 | 383 <refsect1 id='readpstlog.message.types.1'> |
16 | 384 <title>Message Types</title> |
24 | 385 <para><command>readpstlog</command> understands the following types of log |
386 messages: | |
16 | 387 </para> |
388 <variablelist> | |
20 | 389 <varlistentry> |
390 <term>1</term> | |
391 <listitem><para> | |
392 File accesses | |
393 </para></listitem> | |
394 </varlistentry> | |
395 <varlistentry> | |
396 <term>2</term> | |
397 <listitem><para> | |
398 Index accesses | |
399 </para></listitem> | |
400 </varlistentry> | |
401 <varlistentry> | |
402 <term>3</term> | |
403 <listitem><para> | |
404 New email found | |
405 </para></listitem> | |
406 </varlistentry> | |
407 <varlistentry> | |
408 <term>4</term> | |
409 <listitem><para> | |
410 Warnings | |
411 </para></listitem> | |
412 </varlistentry> | |
413 <varlistentry> | |
414 <term>5</term> | |
415 <listitem><para> | |
416 Read accesses | |
417 </para></listitem> | |
418 </varlistentry> | |
419 <varlistentry> | |
420 <term>6</term> | |
421 <listitem><para> | |
422 Informational messages | |
423 </para></listitem> | |
424 </varlistentry> | |
425 <varlistentry> | |
426 <term>7</term> | |
427 <listitem><para> | |
428 Main function calls | |
429 </para></listitem> | |
430 </varlistentry> | |
431 <varlistentry> | |
432 <term>8</term> | |
433 <listitem><para> | |
434 Decrypting calls | |
435 </para></listitem> | |
436 </varlistentry> | |
437 <varlistentry> | |
36 | 438 <term>9</term> |
439 <listitem><para> | |
440 Function entries | |
441 </para></listitem> | |
442 </varlistentry> | |
443 <varlistentry> | |
20 | 444 <term>10</term> |
445 <listitem><para> | |
36 | 446 Function exits |
20 | 447 </para></listitem> |
448 </varlistentry> | |
449 <varlistentry> | |
450 <term>11</term> | |
451 <listitem><para> | |
452 HexDump calls | |
453 </para></listitem> | |
454 </varlistentry> | |
16 | 455 </variablelist> |
456 </refsect1> | |
457 | |
20 | 458 <refsect1 id='readpstlog.author.1'> |
16 | 459 <title>Author</title> |
460 <para> | |
461 This manual page was written by Joe Nahmias <joe@nahmias.net> | |
462 for the Debian GNU/Linux system (but may be used by others). It was | |
463 converted to xml format by Carl Byington <carl@five-ten-sg.com>. | |
464 </para> | |
465 </refsect1> | |
466 | |
20 | 467 <refsect1 id='readpstlog.copyright.1'> |
16 | 468 <title>Copyright</title> |
469 <para> | |
470 Copyright (C) 2002 by David Smith <dave.s@earthcorp.com>. | |
471 XML version Copyright (C) 2005 by 510 Software Group <carl@five-ten-sg.com>. | |
472 </para> | |
473 <para> | |
474 This program is free software; you can redistribute it and/or modify it | |
475 under the terms of the GNU General Public License as published by the | |
476 Free Software Foundation; either version 2, or (at your option) any | |
477 later version. | |
478 </para> | |
479 <para> | |
480 You should have received a copy of the GNU General Public License along | |
481 with this program; see the file COPYING. If not, please write to the | |
482 Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. | |
483 </para> | |
484 </refsect1> | |
485 | |
20 | 486 <refsect1 id='readpstlog.version.1'> |
16 | 487 <title>CVS Version</title> |
488 <para> | |
489 $Id$ | |
490 </para> | |
491 </refsect1> | |
492 </refentry> | |
24 | 493 |
494 | |
495 <refentry id="pst2ldif.1"> | |
496 <refentryinfo> | |
50 | 497 <date>2008-01-19</date> |
24 | 498 </refentryinfo> |
499 | |
500 <refmeta> | |
501 <refentrytitle>pst2ldif</refentrytitle> | |
502 <manvolnum>1</manvolnum> | |
503 <refmiscinfo>pst2ldif @VERSION@</refmiscinfo> | |
504 </refmeta> | |
505 | |
506 <refnamediv id='pst2ldif.name.1'> | |
507 <refname>pst2ldif</refname> | |
508 <refpurpose>extract contacts from a MS Outlook .pst file in .ldif format</refpurpose> | |
509 </refnamediv> | |
510 | |
511 <refsynopsisdiv id='pst2ldif.synopsis.1'> | |
512 <title>Synopsis</title> | |
513 <cmdsynopsis> | |
514 <command>pst2ldif</command> | |
515 <arg><option>-h</option></arg> | |
516 <arg><option>-V</option></arg> | |
517 <arg><option>-b <replaceable class="parameter">ldap-base</replaceable></option></arg> | |
518 <arg><option>-c <replaceable class="parameter">class</replaceable></option></arg> | |
33
12cac756bc05
enable -d option, but if not specified, don't generate a debug file
carl
parents:
32
diff
changeset
|
519 <arg><option>-d <replaceable class="parameter">debug-file</replaceable></option></arg> |
24 | 520 <arg choice='plain'>pstfilename</arg> |
521 </cmdsynopsis> | |
522 </refsynopsisdiv> | |
523 | |
524 <refsect1 id='pst2ldif.options.1'> | |
525 <title>Options</title> | |
526 <variablelist> | |
527 <varlistentry> | |
528 <term>-h</term> | |
529 <listitem><para> | |
530 Show summary of options. Subsequent options are then ignored. | |
531 </para></listitem> | |
532 </varlistentry> | |
533 <varlistentry> | |
534 <term>-V <replaceable class="parameter">include-types</replaceable></term> | |
535 <listitem><para> | |
536 Show program version. Subsequent options are then ignored. | |
537 </para></listitem> | |
538 </varlistentry> | |
539 <varlistentry> | |
540 <term>-b <replaceable class="parameter">ldap-base</replaceable></term> | |
541 <listitem><para> | |
542 Sets the ldap base value used in the dn records. You probably want to | |
543 use something like "o=organization, c=US". | |
544 </para></listitem> | |
545 </varlistentry> | |
546 <varlistentry> | |
547 <term>-c <replaceable class="parameter">class</replaceable></term> | |
548 <listitem><para> | |
549 Sets the objectClass values for the contact items. This class needs to be | |
550 defined in the schema used by your LDAP server, and at a minimum it must | |
551 contain the ldap attributes given below. | |
552 </para></listitem> | |
553 </varlistentry> | |
33
12cac756bc05
enable -d option, but if not specified, don't generate a debug file
carl
parents:
32
diff
changeset
|
554 <varlistentry> |
12cac756bc05
enable -d option, but if not specified, don't generate a debug file
carl
parents:
32
diff
changeset
|
555 <term>-d <replaceable class="parameter">debug-file</replaceable></term> |
12cac756bc05
enable -d option, but if not specified, don't generate a debug file
carl
parents:
32
diff
changeset
|
556 <listitem><para> |
12cac756bc05
enable -d option, but if not specified, don't generate a debug file
carl
parents:
32
diff
changeset
|
557 Specify name of debug log file. The |
12cac756bc05
enable -d option, but if not specified, don't generate a debug file
carl
parents:
32
diff
changeset
|
558 log file is not an ascii file, it is a binary file readable |
12cac756bc05
enable -d option, but if not specified, don't generate a debug file
carl
parents:
32
diff
changeset
|
559 by <command>readpstlog</command>. |
12cac756bc05
enable -d option, but if not specified, don't generate a debug file
carl
parents:
32
diff
changeset
|
560 </para></listitem> |
12cac756bc05
enable -d option, but if not specified, don't generate a debug file
carl
parents:
32
diff
changeset
|
561 </varlistentry> |
24 | 562 </variablelist> |
563 </refsect1> | |
564 | |
565 <refsect1 id='pst2ldif.description.1'> | |
566 <title>Description</title> | |
567 <para><command>pst2ldif</command> | |
568 reads the contact information from a MS Outlook .pst file | |
569 and produces a .ldif file that may be used to import those contacts | |
570 into an LDAP database. The following ldap attributes are generated: | |
571 <simplelist> | |
572 <member>cn </member> | |
573 <member>givenName </member> | |
574 <member>sn </member> | |
575 <member>personalTitle </member> | |
576 <member>company </member> | |
577 <member>mail </member> | |
578 <member>postalAddress </member> | |
579 <member>l </member> | |
580 <member>st </member> | |
581 <member>postalCode </member> | |
582 <member>c </member> | |
583 <member>homePhone </member> | |
584 <member>telephoneNumber </member> | |
585 <member>facsimileTelephoneNumber </member> | |
586 <member>mobile </member> | |
587 <member>description </member> | |
588 </simplelist> | |
589 </para> | |
590 </refsect1> | |
591 | |
592 <refsect1 id='pst2ldif.copyright.1'> | |
593 <title>Copyright</title> | |
594 <para> | |
595 Copyright (C) 2006 by 510 Software Group <carl@five-ten-sg.com> | |
596 </para> | |
597 <para> | |
598 This program is free software; you can redistribute it and/or modify it | |
599 under the terms of the GNU General Public License as published by the | |
600 Free Software Foundation; either version 2, or (at your option) any | |
601 later version. | |
602 </para> | |
603 <para> | |
604 You should have received a copy of the GNU General Public License along | |
605 with this program; see the file COPYING. If not, please write to the | |
606 Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. | |
607 </para> | |
608 </refsect1> | |
609 | |
610 <refsect1 id='pst2ldif.version.1'> | |
611 <title>CVS Version</title> | |
612 <para> | |
613 $Id$ | |
614 </para> | |
615 </refsect1> | |
616 </refentry> | |
617 | |
618 | |
619 <refentry id="pst.5"> | |
620 <refentryinfo> | |
50 | 621 <date>2008-01-19</date> |
24 | 622 </refentryinfo> |
623 | |
624 <refmeta> | |
625 <refentrytitle>outlook.pst</refentrytitle> | |
626 <manvolnum>5</manvolnum> | |
627 </refmeta> | |
628 | |
629 <refnamediv id='pst.name.1'> | |
630 <refname>outlook.pst</refname> | |
631 <refpurpose>format of MS Outlook .pst file</refpurpose> | |
632 </refnamediv> | |
633 | |
634 <refsynopsisdiv id='pst.synopsis.1'> | |
635 <title>Synopsis</title> | |
636 <cmdsynopsis> | |
637 <command>outlook.pst</command> | |
638 </cmdsynopsis> | |
639 </refsynopsisdiv> | |
640 | |
641 <refsect1 id='pst.file.overview.5'> | |
642 <title>Overview</title> | |
643 <para> | |
644 Each item in a .pst file is identified by two id values ID1 and ID2. | |
645 There are two separate b-trees indexed by these ID1 and ID2 values. | |
44 | 646 Starting with Outlook 2003, the file format changed from one with 32 |
647 bit pointers, to one with 64 bit pointers. We describe both formats | |
648 here. | |
24 | 649 </para> |
650 </refsect1> | |
651 | |
44 | 652 <refsect1 id='pst.file.header.32.5'> |
653 <title>32 bit File Header</title> | |
24 | 654 <para> |
44 | 655 The 32 bit file header is located at offset 0 in the .pst file. |
24 | 656 </para> |
657 <literallayout class="monospaced"><![CDATA[ | |
658 0000 21 42 44 4e 49 f8 64 d9 53 4d 0e 00 13 00 01 01 | |
659 0010 00 00 00 00 00 00 00 00 50 d6 03 00 bd 1e 02 00 | |
660 0020 08 4c 00 00 00 04 00 00 00 04 00 00 0f 04 00 00 | |
661 0030 0d 40 00 00 99 0a 01 00 18 04 00 00 0d 40 00 00 | |
662 0040 0d 40 00 00 11 80 00 00 02 04 00 00 0a 04 00 00 | |
663 0050 00 04 00 00 00 04 00 00 0f 04 00 00 0f 04 00 00 | |
664 0060 0f 04 00 00 0d 40 00 00 00 04 00 00 00 04 00 00 | |
665 0070 04 40 00 00 00 04 00 00 00 04 00 00 00 04 00 00 | |
666 0080 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 | |
667 0090 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 | |
668 00a0 0c 09 00 00 00 00 00 00 00 04 27 00 00 24 23 00 | |
669 00b0 c0 09 0a 00 00 c8 00 00 bc 1e 02 00 00 7e 0c 00 | |
670 00c0 b4 1e 02 00 00 54 00 00 01 00 00 00 23 55 44 d1 | |
671 00d0 5a 4f ce 6b 80 ff ff ff 00 00 00 00 00 00 00 00 | |
672 00e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
673 00f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
674 0100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
675 0110 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
676 0120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
677 0130 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
678 0140 00 00 00 00 00 00 00 00 00 00 00 00 3f ff ff ff | |
679 0150 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff | |
680 0160 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff | |
681 0170 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff | |
682 0180 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff | |
683 0190 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff | |
684 01a0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff | |
685 01b0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff | |
686 01c0 ff ff ff ff ff ff ff ff ff ff ff ff 80 01 00 00 | |
687 01d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
688 01e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
689 01f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
690 | |
691 0000 signature [4 bytes] 0x4e444221 constant | |
28 | 692 000a indexType [1 byte] 0x0e constant |
44 | 693 01cd encryptionType [1 byte] 0x01 in this case |
24 | 694 00a8 total file size [4 bytes] 0x270400 in this case |
28 | 695 00c0 backPointer1 [4 bytes] 0x021eb4 in this case |
696 00c4 offsetIndex1 [4 bytes] 0x005400 in this case | |
697 00b8 backPointer2 [4 bytes] 0x021ebc in this case | |
698 00bc offsetIndex2 [4 bytes] 0x0c7e00 in this case | |
24 | 699 ]]></literallayout> |
700 <para> | |
44 | 701 We only support index types 0x0e and 0x17, and encryption types |
702 0x00 and 0x01. Index type 0x0e is the older 32 bit Outlook format. | |
703 Index type 0x17 is the newer 64 bit Outlook format. Encryption | |
704 type 0x00 is no encryption, and type 0x01 is the only other supported | |
705 encryption type. | |
24 | 706 </para> |
707 <para> | |
28 | 708 offsetIndex1 is the file offset of the root of the |
24 | 709 index1 b-tree, which contains (ID1, offset, size, unknown) tuples |
28 | 710 for each item in the file. backPointer1 is the value that should |
24 | 711 appear in the parent pointer of that root node. |
712 </para> | |
713 <para> | |
28 | 714 offsetIndex2 is the file offset of the root of the |
24 | 715 index2 b-tree, which contains (ID2, DESC-ID1, LIST-ID1, PARENT-ID2) |
28 | 716 tuples for each item in the file. backPointer2 is the value that should |
24 | 717 appear in the parent pointer of that root node. |
718 </para> | |
719 </refsect1> | |
720 | |
44 | 721 <refsect1 id='pst.file.header.64.5'> |
722 <title>64 bit File Header</title> | |
24 | 723 <para> |
44 | 724 The 64 bit file header is located at offset 0 in the .pst file. |
725 </para> | |
726 <literallayout class="monospaced"><![CDATA[ | |
727 0000 21 42 44 4e 03 02 23 b2 53 4d 17 00 13 00 01 01 | |
728 0010 00 00 00 00 00 00 00 00 04 00 00 00 01 00 00 00 | |
729 0020 8b 00 00 00 00 00 00 00 1d 00 00 00 00 04 00 00 | |
730 0030 00 04 00 00 04 04 00 00 00 40 00 00 02 00 01 00 | |
731 0040 00 04 00 00 00 04 00 00 00 04 00 00 00 80 00 00 | |
732 0050 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 | |
733 0060 04 04 00 00 04 04 00 00 04 04 00 00 00 04 00 00 | |
734 0070 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 | |
735 0080 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 | |
736 0090 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 | |
737 00a0 00 04 00 00 00 04 00 00 02 04 00 00 00 00 00 00 | |
738 00b0 00 00 00 00 00 00 00 00 00 24 04 00 00 00 00 00 | |
739 00c0 00 44 00 00 00 00 00 00 00 71 03 00 00 00 00 00 | |
740 00d0 00 22 00 00 00 00 00 00 83 00 00 00 00 00 00 00 | |
741 00e0 00 6a 00 00 00 00 00 00 8a 00 00 00 00 00 00 00 | |
742 00f0 00 60 00 00 00 00 00 00 01 00 00 00 00 00 00 00 | |
743 0100 ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
744 0110 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
745 0120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
746 0130 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
747 0140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
748 0150 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
749 0160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
750 0170 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
751 0180 7f ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff | |
752 0190 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff | |
753 01a0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff | |
754 01b0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff | |
755 01c0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff | |
756 01d0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff | |
757 01e0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff | |
758 01f0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff | |
759 0200 80 00 00 00 e8 00 00 00 00 00 00 00 c4 68 cb 89 | |
760 | |
761 0000 signature [4 bytes] 0x4e444221 constant | |
762 000a indexType [1 byte] 0x17 constant | |
763 0201 encryptionType [1 byte] 0x00 in this case | |
764 00b8 total file size [8 bytes] 0x042400 in this case | |
765 00e8 backPointer1 [8 bytes] 0x00008a in this case | |
766 00f0 offsetIndex1 [8 bytes] 0x006000 in this case | |
767 00d8 backPointer2 [8 bytes] 0x000083 in this case | |
768 00e0 offsetIndex2 [8 bytes] 0x006a00 in this case | |
769 ]]></literallayout> | |
770 </refsect1> | |
771 | |
772 <refsect1 id='pst.file.node1.32.5'> | |
773 <title>32 bit Index 1 Node</title> | |
774 <para> | |
775 The 32 bit index1 b-tree nodes are 516 byte blocks with the | |
776 following format. | |
24 | 777 </para> |
778 <literallayout class="monospaced"><![CDATA[ | |
779 0000 04 00 00 00 8a 1e 02 00 00 1c 0b 00 | |
780 000c 58 27 03 00 b3 1e 02 00 00 52 00 00 | |
781 0018 00 00 00 00 00 00 00 00 00 00 00 00 | |
782 0024 00 00 00 00 00 00 00 00 00 00 00 00 | |
783 0030 00 00 00 00 00 00 00 00 00 00 00 00 | |
784 003c 00 00 00 00 00 00 00 00 00 00 00 00 | |
785 0048 00 00 00 00 00 00 00 00 00 00 00 00 | |
786 0054 00 00 00 00 00 00 00 00 00 00 00 00 | |
787 0060 00 00 00 00 00 00 00 00 00 00 00 00 | |
788 006c 00 00 00 00 00 00 00 00 00 00 00 00 | |
789 0078 00 00 00 00 00 00 00 00 00 00 00 00 | |
790 0084 00 00 00 00 00 00 00 00 00 00 00 00 | |
791 0090 00 00 00 00 00 00 00 00 00 00 00 00 | |
792 009c 00 00 00 00 00 00 00 00 00 00 00 00 | |
793 00a8 00 00 00 00 00 00 00 00 00 00 00 00 | |
794 00b4 00 00 00 00 00 00 00 00 00 00 00 00 | |
795 00c0 00 00 00 00 00 00 00 00 00 00 00 00 | |
796 00cc 00 00 00 00 00 00 00 00 00 00 00 00 | |
797 00d8 00 00 00 00 00 00 00 00 00 00 00 00 | |
798 00e4 00 00 00 00 00 00 00 00 00 00 00 00 | |
799 00f0 00 00 00 00 00 00 00 00 00 00 00 00 | |
800 00fc 00 00 00 00 00 00 00 00 00 00 00 00 | |
801 0108 00 00 00 00 00 00 00 00 00 00 00 00 | |
802 0114 00 00 00 00 00 00 00 00 00 00 00 00 | |
803 0120 00 00 00 00 00 00 00 00 00 00 00 00 | |
804 012c 00 00 00 00 00 00 00 00 00 00 00 00 | |
805 0138 00 00 00 00 00 00 00 00 00 00 00 00 | |
806 0144 00 00 00 00 00 00 00 00 00 00 00 00 | |
807 0150 00 00 00 00 00 00 00 00 00 00 00 00 | |
808 015c 00 00 00 00 00 00 00 00 00 00 00 00 | |
809 0168 00 00 00 00 00 00 00 00 00 00 00 00 | |
810 0174 00 00 00 00 00 00 00 00 00 00 00 00 | |
811 0180 00 00 00 00 00 00 00 00 00 00 00 00 | |
812 018c 00 00 00 00 00 00 00 00 00 00 00 00 | |
813 0198 00 00 00 00 00 00 00 00 00 00 00 00 | |
814 01a4 00 00 00 00 00 00 00 00 00 00 00 00 | |
815 01b0 00 00 00 00 00 00 00 00 00 00 00 00 | |
816 01bc 00 00 00 00 00 00 00 00 00 00 00 00 | |
817 01c8 00 00 00 00 00 00 00 00 00 00 00 00 | |
818 01d4 00 00 00 00 00 00 00 00 00 00 00 00 | |
819 01e0 00 00 00 00 00 00 00 00 00 00 00 00 | |
820 01ec 00 00 00 00 02 29 0c 02 80 80 b6 4a | |
821 01f8 b4 1e 02 00 27 9c cc 56 58 27 03 00 | |
822 | |
28 | 823 01f0 itemCount [1 byte] 0x02 in this case |
824 01f1 maxItemCount [1 byte] 0x29 constant | |
825 01f3 nodeLevel [1 byte] 0x02 in this case | |
826 01f8 backPointer [4 bytes] 0x021eb4 in this case | |
24 | 827 ]]></literallayout> |
828 <para> | |
28 | 829 The itemCount specifies the number of 12 byte records that |
830 are active. The nodeLevel is non-zero for this style of nodes. | |
831 The leaf nodes have a different format. The backPointer must | |
832 match the backPointer from the triple that pointed to this node. | |
24 | 833 </para> |
834 <para> | |
35 | 835 Each item in this node is a triple of (ID1, backPointer, offset) |
24 | 836 where the offset points to the next deeper node in the tree, the |
28 | 837 backPointer value must match the backPointer in that deeper node, |
35 | 838 and ID1 is the lowest ID1 value in the subtree. |
24 | 839 </para> |
840 </refsect1> | |
841 | |
44 | 842 <refsect1 id='pst.file.node1.64.5'> |
843 <title>64 bit Index 1 Node</title> | |
24 | 844 <para> |
44 | 845 The 64 bit index1 b-tree nodes are 512 byte blocks with the |
846 following format. | |
847 </para> | |
848 <literallayout class="monospaced"><![CDATA[ | |
849 0000 04 00 00 00 00 00 00 00 88 00 00 00 | |
850 000C 00 00 00 00 00 48 00 00 00 00 00 00 | |
851 0018 74 00 00 00 00 00 00 00 86 00 00 00 | |
852 0024 00 00 00 00 00 54 00 00 00 00 00 00 | |
853 0030 00 00 00 00 00 00 00 00 00 00 00 00 | |
854 003C 00 00 00 00 00 00 00 00 00 00 00 00 | |
855 0048 00 00 00 00 00 00 00 00 00 00 00 00 | |
856 0054 00 00 00 00 00 00 00 00 00 00 00 00 | |
857 0060 00 00 00 00 00 00 00 00 00 00 00 00 | |
858 006C 00 00 00 00 00 00 00 00 00 00 00 00 | |
859 0078 00 00 00 00 00 00 00 00 00 00 00 00 | |
860 0084 00 00 00 00 00 00 00 00 00 00 00 00 | |
861 0090 00 00 00 00 00 00 00 00 00 00 00 00 | |
862 009C 00 00 00 00 00 00 00 00 00 00 00 00 | |
863 00A8 00 00 00 00 00 00 00 00 00 00 00 00 | |
864 00B4 00 00 00 00 00 00 00 00 00 00 00 00 | |
865 00C0 00 00 00 00 00 00 00 00 00 00 00 00 | |
866 00CC 00 00 00 00 00 00 00 00 00 00 00 00 | |
867 00D8 00 00 00 00 00 00 00 00 00 00 00 00 | |
868 00E4 00 00 00 00 00 00 00 00 00 00 00 00 | |
869 00F0 00 00 00 00 00 00 00 00 00 00 00 00 | |
870 00FC 00 00 00 00 00 00 00 00 00 00 00 00 | |
871 0108 00 00 00 00 00 00 00 00 00 00 00 00 | |
872 0114 00 00 00 00 00 00 00 00 00 00 00 00 | |
873 0120 00 00 00 00 00 00 00 00 00 00 00 00 | |
874 012C 00 00 00 00 00 00 00 00 00 00 00 00 | |
875 0138 00 00 00 00 00 00 00 00 00 00 00 00 | |
876 0144 00 00 00 00 00 00 00 00 00 00 00 00 | |
877 0150 00 00 00 00 00 00 00 00 00 00 00 00 | |
878 015C 00 00 00 00 00 00 00 00 00 00 00 00 | |
879 0168 00 00 00 00 00 00 00 00 00 00 00 00 | |
880 0174 00 00 00 00 00 00 00 00 00 00 00 00 | |
881 0180 00 00 00 00 00 00 00 00 00 00 00 00 | |
882 018C 00 00 00 00 00 00 00 00 00 00 00 00 | |
883 0198 00 00 00 00 00 00 00 00 00 00 00 00 | |
884 01A4 00 00 00 00 00 00 00 00 00 00 00 00 | |
885 01B0 00 00 00 00 00 00 00 00 00 00 00 00 | |
886 01BC 00 00 00 00 00 00 00 00 00 00 00 00 | |
887 01C8 00 00 00 00 00 00 00 00 00 00 00 00 | |
888 01D4 00 00 00 00 00 00 00 00 00 00 00 00 | |
889 01E0 00 00 00 00 00 00 00 00 02 14 18 01 | |
890 01EC 00 00 00 00 80 80 8a 60 68 e5 b5 19 | |
891 01F8 8a 00 00 00 00 00 00 00 | |
892 | |
893 01e8 itemCount [1 byte] 0x02 in this case | |
894 01e9 maxItemCount [1 byte] 0x14 constant | |
895 01eb nodeLevel [1 byte] 0x01 in this case | |
896 01f8 backPointer [8 bytes] 0x00008a in this case | |
897 ]]></literallayout> | |
898 <para> | |
899 The itemCount specifies the number of 24 byte records that | |
900 are active. The nodeLevel is non-zero for this style of nodes. | |
901 The leaf nodes have a different format. The backPointer must | |
902 match the backPointer from the triple that pointed to this node. | |
903 </para> | |
904 <para> | |
905 Each item in this node is a triple of (ID1, backPointer, offset) | |
906 where the offset points to the next deeper node in the tree, the | |
907 backPointer value must match the backPointer in that deeper node, | |
908 and ID1 is the lowest ID1 value in the subtree. | |
909 </para> | |
910 </refsect1> | |
911 | |
912 <refsect1 id='pst.file.leaf1.32.5'> | |
913 <title>32 bit Index 1 Leaf Node</title> | |
914 <para> | |
915 The 32 bit index1 b-tree leaf nodes are 516 byte blocks with the | |
916 following format. | |
24 | 917 </para> |
918 <literallayout class="monospaced"><![CDATA[ | |
919 0000 04 00 00 00 00 58 00 00 64 00 0f 00 | |
920 000c 08 00 00 00 80 58 00 00 ac 00 06 00 | |
921 0018 0c 00 00 00 40 59 00 00 ac 00 06 00 | |
922 0024 10 00 00 00 00 5a 00 00 bc 00 03 00 | |
923 0030 14 00 00 00 00 5b 00 00 a4 00 02 00 | |
924 003c 18 00 00 00 c0 5b 00 00 64 00 02 00 | |
925 0048 1c 00 00 00 40 5c 00 00 5c 00 02 00 | |
926 0054 50 00 00 00 80 62 00 00 60 00 02 00 | |
927 0060 74 00 00 00 00 77 00 00 5e 00 02 00 | |
928 006c 7c 00 00 00 80 77 00 00 66 00 02 00 | |
929 0078 84 00 00 00 00 76 00 00 ca 00 02 00 | |
930 0084 88 00 00 00 00 63 00 00 52 00 02 00 | |
931 0090 90 00 00 00 00 79 00 00 58 00 02 00 | |
932 009c cc 00 00 00 c0 61 00 00 76 00 02 00 | |
933 00a8 e0 00 00 00 00 61 00 00 74 00 02 00 | |
934 00b4 f4 00 00 00 80 65 00 00 6e 00 02 00 | |
935 00c0 8c 01 00 00 40 60 00 00 70 00 02 00 | |
936 00cc ea 01 00 00 80 61 00 00 10 00 02 00 | |
937 00d8 ec 01 00 00 40 8a 00 00 f3 01 02 00 | |
938 00e4 f0 01 00 00 80 93 00 00 f4 1f 02 00 | |
939 00f0 fa 01 00 00 c0 7f 00 00 10 00 02 00 | |
940 00fc 00 02 00 00 00 89 00 00 34 01 02 00 | |
941 0108 1c 02 00 00 40 ec 00 00 12 06 02 00 | |
942 0114 22 02 00 00 00 84 00 00 10 00 02 00 | |
943 0120 24 02 00 00 c0 ea 00 00 3c 01 02 00 | |
944 012c 40 02 00 00 00 f4 00 00 0a 06 02 00 | |
945 0138 46 02 00 00 40 8c 00 00 10 00 02 00 | |
946 0144 48 02 00 00 80 f2 00 00 36 01 02 00 | |
947 0150 64 02 00 00 80 fb 00 00 bf 07 02 00 | |
948 015c 6a 02 00 00 80 63 00 00 10 00 02 00 | |
949 0168 6c 02 00 00 40 fa 00 00 2a 01 02 00 | |
950 0174 6c 02 00 00 40 fa 00 00 2a 01 02 00 | |
951 0180 6c 02 00 00 40 fa 00 00 2a 01 02 00 | |
952 018c 6c 02 00 00 40 fa 00 00 2a 01 02 00 | |
953 0198 6c 02 00 00 40 fa 00 00 2a 01 02 00 | |
954 01a4 6c 02 00 00 40 fa 00 00 2a 01 02 00 | |
955 01b0 64 02 00 00 80 fb 00 00 bf 07 02 00 | |
956 01bc 64 02 00 00 80 fb 00 00 bf 07 02 00 | |
957 01c8 64 02 00 00 80 fb 00 00 bf 07 02 00 | |
958 01d4 64 02 00 00 80 fb 00 00 bf 07 02 00 | |
959 01e0 64 02 00 00 80 fb 00 00 bf 07 02 00 | |
960 01ec 00 00 00 00 1f 29 0c 00 80 80 5b b3 | |
961 01f8 5a 67 01 00 4f ae 70 a7 92 06 00 00 | |
962 | |
28 | 963 01f0 itemCount [1 byte] 0x1f in this case |
964 01f1 maxItemCount [1 byte] 0x29 constant | |
44 | 965 01f3 nodeLevel [1 byte] 0x00 defines a leaf node |
28 | 966 01f8 backPointer [4 bytes] 0x01675a in this case |
24 | 967 ]]></literallayout> |
968 <para> | |
28 | 969 The itemCount specifies the number of 12 byte records that |
970 are active. The nodeLevel is zero for these leaf nodes. | |
971 The backPointer must match the backPointer from the triple | |
24 | 972 that pointed to this node. |
973 </para> | |
974 <para> | |
975 Each item in this node is a tuple of (ID1, offset, size, unknown) | |
35 | 976 The two low order bits of the ID1 value seem to be flags. I have |
977 never seen a case with bit zero set. Bit one indicates that the | |
978 item is <emphasis>not</emphasis> encrypted. Note that references | |
979 to these ID1 values elsewhere may have the low order bit set (and | |
980 I don't know what that means), but when we do the search in this | |
981 tree we need to clear that bit so that we can find the correct item. | |
24 | 982 </para> |
983 </refsect1> | |
984 | |
44 | 985 <refsect1 id='pst.file.leaf1.64.5'> |
986 <title>64 bit Index 1 Leaf Node</title> | |
24 | 987 <para> |
44 | 988 The 64 bit index1 b-tree leaf nodes are 512 byte blocks with the |
989 following format. | |
990 </para> | |
991 <literallayout class="monospaced"><![CDATA[ | |
992 0000 04 00 00 00 00 00 00 00 00 58 00 00 | |
993 000C 00 00 00 00 6c 00 05 00 00 00 00 00 | |
994 0018 08 00 00 00 00 00 00 00 80 58 00 00 | |
995 0024 00 00 00 00 b4 00 06 00 d8 22 37 08 | |
996 0030 0c 00 00 00 00 00 00 00 80 59 00 00 | |
997 003C 00 00 00 00 ac 00 07 00 d8 22 37 08 | |
998 0048 10 00 00 00 00 00 00 00 40 5a 00 00 | |
999 0054 00 00 00 00 bc 00 03 00 d8 22 37 08 | |
1000 0060 14 00 00 00 00 00 00 00 40 5b 00 00 | |
1001 006C 00 00 00 00 a4 00 02 00 d8 22 37 08 | |
1002 0078 18 00 00 00 00 00 00 00 00 5c 00 00 | |
1003 0084 00 00 00 00 64 00 02 00 d8 22 37 08 | |
1004 0090 1c 00 00 00 00 00 00 00 80 5c 00 00 | |
1005 009C 00 00 00 00 5c 00 02 00 d8 22 37 08 | |
1006 00A8 24 00 00 00 00 00 00 00 80 5d 00 00 | |
1007 00B4 00 00 00 00 72 00 02 00 d8 22 37 08 | |
1008 00C0 34 00 00 00 00 00 00 00 00 70 00 00 | |
1009 00CC 00 00 00 00 8c 00 02 00 00 0d 00 00 | |
1010 00D8 38 00 00 00 00 00 00 00 c0 71 00 00 | |
1011 00E4 00 00 00 00 5c 00 02 00 d8 22 9c 00 | |
1012 00F0 40 00 00 00 00 00 00 00 40 72 00 00 | |
1013 00FC 00 00 00 00 26 00 02 00 d8 22 9c 00 | |
1014 0108 4c 00 00 00 00 00 00 00 80 5f 00 00 | |
1015 0114 00 00 00 00 3e 00 02 00 d8 22 9c 00 | |
1016 0120 5c 00 00 00 00 00 00 00 c0 76 00 00 | |
1017 012C 00 00 00 00 8c 00 02 00 d8 22 9c 00 | |
1018 0138 64 00 00 00 00 00 00 00 40 75 00 00 | |
1019 0144 00 00 00 00 76 00 02 00 d8 22 9c 00 | |
1020 0150 6c 00 00 00 00 00 00 00 c0 73 00 00 | |
1021 015C 00 00 00 00 5e 00 02 00 d8 22 9c 00 | |
1022 0168 70 00 00 00 00 00 00 00 80 72 00 00 | |
1023 0174 00 00 00 00 1e 01 02 00 d8 22 9c 00 | |
1024 0180 70 00 00 00 00 00 00 00 80 72 00 00 | |
1025 018C 00 00 00 00 1e 01 02 00 d8 22 9c 00 | |
1026 0198 70 00 00 00 00 00 00 00 80 72 00 00 | |
1027 01A4 00 00 00 00 1e 01 02 00 d8 22 9c 00 | |
1028 01B0 74 00 00 00 00 00 00 00 40 74 00 00 | |
1029 01BC 00 00 00 00 e0 00 02 00 d8 22 9c 00 | |
1030 01C8 7c 00 00 00 00 00 00 00 80 77 00 00 | |
1031 01D4 00 00 00 00 dc 00 02 00 d8 22 9c 00 | |
1032 01E0 00 00 00 00 00 00 00 00 10 14 18 00 | |
1033 01EC 00 00 00 00 80 80 88 48 3f 50 0b 04 | |
1034 01F8 88 00 00 00 00 00 00 00 | |
1035 | |
1036 01e8 itemCount [1 byte] 0x10 in this case | |
1037 01e9 maxItemCount [1 byte] 0x14 constant | |
1038 01eb nodeLevel [1 byte] 0x00 defines a leaf node | |
1039 01f8 backPointer [8 bytes] 0x000088 in this case | |
1040 ]]></literallayout> | |
1041 <para> | |
1042 The itemCount specifies the number of 24 byte records that | |
1043 are active. The nodeLevel is zero for these leaf nodes. | |
1044 The backPointer must match the backPointer from the triple | |
1045 that pointed to this node. | |
1046 </para> | |
1047 <para> | |
1048 Each item in this node is a tuple of (ID1, offset, size, unknown) | |
1049 The two low order bits of the ID1 value seem to be flags. I have | |
1050 never seen a case with bit zero set. Bit one indicates that the | |
1051 item is <emphasis>not</emphasis> encrypted. Note that references | |
1052 to these ID1 values elsewhere may have the low order bit set (and | |
1053 I don't know what that means), but when we do the search in this | |
1054 tree we need to clear that bit so that we can find the correct item. | |
1055 </para> | |
1056 </refsect1> | |
1057 | |
1058 <refsect1 id='pst.file.node2.32.5'> | |
1059 <title>32 bit Index 2 Node</title> | |
1060 <para> | |
1061 The 32 bit index2 b-tree nodes are 516 byte blocks with the | |
1062 following format. | |
24 | 1063 </para> |
1064 <literallayout class="monospaced"><![CDATA[ | |
1065 0000 21 00 00 00 bb 1e 02 00 00 e2 0b 00 | |
1066 000c 64 78 20 00 8c 1e 02 00 00 dc 0b 00 | |
1067 0018 00 00 00 00 00 00 00 00 00 00 00 00 | |
1068 0024 00 00 00 00 00 00 00 00 00 00 00 00 | |
1069 0030 00 00 00 00 00 00 00 00 00 00 00 00 | |
1070 003c 00 00 00 00 00 00 00 00 00 00 00 00 | |
1071 0048 00 00 00 00 00 00 00 00 00 00 00 00 | |
1072 0054 00 00 00 00 00 00 00 00 00 00 00 00 | |
1073 0060 00 00 00 00 00 00 00 00 00 00 00 00 | |
1074 006c 00 00 00 00 00 00 00 00 00 00 00 00 | |
1075 0078 00 00 00 00 00 00 00 00 00 00 00 00 | |
1076 0084 00 00 00 00 00 00 00 00 00 00 00 00 | |
1077 0090 00 00 00 00 00 00 00 00 00 00 00 00 | |
1078 009c 00 00 00 00 00 00 00 00 00 00 00 00 | |
1079 00a8 00 00 00 00 00 00 00 00 00 00 00 00 | |
1080 00b4 00 00 00 00 00 00 00 00 00 00 00 00 | |
1081 00c0 00 00 00 00 00 00 00 00 00 00 00 00 | |
1082 00cc 00 00 00 00 00 00 00 00 00 00 00 00 | |
1083 00d8 00 00 00 00 00 00 00 00 00 00 00 00 | |
1084 00e4 00 00 00 00 00 00 00 00 00 00 00 00 | |
1085 00f0 00 00 00 00 00 00 00 00 00 00 00 00 | |
1086 00fc 00 00 00 00 00 00 00 00 00 00 00 00 | |
1087 0108 00 00 00 00 00 00 00 00 00 00 00 00 | |
1088 0114 00 00 00 00 00 00 00 00 00 00 00 00 | |
1089 0120 00 00 00 00 00 00 00 00 00 00 00 00 | |
1090 012c 00 00 00 00 00 00 00 00 00 00 00 00 | |
1091 0138 00 00 00 00 00 00 00 00 00 00 00 00 | |
1092 0144 00 00 00 00 00 00 00 00 00 00 00 00 | |
1093 0150 00 00 00 00 00 00 00 00 00 00 00 00 | |
1094 015c 00 00 00 00 00 00 00 00 00 00 00 00 | |
1095 0168 00 00 00 00 00 00 00 00 00 00 00 00 | |
1096 0174 00 00 00 00 00 00 00 00 00 00 00 00 | |
1097 0180 00 00 00 00 00 00 00 00 00 00 00 00 | |
1098 018c 00 00 00 00 00 00 00 00 00 00 00 00 | |
1099 0198 00 00 00 00 00 00 00 00 00 00 00 00 | |
1100 01a4 00 00 00 00 00 00 00 00 00 00 00 00 | |
1101 01b0 00 00 00 00 00 00 00 00 00 00 00 00 | |
1102 01bc 00 00 00 00 00 00 00 00 00 00 00 00 | |
1103 01c8 00 00 00 00 00 00 00 00 00 00 00 00 | |
1104 01d4 00 00 00 00 00 00 00 00 00 00 00 00 | |
1105 01e0 00 00 00 00 00 00 00 00 00 00 00 00 | |
1106 01ec 00 00 00 00 02 29 0c 02 81 81 b2 60 | |
1107 01f8 bc 1e 02 00 7e 70 dc e3 21 00 00 00 | |
1108 | |
28 | 1109 01f0 itemCount [1 byte] 0x02 in this case |
1110 01f1 maxItemCount [1 byte] 0x29 constant | |
1111 01f3 nodeLevel [1 byte] 0x02 in this case | |
1112 01f8 backPointer [4 bytes] 0x021ebc in this case | |
24 | 1113 ]]></literallayout> |
1114 <para> | |
28 | 1115 The itemCount specifies the number of 12 byte records that |
1116 are active. The nodeLevel is non-zero for this style of nodes. | |
1117 The leaf nodes have a different format. The backPointer must | |
1118 match the backPointer from the triple that pointed to this node. | |
24 | 1119 </para> |
1120 <para> | |
28 | 1121 Each item in this node is a triple of (ID2, backPointer, offset) |
24 | 1122 where the offset points to the next deeper node in the tree, the |
28 | 1123 backPointer value must match the backPointer in that deeper node, |
24 | 1124 and ID2 is the lowest ID2 value in the subtree. |
1125 </para> | |
1126 </refsect1> | |
1127 | |
44 | 1128 <refsect1 id='pst.file.node2.64.5'> |
1129 <title>64 bit Index 2 Node</title> | |
24 | 1130 <para> |
44 | 1131 The 64 bit index2 b-tree nodes are 512 byte blocks with the |
1132 following format. | |
1133 </para> | |
1134 <literallayout class="monospaced"><![CDATA[ | |
1135 0000 21 00 00 00 00 00 00 00 77 00 00 00 | |
1136 000C 00 00 00 00 00 56 00 00 00 00 00 00 | |
1137 0018 4c 06 00 00 00 00 00 00 82 00 00 00 | |
1138 0024 00 00 00 00 00 68 00 00 00 00 00 00 | |
1139 0030 4f 80 00 00 00 00 00 00 84 00 00 00 | |
1140 003C 00 00 00 00 00 6e 00 00 00 00 00 00 | |
1141 0048 00 00 00 00 00 00 00 00 00 00 00 00 | |
1142 0054 00 00 00 00 00 00 00 00 00 00 00 00 | |
1143 0060 00 00 00 00 00 00 00 00 00 00 00 00 | |
1144 006C 00 00 00 00 00 00 00 00 00 00 00 00 | |
1145 0078 00 00 00 00 00 00 00 00 00 00 00 00 | |
1146 0084 00 00 00 00 00 00 00 00 00 00 00 00 | |
1147 0090 00 00 00 00 00 00 00 00 00 00 00 00 | |
1148 009C 00 00 00 00 00 00 00 00 00 00 00 00 | |
1149 00A8 00 00 00 00 00 00 00 00 00 00 00 00 | |
1150 00B4 00 00 00 00 00 00 00 00 00 00 00 00 | |
1151 00C0 00 00 00 00 00 00 00 00 00 00 00 00 | |
1152 00CC 00 00 00 00 00 00 00 00 00 00 00 00 | |
1153 00D8 00 00 00 00 00 00 00 00 00 00 00 00 | |
1154 00E4 00 00 00 00 00 00 00 00 00 00 00 00 | |
1155 00F0 00 00 00 00 00 00 00 00 00 00 00 00 | |
1156 00FC 00 00 00 00 00 00 00 00 00 00 00 00 | |
1157 0108 00 00 00 00 00 00 00 00 00 00 00 00 | |
1158 0114 00 00 00 00 00 00 00 00 00 00 00 00 | |
1159 0120 00 00 00 00 00 00 00 00 00 00 00 00 | |
1160 012C 00 00 00 00 00 00 00 00 00 00 00 00 | |
1161 0138 00 00 00 00 00 00 00 00 00 00 00 00 | |
1162 0144 00 00 00 00 00 00 00 00 00 00 00 00 | |
1163 0150 00 00 00 00 00 00 00 00 00 00 00 00 | |
1164 015C 00 00 00 00 00 00 00 00 00 00 00 00 | |
1165 0168 00 00 00 00 00 00 00 00 00 00 00 00 | |
1166 0174 00 00 00 00 00 00 00 00 00 00 00 00 | |
1167 0180 00 00 00 00 00 00 00 00 00 00 00 00 | |
1168 018C 00 00 00 00 00 00 00 00 00 00 00 00 | |
1169 0198 00 00 00 00 00 00 00 00 00 00 00 00 | |
1170 01A4 00 00 00 00 00 00 00 00 00 00 00 00 | |
1171 01B0 00 00 00 00 00 00 00 00 00 00 00 00 | |
1172 01BC 00 00 00 00 00 00 00 00 00 00 00 00 | |
1173 01C8 00 00 00 00 00 00 00 00 00 00 00 00 | |
1174 01D4 00 00 00 00 00 00 00 00 00 00 00 00 | |
1175 01E0 00 00 00 00 00 00 00 00 03 14 18 01 | |
1176 01EC 00 00 00 00 81 81 83 6a 49 da f3 d3 | |
1177 01F8 83 00 00 00 00 00 00 00 | |
1178 | |
1179 01e8 itemCount [1 byte] 0x03 in this case | |
1180 01e9 maxItemCount [1 byte] 0x14 constant | |
1181 01eb nodeLevel [1 byte] 0x01 in this case | |
1182 01f8 backPointer [4 bytes] 0x000083 in this case | |
1183 ]]></literallayout> | |
1184 <para> | |
1185 The itemCount specifies the number of 24 byte records that | |
1186 are active. The nodeLevel is non-zero for this style of nodes. | |
1187 The leaf nodes have a different format. The backPointer must | |
1188 match the backPointer from the triple that pointed to this node. | |
1189 </para> | |
1190 <para> | |
1191 Each item in this node is a triple of (ID2, backPointer, offset) | |
1192 where the offset points to the next deeper node in the tree, the | |
1193 backPointer value must match the backPointer in that deeper node, | |
1194 and ID2 is the lowest ID2 value in the subtree. | |
1195 </para> | |
1196 </refsect1> | |
1197 | |
1198 <refsect1 id='pst.file.leaf2.32.5'> | |
1199 <title>32 bit Index 2 Leaf Node</title> | |
1200 <para> | |
1201 The 32 bit index2 b-tree leaf nodes are 516 byte blocks with the | |
1202 following format. | |
24 | 1203 </para> |
1204 <literallayout class="monospaced"><![CDATA[ | |
1205 0000 21 00 00 00 38 e6 00 00 00 00 00 00 00 00 00 00 | |
1206 0010 61 00 00 00 2c a8 02 00 36 a8 02 00 00 00 00 00 | |
1207 0020 22 01 00 00 20 a2 02 00 00 00 00 00 22 01 00 00 | |
1208 0030 2d 01 00 00 88 7b 03 00 00 00 00 00 00 00 00 00 | |
1209 0040 2e 01 00 00 08 00 00 00 00 00 00 00 00 00 00 00 | |
1210 0050 2f 01 00 00 0c 00 00 00 00 00 00 00 00 00 00 00 | |
1211 0060 e1 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1212 0070 01 02 00 00 b4 e4 02 00 00 00 00 00 00 00 00 00 | |
1213 0080 61 02 00 00 a0 e4 02 00 00 00 00 00 00 00 00 00 | |
1214 0090 0d 06 00 00 04 00 00 00 00 00 00 00 00 00 00 00 | |
1215 00A0 0e 06 00 00 08 00 00 00 00 00 00 00 00 00 00 00 | |
1216 00B0 0f 06 00 00 0c 00 00 00 00 00 00 00 00 00 00 00 | |
1217 00C0 10 06 00 00 10 00 00 00 00 00 00 00 00 00 00 00 | |
1218 00D0 2b 06 00 00 84 00 00 00 00 00 00 00 00 00 00 00 | |
1219 00E0 4c 06 00 00 1c 00 00 00 00 00 00 00 00 00 00 00 | |
1220 00F0 71 06 00 00 18 00 00 00 00 00 00 00 00 00 00 00 | |
1221 0100 92 06 00 00 14 00 00 00 00 00 00 00 00 00 00 00 | |
1222 0110 23 22 00 00 14 a0 02 00 00 00 00 00 22 01 00 00 | |
1223 0120 26 22 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1224 0130 27 22 00 00 1c a0 02 00 00 00 00 00 00 00 00 00 | |
1225 0140 22 80 00 00 50 00 00 00 00 00 00 00 22 01 00 00 | |
1226 0150 2d 80 00 00 f8 9f 02 00 00 00 00 00 00 00 00 00 | |
1227 0160 2e 80 00 00 08 00 00 00 00 00 00 00 00 00 00 00 | |
1228 0170 2f 80 00 00 34 e6 00 00 00 00 00 00 00 00 00 00 | |
1229 0180 42 80 00 00 3c 6d 02 00 00 00 00 00 22 80 00 00 | |
1230 0190 4d 80 00 00 04 00 00 00 00 00 00 00 00 00 00 00 | |
1231 01A0 4e 80 00 00 10 6d 02 00 00 00 00 00 00 00 00 00 | |
1232 01B0 4f 80 00 00 ec 23 00 00 00 00 00 00 00 00 00 00 | |
1233 01C0 62 80 00 00 38 78 02 00 00 00 00 00 22 01 00 00 | |
1234 01D0 6d 80 00 00 34 78 02 00 00 00 00 00 00 00 00 00 | |
1235 01E0 6e 80 00 00 08 00 00 00 00 00 00 00 00 00 00 00 | |
1236 01F0 10 1f 10 00 81 81 a0 9a ae 1e 02 00 89 44 6a 0f | |
1237 0200 b8 b1 03 00 | |
1238 | |
28 | 1239 01f0 itemCount [1 byte] 0x10 in this case |
1240 01f1 maxItemCount [1 byte] 0x1f constant | |
1241 01f3 nodeLevel [1 byte] 0x00 in this case | |
1242 01f8 backPointer [4 bytes] 0x021eae in this case | |
24 | 1243 ]]></literallayout> |
1244 <para> | |
28 | 1245 The itemCount specifies the number of 16 byte records that |
1246 are active. The nodeLevel is zero for these leaf nodes. | |
1247 The backPointer must match the backPointer from the triple | |
24 | 1248 that pointed to this node. |
1249 </para> | |
1250 <para> | |
1251 Each item in this node is a tuple of (ID2, DESC-ID1, LIST-ID1, PARENT-ID2) | |
1252 </para> | |
1253 </refsect1> | |
1254 | |
44 | 1255 <refsect1 id='pst.file.leaf2.64.5'> |
1256 <title>64 bit Index 2 Leaf Node</title> | |
1257 <para> | |
1258 The 64 bit index2 b-tree leaf nodes are 512 byte blocks with the | |
1259 following format. | |
1260 </para> | |
1261 <literallayout class="monospaced"><![CDATA[ | |
1262 0000 21 00 00 00 00 00 00 00 74 00 00 00 00 00 00 00 | |
1263 0010 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 | |
1264 0020 61 00 00 00 00 00 00 00 34 00 00 00 00 00 00 00 | |
1265 0030 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 | |
1266 0040 22 01 00 00 00 00 00 00 4c 00 00 00 00 00 00 00 | |
1267 0050 00 00 00 00 00 00 00 00 22 01 00 00 02 00 00 00 | |
1268 0060 2d 01 00 00 00 00 00 00 70 00 00 00 00 00 00 00 | |
1269 0070 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 | |
1270 0080 2e 01 00 00 00 00 00 00 08 00 00 00 00 00 00 00 | |
1271 0090 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 | |
1272 00A0 2f 01 00 00 00 00 00 00 0c 00 00 00 00 00 00 00 | |
1273 00B0 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 | |
1274 00C0 e1 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1275 00D0 00 00 00 00 00 00 00 00 00 00 00 00 d8 e3 13 00 | |
1276 00E0 01 02 00 00 00 00 00 00 8c 00 00 00 00 00 00 00 | |
1277 00F0 00 00 00 00 00 00 00 00 00 00 00 00 b0 e3 13 00 | |
1278 0100 61 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1279 0110 00 00 00 00 00 00 00 00 00 00 00 00 d8 e3 13 00 | |
1280 0120 0d 06 00 00 00 00 00 00 04 00 00 00 00 00 00 00 | |
1281 0130 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 | |
1282 0140 0e 06 00 00 00 00 00 00 08 00 00 00 00 00 00 00 | |
1283 0150 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 | |
1284 0160 0f 06 00 00 00 00 00 00 0c 00 00 00 00 00 00 00 | |
1285 0170 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 | |
1286 0180 10 06 00 00 00 00 00 00 10 00 00 00 00 00 00 00 | |
1287 0190 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 | |
1288 01A0 2b 06 00 00 00 00 00 00 24 00 00 00 00 00 00 00 | |
1289 01B0 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 | |
1290 01C0 71 06 00 00 00 00 00 00 18 00 00 00 00 00 00 00 | |
1291 01D0 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 | |
1292 01E0 00 00 00 00 00 00 00 00 0e 0f 20 00 00 00 00 00 | |
1293 01F0 81 81 77 56 f8 32 43 49 77 00 00 00 00 00 00 00 | |
1294 | |
1295 01e8 itemCount [1 byte] 0x0e in this case | |
1296 01e9 maxItemCount [1 byte] 0x0f constant | |
1297 01eb nodeLevel [1 byte] 0x00 defines a leaf node | |
1298 01f8 backPointer [4 bytes] 0x000077 in this case | |
1299 ]]></literallayout> | |
1300 <para> | |
1301 The itemCount specifies the number of 32 byte records that | |
1302 are active. The nodeLevel is zero for these leaf nodes. | |
1303 The backPointer must match the backPointer from the triple | |
1304 that pointed to this node. | |
1305 </para> | |
1306 <para> | |
1307 Each item in this node is a tuple of (ID2, DESC-ID1, LIST-ID1, PARENT-ID2) | |
1308 </para> | |
1309 </refsect1> | |
1310 | |
46 | 1311 <refsect1 id='pst.file.list.32.5'> |
48 | 1312 <title>32 bit Associated List Item 0x0002</title> |
24 | 1313 <para> |
1314 Contains associations between id1 and id2 for the items controlled by the record. | |
44 | 1315 In the above 32 bit leaf node, we have a tuple of (0x61, 0x02a82c, 0x02a836, 0) |
24 | 1316 0x02a836 is the ID1 of the associated list, and we can lookup that ID1 value |
1317 in the index1 b-tree to find the (offset,size) of the data in the .pst file. | |
1318 </para> | |
1319 <literallayout class="monospaced"><![CDATA[ | |
1320 0000 02 00 01 00 9f 81 00 00 30 a8 02 00 00 00 00 00 | |
1321 | |
48 | 1322 0000 signature [2 bytes] 0x0002 constant |
24 | 1323 0002 count [2 bytes] 0x0001 in this case |
1324 repeating | |
1325 0004 id2 [4 bytes] 0x00819f in this case | |
1326 0008 id [4 bytes] 0x02a830 in this case | |
46 | 1327 000c table2 [4 bytes] 0 in this case |
1328 ]]></literallayout> | |
1329 </refsect1> | |
1330 | |
1331 <refsect1 id='pst.file.list.64.5'> | |
48 | 1332 <title>64 bit Associated List Item 0x0002</title> |
46 | 1333 <para> |
1334 Contains associations between id1 and id2 for the items controlled by the record. | |
1335 </para> | |
1336 <literallayout class="monospaced"><![CDATA[ | |
1337 0000 02 00 02 00 00 00 00 00 92 06 00 00 00 00 00 00 | |
1338 0010 a8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1339 0020 3f 80 00 00 00 00 00 00 98 00 00 00 00 00 00 00 | |
1340 0030 00 00 00 00 00 00 00 00 | |
1341 | |
48 | 1342 0000 signature [2 bytes] 0x0002 constant |
46 | 1343 0002 count [2 bytes] 0x0002 in this case |
1344 0004 unknown [4 bytes] 0 possibly constant | |
1345 repeating | |
48 | 1346 0008 id2 [4 bytes] 0x000692 in this case |
1347 000c unknown1 [2 bytes] 0 may be a count or size | |
1348 000e unknown2 [2 bytes] 0 may be a count or size | |
1349 0010 id [8 bytes] 0x0000a8 in this case | |
1350 0018 table2 [8 bytes] 0 in this case | |
24 | 1351 ]]></literallayout> |
1352 </refsect1> | |
1353 | |
1354 <refsect1 id='pst.file.desc.5'> | |
28 | 1355 <title>Associated Descriptor Item 0xbcec</title> |
24 | 1356 <para> |
28 | 1357 Contains information about the item, which may be email, contact, or |
1358 other outlook types. In the above leaf node, we have a tuple of (0x21, | |
1359 0x00e638, 0, 0) 0x00e638 is the ID1 of the associated descriptor, and we | |
1360 can lookup that ID1 value in the index1 b-tree to find the (offset,size) | |
1361 of the data in the .pst file. | |
24 | 1362 </para> |
1363 <literallayout class="monospaced"><![CDATA[ | |
1364 0000 3c 01 ec bc 20 00 00 00 00 00 00 00 b5 02 06 00 | |
1365 0010 40 00 00 00 f9 0f 02 01 60 00 00 00 01 30 1e 00 | |
1366 0020 80 00 00 00 04 30 1e 00 00 00 00 00 df 35 03 00 | |
1367 0030 ff 00 00 00 e0 35 02 01 a0 00 00 00 e2 35 02 01 | |
1368 0040 e0 00 00 00 e3 35 02 01 c0 00 00 00 e4 35 02 01 | |
1369 0050 00 01 00 00 e5 35 02 01 20 01 00 00 e6 35 02 01 | |
1370 0060 40 01 00 00 e7 35 02 01 60 01 00 00 1e 66 0b 00 | |
1371 0070 00 00 00 00 ff 67 03 00 00 00 00 00 d2 7f 17 d8 | |
1372 0080 64 8c d5 11 83 24 00 50 04 86 95 45 53 74 61 6e | |
1373 0090 6c 65 79 00 00 00 00 d2 7f 17 d8 64 8c d5 11 83 | |
1374 00A0 24 00 50 04 86 95 45 22 80 00 00 00 00 00 00 d2 | |
1375 00B0 7f 17 d8 64 8c d5 11 83 24 00 50 04 86 95 45 42 | |
1376 00C0 80 00 00 00 00 00 00 d2 7f 17 d8 64 8c d5 11 83 | |
1377 00D0 24 00 50 04 86 95 45 a2 80 00 00 00 00 00 00 d2 | |
1378 00E0 7f 17 d8 64 8c d5 11 83 24 00 50 04 86 95 45 c2 | |
1379 00F0 80 00 00 00 00 00 00 d2 7f 17 d8 64 8c d5 11 83 | |
1380 0100 24 00 50 04 86 95 45 e2 80 00 00 00 00 00 00 d2 | |
1381 0110 7f 17 d8 64 8c d5 11 83 24 00 50 04 86 95 45 02 | |
1382 0120 81 00 00 00 00 00 00 d2 7f 17 d8 64 8c d5 11 83 | |
1383 0130 24 00 50 04 86 95 45 62 80 00 00 00 0b 00 00 00 | |
1384 0140 0c 00 14 00 7c 00 8c 00 93 00 ab 00 c3 00 db 00 | |
1385 0150 f3 00 0b 01 23 01 3b 01 | |
1386 | |
28 | 1387 0000 indexOffset [2 bytes] 0x013c in this case |
24 | 1388 0002 signature [2 bytes] 0xbcec constant |
35 | 1389 0004 b5offset [4 bytes] 0x0020 index reference |
24 | 1390 ]]></literallayout> |
1391 <para> | |
35 | 1392 Note the signature of 0xbcec. There are other descriptor block formats |
1393 with other signatures. Note the indexOffset of 0x013c - starting at | |
1394 that position in the descriptor block, we have an array of two byte | |
1395 integers. The first integer (0x000b) is a (count-1) of the number of | |
1396 overlapping pairs following the count. The first pair is (0, 0xc), the | |
1397 next pair is (0xc, 0x14) and the last (12th) pair is (0x123, 0x13b). | |
1398 These pairs are (start,end+1) offsets of items in this block. So we | |
1399 have count+2 integers following the count value. | |
24 | 1400 </para> |
1401 <para> | |
35 | 1402 Note the b5offset of 0x0020, which is a type that I will call an index |
49 | 1403 reference. Such index references have at least two different forms, |
1404 and may point to data either in this block, or in some other block. | |
35 | 1405 External pointer references have the low order 4 bits all set, and are |
1406 ID2 values that can be used to fetch data. This value of 0x0020 is an | |
49 | 1407 internal pointer reference, which needs to be right shifted by 4 bits |
1408 to become 0x0002, which is then a byte offset to be added to the above | |
35 | 1409 indexOffset plus two (to skip the count), so it points to the (0xc, |
1410 0x14) pair. | |
1411 </para> | |
1412 <para> | |
49 | 1413 So far we have only described internal index references where the high |
1414 order 16 bits are zero. That suffices for single descriptor | |
1415 blocks. But in the case of the type 0x0101 descriptor block, we have | |
1416 an array of subblocks. In this case, the high order 16 bits of an | |
1417 internal index reference are used to select the subblock. Each | |
1418 subblock starts with a 16 bit indexOffset which points to the count | |
1419 and array of 16 bit integer pairs which are offsets in the current | |
1420 subblock. | |
1421 </para> | |
1422 <para> | |
35 | 1423 Finally, we have the offset and size of the "b5" block located at offset 0xc |
24 | 1424 with a size of 8 bytes in this descriptor block. The "b5" block has the |
1425 following format: | |
1426 </para> | |
1427 <literallayout class="monospaced"><![CDATA[ | |
1428 0000 signature [2 bytes] 0x02b5 constant | |
1429 0002 unknown [2 bytes] 0x0006 in this case | |
35 | 1430 0004 descoffset [4 bytes] 0x0040 index reference |
24 | 1431 ]]></literallayout> |
1432 <para> | |
35 | 1433 Note the descoffset of 0x0040, which again is an index reference. In this |
1434 case, it is an internal pointer reference, which needs to be right shifted by 4 bits | |
24 | 1435 to become 0x0004, which is then a byte offset to be added to the above |
28 | 1436 indexOffset plus two (to skip the count), so it points to the (0x14, 0x7c) |
24 | 1437 pair. We now have the offset 0x14 of the descriptor array, composed of 8 byte |
1438 entries. Each descriptor entry has the following format: | |
1439 </para> | |
1440 <literallayout class="monospaced"><![CDATA[ | |
28 | 1441 0000 itemType [2 bytes] |
1442 0002 referenceType [2 bytes] | |
24 | 1443 0004 value [4 bytes] |
1444 ]]></literallayout> | |
1445 <para> | |
1446 For some reference types (2, 3, 0xb) the value is used directly. Otherwise, | |
35 | 1447 the value is an index reference, which is either an ID2 value, or an |
1448 offset, to be right shifted by 4 bits and used to fetch a pair from the | |
1449 index table to find the offset and size of the item in this descriptor block. | |
24 | 1450 </para> |
1451 <para> | |
1452 The following reference types are known, but not all of these | |
1453 are implemented in the code yet. | |
1454 </para> | |
1455 <literallayout class="monospaced"><![CDATA[ | |
1456 0x0002 - Signed 16bit value | |
1457 0x0003 - Signed 32bit value | |
1458 0x0004 - 4-byte floating point | |
1459 0x0005 - Floating point double | |
1460 0x0006 - Signed 64-bit int | |
1461 0x0007 - Application Time | |
1462 0x000A - 32-bit error value | |
1463 0x000B - Boolean (non-zero = true) | |
1464 0x000D - Embedded Object | |
1465 0x0014 - 8-byte signed integer (64-bit) | |
1466 0x001E - Null terminated String | |
1467 0x001F - Unicode string | |
1468 0x0040 - Systime - Filetime structure | |
1469 0x0048 - OLE Guid | |
1470 0x0102 - Binary data | |
1471 0x1003 - Array of 32bit values | |
1472 0x1014 - Array of 64bit values | |
1473 0x101E - Array of Strings | |
1474 0x1102 - Array of Binary data | |
1475 ]]></literallayout> | |
1476 <para> | |
1477 The following item types are known, but not all of these | |
1478 are implemented in the code yet. | |
1479 </para> | |
1480 <literallayout class="monospaced"><![CDATA[ | |
51 | 1481 0002 Alternate recipient allowed |
24 | 1482 0003 Extended Attributes Table |
1483 0017 Importance Level | |
51 | 1484 001a IPM Context, message class |
1485 0023 Global delivery report requested | |
24 | 1486 0026 Priority |
1487 0029 Read Receipt | |
1488 002b Reassignment Prohibited | |
1489 002e Original Sensitivity | |
1490 0036 Sensitivity | |
51 | 1491 0037 Email Subject |
24 | 1492 0039 Date. This is likely to be the arrival date |
1493 003b Outlook Address of Sender | |
1494 003f Outlook structure describing the recipient | |
1495 0040 Name of the Outlook recipient structure | |
1496 0041 Outlook structure describing the sender | |
1497 0042 Name of the Outlook sender structure | |
1498 0043 Another structure describing the recipient | |
1499 0044 Name of the second recipient structure | |
1500 004f Reply-To Outlook Structure | |
1501 0050 Name of the Reply-To structure | |
1502 0051 Outlook Name of recipient | |
1503 0052 Second Outlook name of recipient | |
1504 0057 My address in TO field | |
1505 0058 My address in CC field | |
1506 0059 Message addressed to me | |
1507 0063 Response requested | |
1508 0064 Sender's Address access method (SMTP, EX) | |
1509 0065 Sender's Address | |
1510 0070 Processed Subject (with Fwd:, Re, ... removed) | |
1511 0071 Date. Another date | |
1512 0075 Recipient Address Access Method (SMTP, EX) | |
1513 0076 Recipient's Address | |
1514 0077 Second Recipient Access Method (SMTP, EX) | |
1515 0078 Second Recipient Address | |
1516 007d Email Header. This is the header that was attached to the email | |
1517 0c17 Reply Requested | |
1518 0c19 Second sender struct | |
1519 0c1a Name of second sender struct | |
1520 0c1d Second outlook name of sender | |
1521 0c1e Second sender access method (SMTP, EX) | |
1522 0c1f Second Sender Address | |
1523 0e01 Delete after submit | |
1524 0e03 CC Address? | |
1525 0e04 SentTo Address | |
1526 0e06 Date. | |
1527 0e07 Flag - contains IsSeen value | |
1528 0e08 Message Size | |
1529 0e0a Sentmail EntryID | |
1530 0e1f Compressed RTF in Sync | |
1531 0e20 Attachment Size | |
1532 0ff9 binary record header | |
1533 1000 Plain Text Email Body. Does not exist if the email doesn't have a plain text version | |
1534 1006 RTF Sync Body CRC | |
1535 1007 RTF Sync Body character count | |
1536 1008 RTF Sync body tag | |
1537 1009 RTF Compressed body | |
1538 1010 RTF whitespace prefix count | |
1539 1011 RTF whitespace tailing count | |
36 | 1540 1013 HTML Email Body. Does not exist if the email doesn't have an HTML version |
24 | 1541 1035 Message ID |
1542 1042 In-Reply-To or Parent's Message ID | |
1543 1046 Return Path | |
1544 3001 Folder Name? I have seen this value used for the contacts record aswell | |
1545 3002 Address Type | |
1546 3003 Contact Address | |
1547 3004 Comment | |
1548 3007 Date item creation | |
1549 3008 Date item modification | |
1550 300b binary record header | |
1551 35df Valid Folder Mask | |
51 | 1552 35e0 binary record contains a reference to "Top of Personal Folder" item |
1553 35e2 binary record contains a reference to default outbox item | |
1554 35e3 binary record contains a reference to "Deleted Items" item | |
1555 35e4 binary record contains a reference to sent items folder item | |
1556 35e5 binary record contains a reference to user views folder item | |
1557 35e6 binary record contains a reference to common views folder item | |
1558 35e7 binary record contains a reference to "Search Root" item | |
24 | 1559 3602 the number of emails stored in a folder |
1560 3603 the number of unread emails in a folder | |
1561 360a Has Subfolders | |
1562 3613 the folder content description | |
1563 3617 Associate Content count | |
1564 3701 Binary Data attachment | |
1565 3704 Attachment Filename | |
1566 3705 Attachement method | |
1567 3707 Attachment Filename long | |
1568 370b Attachment Position | |
1569 370e Attachment mime encoding | |
51 | 1570 3710 Attachment mime Sequence |
24 | 1571 3a00 Contact's Account name |
1572 3a01 Contact Alternate Recipient | |
1573 3a02 Callback telephone number | |
1574 3a03 Message Conversion Prohibited | |
1575 3a05 Contacts Suffix | |
1576 3a06 Contacts First Name | |
1577 3a07 Contacts Government ID Number | |
1578 3a08 Business Telephone Number | |
1579 3a09 Home Telephone Number | |
1580 3a0a Contacts Initials | |
1581 3a0b Keyword | |
1582 3a0c Contact's Language | |
1583 3a0d Contact's Location | |
1584 3a0e Mail Permission | |
1585 3a0f MHS Common Name | |
1586 3a10 Organizational ID # | |
1587 3a11 Contacts Surname | |
1588 3a12 original entry id | |
1589 3a13 original display name | |
1590 3a14 original search key | |
1591 3a15 Default Postal Address | |
1592 3a16 Company Name | |
1593 3a17 Job Title | |
1594 3a18 Department Name | |
1595 3a19 Office Location | |
1596 3a1a Primary Telephone | |
1597 3a1b Business Phone Number 2 | |
1598 3a1c Mobile Phone Number | |
1599 3a1d Radio Phone Number | |
1600 3a1e Car Phone Number | |
1601 3a1f Other Phone Number | |
1602 3a20 Transmittable Display Name | |
1603 3a21 Pager Phone Number | |
1604 3a22 user certificate | |
1605 3a23 Primary Fax Number | |
1606 3a24 Business Fax Number | |
1607 3a25 Home Fax Number | |
1608 3a26 Business Address Country | |
1609 3a27 Business Address City | |
1610 3a28 Business Address State | |
1611 3a29 Business Address Street | |
1612 3a2a Business Postal Code | |
1613 3a2b Business PO Box | |
1614 3a2c Telex Number | |
1615 3a2d ISDN Number | |
1616 3a2e Assistant Phone Number | |
1617 3a2f Home Phone 2 | |
1618 3a30 Assistant's Name | |
1619 3a40 Can receive Rich Text | |
1620 3a41 Wedding Anniversary | |
1621 3a42 Birthday | |
1622 3a43 Hobbies | |
1623 3a44 Middle Name | |
1624 3a45 Display Name Prefix (Title) | |
1625 3a46 Profession | |
1626 3a47 Preferred By Name | |
1627 3a48 Spouse's Name | |
1628 3a49 Computer Network Name | |
1629 3a4a Customer ID | |
1630 3a4b TTY/TDD Phone | |
1631 3a4c Ftp Site | |
1632 3a4d Gender | |
1633 3a4e Manager's Name | |
1634 3a4f Nickname | |
1635 3a50 Personal Home Page | |
1636 3a51 Business Home Page | |
1637 3a57 Company Main Phone | |
1638 3a58 childrens names | |
1639 3a59 Home Address City | |
1640 3a5a Home Address Country | |
1641 3a5b Home Address Postal Code | |
1642 3a5c Home Address State or Province | |
1643 3a5d Home Address Street | |
1644 3a5e Home Address Post Office Box | |
1645 3a5f Other Address City | |
1646 3a60 Other Address Country | |
1647 3a61 Other Address Postal Code | |
1648 3a62 Other Address State | |
1649 3a63 Other Address Street | |
1650 3a64 Other Address Post Office box | |
1651 65e3 Entry ID | |
1652 67f2 Attachment ID2 value | |
36 | 1653 67ff Password checksum |
24 | 1654 6f02 Secure HTML Body |
1655 6f04 Secure Text Body | |
36 | 1656 7c07 Top of folders RecID |
24 | 1657 8005 Contact Fullname |
1658 801a Home Address | |
1659 801b Business Address | |
1660 801c Other Address | |
51 | 1661 8045 Work Address Street |
1662 8046 Work Address City | |
1663 8047 Work Address State | |
1664 8048 Work Address Postal Code | |
1665 8049 Work Address Country | |
1666 804a Work Address Post Office Box | |
24 | 1667 8082 Email Address 1 Transport |
1668 8083 Email Address 1 Address | |
1669 8084 Email Address 1 Description | |
1670 8085 Email Address 1 Record | |
1671 8092 Email Address 2 Transport | |
1672 8093 Email Address 2 Address | |
36 | 1673 8094 Email Address 2 Description |
24 | 1674 8095 Email Address 2 Record |
36 | 1675 80a2 Email Address 3 Transport |
24 | 1676 80a3 Email Address 3 Address |
1677 80a4 Email Address 3 Description | |
1678 80a5 Email Address 3 Record | |
1679 80d8 Internet Free/Busy | |
1680 8205 Appointment shows as | |
1681 8208 Appointment Location | |
51 | 1682 820d Appointment start |
1683 820e Appointment end | |
24 | 1684 8214 Label for appointment |
32 | 1685 8215 All day appointment flag |
51 | 1686 8231 Recurrence type |
1687 8232 Recurrence description | |
24 | 1688 8234 TimeZone of times |
51 | 1689 8235 Recurrence Start Time |
1690 8236 Recurrence End Time | |
1691 8501 Reminder minutes before appointment start | |
1692 8503 Reminder alarm | |
1693 8516 Common Time Start | |
1694 8517 Common Time End | |
1695 851f Play reminder sound filename | |
24 | 1696 8530 Followup String |
1697 8534 Mileage | |
1698 8535 Billing Information | |
1699 8554 Outlook Version | |
1700 8560 Appointment Reminder Time | |
1701 8700 Journal Entry Type | |
1702 8706 Start Timestamp | |
1703 8708 End Timestamp | |
51 | 1704 8712 Journal Entry Type - duplicate? |
24 | 1705 ]]></literallayout> |
1706 </refsect1> | |
1707 | |
28 | 1708 <refsect1 id='pst.file.desc2.5'> |
1709 <title>Associated Descriptor Item 0x7cec</title> | |
1710 <para> | |
35 | 1711 This style of descriptor block is similar to the 0xbcec format. |
28 | 1712 </para> |
1713 <literallayout class="monospaced"><![CDATA[ | |
1714 0000 7a 01 ec 7c 40 00 00 00 00 00 00 00 b5 04 02 00 | |
1715 0010 60 00 00 00 7c 18 60 00 60 00 62 00 65 00 20 00 | |
1716 0020 00 00 80 00 00 00 00 00 00 00 03 00 20 0e 0c 00 | |
1717 0030 04 03 1e 00 01 30 2c 00 04 0b 1e 00 03 37 28 00 | |
1718 0040 04 0a 1e 00 04 37 14 00 04 05 03 00 05 37 10 00 | |
1719 0050 04 04 1e 00 07 37 24 00 04 09 1e 00 08 37 20 00 | |
1720 0060 04 08 02 01 0a 37 18 00 04 06 03 00 0b 37 08 00 | |
1721 0070 04 02 1e 00 0d 37 1c 00 04 07 1e 00 0e 37 40 00 | |
1722 0080 04 10 02 01 0f 37 30 00 04 0c 1e 00 11 37 34 00 | |
1723 0090 04 0d 1e 00 12 37 3c 00 04 0f 1e 00 13 37 38 00 | |
1724 00A0 04 0e 03 00 f2 67 00 00 04 00 03 00 f3 67 04 00 | |
1725 00B0 04 01 03 00 09 69 44 00 04 11 03 00 fa 7f 5c 00 | |
1726 00C0 04 15 40 00 fb 7f 4c 00 08 13 40 00 fc 7f 54 00 | |
1727 00D0 08 14 03 00 fd 7f 48 00 04 12 0b 00 fe 7f 60 00 | |
1728 00E0 01 16 0b 00 ff 7f 61 00 01 17 45 82 00 00 00 00 | |
1729 00F0 45 82 00 00 78 3c 00 00 ff ff ff ff 49 1e 00 00 | |
1730 0100 06 00 00 00 00 00 00 00 a0 00 00 00 00 00 00 00 | |
1731 0110 00 00 00 00 00 00 00 00 00 00 00 00 c0 00 00 00 | |
1732 0120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1733 0130 00 00 00 00 00 00 00 00 00 00 00 00 00 40 dd a3 | |
1734 0140 57 45 b3 0c 00 40 dd a3 57 45 b3 0c 02 00 00 00 | |
1735 0150 00 00 fa 10 3e 2a 86 48 86 f7 14 03 0a 03 02 01 | |
1736 0160 4a 2e 20 44 61 76 69 64 20 4b 61 72 61 6d 27 73 | |
1737 0170 20 42 69 72 74 68 64 61 79 00 06 00 00 00 0c 00 | |
1738 0180 14 00 ea 00 f0 00 55 01 60 01 79 01 | |
1739 | |
1740 0000 indexOffset [2 bytes] 0x017a in this case | |
1741 0002 signature [2 bytes] 0x7cec constant | |
35 | 1742 0004 7coffset [4 bytes] 0x0040 index reference |
28 | 1743 ]]></literallayout> |
1744 <para> | |
1745 Note the signature of 0x7cec. There are other descriptor block | |
1746 formats with other signatures. | |
1747 Note the indexOffset of 0x017a - starting at that position in the | |
1748 descriptor block, we have an array of two byte integers. The first | |
1749 integer (0x0006) is a (count-1) of the number of overlapping pairs | |
1750 following the count. The first pair is (0, 0xc), the next pair is (0xc, 0x14) | |
1751 and the last (7th) pair is (0x160, 0x179). These pairs are (start,end+1) | |
1752 offsets of items in this block. So we have count+2 integers following | |
1753 the count value. | |
1754 </para> | |
1755 <para> | |
35 | 1756 Note the 7coffset of 0x0040, which is an index reference. In this case, |
1757 it is an internal reference pointer, which needs to be right shifted by 4 bits | |
28 | 1758 to become 0x0004, which is then a byte offset to be added to the above |
1759 indexOffset plus two (to skip the count), so it points to the (0x14, 0xea) | |
1760 pair. We have the offset and size of the "7c" block located at offset 0x14 | |
1761 with a size of 214 bytes in this case. The "7c" block starts with | |
1762 a header with the following format: | |
1763 </para> | |
1764 <literallayout class="monospaced"><![CDATA[ | |
1765 0000 signature [1 bytes] 0x7c constant | |
1766 0001 itemCount [1 bytes] 0x18 in this case | |
1767 0002 unknown [2 bytes] 0x0060 in this case | |
1768 0004 unknown [2 bytes] 0x0060 in this case | |
1769 0006 unknown [2 bytes] 0x0062 in this case | |
1770 0008 recordSize [2 bytes] 0x0065 in this case | |
35 | 1771 000a b5Offset [4 bytes] 0x0020 index reference |
1772 000e index2Offset [4 bytes] 0x0080 index reference | |
28 | 1773 0010 unknown [2 bytes] 0x0000 in this case |
1774 0012 unknown [2 bytes] 0x0000 in this case | |
1775 0014 unknown [2 bytes] 0x0000 in this case | |
1776 ]]></literallayout> | |
1777 <para> | |
35 | 1778 Note the b5Offset of 0x0020, which is an index reference. In this case, |
1779 it is an internal reference pointer, which needs to be right shifted by 4 bits | |
28 | 1780 to become 0x0002, which is then a byte offset to be added to the above |
1781 indexOffset plus two (to skip the count), so it points to the (0xc, | |
1782 0x14) pair. Finally, we have the offset and size of the "b5" block | |
1783 located at offset 0xc with a size of 8 bytes in this descriptor block. | |
1784 The "b5" block has the following format: | |
1785 </para> | |
1786 <literallayout class="monospaced"><![CDATA[ | |
1787 0000 signature [2 bytes] 0x04b5 constant | |
1788 0002 unknown [2 bytes] 0x0002 in this case | |
35 | 1789 0004 descoffset [4 bytes] 0x0060 index reference |
28 | 1790 ]]></literallayout> |
1791 <para> | |
35 | 1792 Note the descoffset of 0x0060, which again is an index reference. In this |
1793 case, it is an internal pointer reference, which needs to be right shifted by 4 | |
28 | 1794 bits to become 0x0006, which is then a byte offset to be added to the |
1795 above indexOffset plus two (to skip the count), so it points to the | |
1796 (0xea, 0xf0) pair. That gives us (0xf0 - 0xea)/6 = 1, so we have a | |
1797 recordCount of one. The actual data between 0xea and 0xf0 is unknown | |
1798 and unused here. | |
1799 </para> | |
1800 <para> | |
35 | 1801 Note the index2Offset above of 0x0080, which again is an index reference. In this |
1802 case, it is an internal pointer reference, which needs to be right shifted | |
28 | 1803 by 4 bits to become 0x0008, which is then a byte offset to be added to |
1804 the above indexOffset plus two (to skip the count), so it points to the | |
1805 (0xf0, 0x155) pair. This is an array of tables of four byte integers. | |
1806 We will call these the IND2 tables. The size of each of these tables is | |
1807 specified by the recordSize field of the "7c" header. The number of | |
1808 these tables is the above recordCount value derived from the "b5" block. | |
1809 </para> | |
1810 <para> | |
1811 Now the remaining data in the "7c" block after the header starts at | |
1812 offset 0x2a. There should be itemCount 8 byte items here, with the | |
1813 following format: | |
1814 </para> | |
1815 <literallayout class="monospaced"><![CDATA[ | |
1816 0000 referenceType [2 bytes] | |
1817 0002 itemType [2 bytes] | |
1818 0004 ind2Offset [2 bytes] | |
35 | 1819 0006 size [1 byte] |
1820 0007 unknown [1 byte] | |
28 | 1821 ]]></literallayout> |
1822 <para> | |
35 | 1823 The ind2Offset is a byte offset into the current IND2 table of some value. |
1824 If that is a four byte integer value, then once we fetch that, we have | |
1825 the same triple (item type, reference type, value) as we find in the | |
1826 0xbcec style descriptor blocks. If not, then this value is used directly. | |
1827 These 8 byte descriptors are processed recordCount times, each | |
28 | 1828 time using the next IND2 table. The item and reference types are as |
1829 described above for the 0xbcec format descriptor block. | |
1830 </para> | |
1831 </refsect1> | |
1832 | |
48 | 1833 <refsect1 id='pst.file.desc3.32.5'> |
1834 <title>32 bit Associated Descriptor Item 0x0101</title> | |
35 | 1835 <para> |
49 | 1836 This descriptor block contains a list of ID1 values. It is used when |
1837 an ID1 (that would normally point to a type 0x7cec or 0xbcec | |
1838 descriptor block) contains more data than can fit in any single | |
1839 descriptor of those types. In this case, it points to a type 0x0101 | |
1840 block, which contains a list of ID1 values that themselves point to | |
1841 the actual descriptor blocks. The total length value in the 0x0101 | |
1842 header is the sum of the lengths of the blocks pointed to by the list | |
1843 of ID1 values. The result is an array of subblocks, that may contain | |
1844 index references where the high order 16 bits specify which descriptor | |
1845 subblock to use. Only the first descriptor subblock contains the | |
1846 signature (0xbcec or 0x7cec). | |
35 | 1847 </para> |
1848 <literallayout class="monospaced"><![CDATA[ | |
1849 0000 01 01 02 00 26 28 00 00 18 77 0c 00 b8 04 00 00 | |
1850 | |
1851 0000 signature [2 bytes] 0x0101 constant | |
1852 0002 count [2 bytes] 0x0002 in this case | |
49 | 1853 0004 total length [4 bytes] 0x002826 in this case |
35 | 1854 repeating |
49 | 1855 0008 id1 [4 bytes] 0x0c7718 in this case |
1856 000c id1 [4 bytes] 0x0004b8 in this case | |
35 | 1857 ]]></literallayout> |
1858 </refsect1> | |
1859 | |
48 | 1860 <refsect1 id='pst.file.desc3.64.5'> |
1861 <title>64 bit Associated Descriptor Item 0x0101</title> | |
1862 <para> | |
1863 This descriptor block contains a list of ID1 values. | |
1864 </para> | |
1865 <literallayout class="monospaced"><![CDATA[ | |
1866 0000 01 01 02 00 ea 29 00 00 10 83 00 00 00 00 00 00 | |
1867 0010 1c 83 00 00 00 00 00 00 | |
1868 | |
1869 0000 signature [2 bytes] 0x0101 constant | |
1870 0002 count [2 bytes] 0x0002 in this case | |
49 | 1871 0004 total length [4 bytes] 0x0029ea in this case |
48 | 1872 repeating |
49 | 1873 0008 id1 [8 bytes] 0x008310 in this case |
1874 0010 id1 [8 bytes] 0x00831c in this case | |
48 | 1875 ]]></literallayout> |
1876 </refsect1> | |
1877 | |
24 | 1878 </refentry> |
16 | 1879 </reference> |