Mercurial > libpst
annotate xml/libpst.in @ 33:12cac756bc05 stable-0-5-5
enable -d option, but if not specified, don't generate a debug file
author | carl |
---|---|
date | Tue, 10 Jul 2007 20:23:55 -0700 |
parents | c03974357771 |
children | b2f247463b83 |
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 | |
24 | 17 </partintro> |
16 | 18 |
19 | |
20 <refentry id="readpst.1"> | |
21 <refentryinfo> | |
31 | 22 <date>2007-07-10</date> |
16 | 23 </refentryinfo> |
24 | |
25 <refmeta> | |
26 <refentrytitle>readpst</refentrytitle> | |
27 <manvolnum>1</manvolnum> | |
28 <refmiscinfo>readpst @VERSION@</refmiscinfo> | |
29 </refmeta> | |
30 | |
20 | 31 <refnamediv id='readpst.name.1'> |
16 | 32 <refname>readpst</refname> |
33 <refpurpose>convert PST (MS Outlook Personal Folders) files to mbox format</refpurpose> | |
34 </refnamediv> | |
35 | |
20 | 36 <refsynopsisdiv id='readpst.synopsis.1'> |
16 | 37 <title>Synopsis</title> |
38 <cmdsynopsis> | |
39 <command>readpst</command> | |
31 | 40 <arg><option>-b</option></arg> |
16 | 41 <arg><option>-c <replaceable class="parameter">format</replaceable></option></arg> |
42 <arg><option>-d <replaceable class="parameter">debug-file</replaceable></option></arg> | |
43 <arg><option>-h</option></arg> | |
44 <arg><option>-k</option></arg> | |
45 <arg><option>-o <replaceable class="parameter">output-directory</replaceable></option></arg> | |
46 <arg><option>-q</option></arg> | |
47 <arg><option>-r</option></arg> | |
48 <arg><option>-S</option></arg> | |
25 | 49 <arg><option>-M</option></arg> |
16 | 50 <arg><option>-V</option></arg> |
51 <arg><option>-w</option></arg> | |
24 | 52 <arg rep='repeat' choice='plain'>files</arg> |
16 | 53 </cmdsynopsis> |
54 </refsynopsisdiv> | |
55 | |
20 | 56 <refsect1 id='readpst.description.1'> |
57 <title>Description</title> | |
28 | 58 <para><command>readpst</command> is a program that can read an Outlook |
59 PST (Personal Folders) file and convert it into an mbox file, a format | |
60 suitable for KMail, a recursive mbox structure, or separate emails. | |
20 | 61 </para> |
62 </refsect1> | |
63 | |
64 <refsect1 id='readpst.options.1'> | |
16 | 65 <title>Options</title> |
66 <variablelist> | |
67 <varlistentry> | |
31 | 68 <term>-b</term> |
69 <listitem><para> | |
70 Do not save the attachments for the RTF format of the email body. | |
71 </para></listitem> | |
72 </varlistentry> | |
73 <varlistentry> | |
16 | 74 <term>-c <replaceable class="parameter">format</replaceable></term> |
75 <listitem><para> | |
76 Set the Contact output mode. Use -cv for vcard format or -cl for an email list. | |
77 </para></listitem> | |
78 </varlistentry> | |
79 <varlistentry> | |
80 <term>-d <replaceable class="parameter">debug-file</replaceable></term> | |
81 <listitem><para> | |
33
12cac756bc05
enable -d option, but if not specified, don't generate a debug file
carl
parents:
32
diff
changeset
|
82 Specify name of debug log file. The |
28 | 83 log file is not an ascii file, it is a binary file readable |
84 by <command>readpstlog</command>. | |
16 | 85 </para></listitem> |
86 </varlistentry> | |
87 <varlistentry> | |
88 <term>-h</term> | |
89 <listitem><para> | |
31 | 90 Show summary of options and exit. |
16 | 91 </para></listitem> |
92 </varlistentry> | |
93 <varlistentry> | |
94 <term>-k</term> | |
95 <listitem><para> | |
96 Changes the output format to KMail. | |
97 </para></listitem> | |
98 </varlistentry> | |
99 <varlistentry> | |
20 | 100 <term>-o <replaceable class="parameter">output-directory</replaceable></term> |
16 | 101 <listitem><para> |
102 Specifies the output directory. The directory must already exist, and | |
103 is entered after the PST file is opened, but before any processing of | |
104 files commences. | |
105 </para></listitem> | |
106 </varlistentry> | |
107 <varlistentry> | |
108 <term>-q</term> | |
109 <listitem><para> | |
110 Changes to silent mode. No feedback is printed to the screen, except | |
111 for error messages. | |
112 </para></listitem> | |
113 </varlistentry> | |
114 <varlistentry> | |
115 <term>-r</term> | |
116 <listitem><para> | |
117 Changes the output format to Recursive. This will create folders as | |
21 | 118 named in the PST file, and will put all emails in a file called "mbox" |
16 | 119 inside each folder. These files are then compatible with all |
120 mbox-compatible email clients. | |
121 </para></listitem> | |
122 </varlistentry> | |
123 <varlistentry> | |
124 <term>-S</term> | |
125 <listitem><para> | |
25 | 126 Output messages into separate files. This will create folders as named |
127 in the PST file, and will put each email in its own file. These files | |
28 | 128 will be numbered from 1 increasing in intervals of 1 (ie 1, 2, 3, ...). |
129 Any attachments are saved alongside each email as XXXXXXXXX-attach1, | |
130 XXXXXXXXX-attach2 and so on, or with the name of the attachment if one | |
131 is present. | |
16 | 132 </para></listitem> |
133 </varlistentry> | |
134 <varlistentry> | |
25 | 135 <term>-M</term> |
136 <listitem><para> | |
137 Output messages in MH format as separate files. This will create | |
28 | 138 folders as named in the PST file, and will put each email together with |
139 any attachments into its own file. These files will be numbered from 1 | |
140 to n with no leading zeros. | |
25 | 141 </para></listitem> |
142 </varlistentry> | |
143 <varlistentry> | |
16 | 144 <term>-V</term> |
145 <listitem><para> | |
31 | 146 Show program version and exit. |
16 | 147 </para></listitem> |
148 </varlistentry> | |
149 <varlistentry> | |
150 <term>-w</term> | |
151 <listitem><para> | |
20 | 152 Overwrite any previous output files. Beware: When used with the -S |
16 | 153 switch, this will remove all files from the target folder before |
154 writing. This is to keep the count of emails and attachments correct. | |
155 </para></listitem> | |
156 </varlistentry> | |
157 </variablelist> | |
158 </refsect1> | |
159 | |
20 | 160 <refsect1 id='readpst.also.1'> |
16 | 161 <title>See Also</title> |
162 <para> | |
25 | 163 <citerefentry><refentrytitle>readpstlog</refentrytitle> <manvolnum>1</manvolnum> </citerefentry> |
16 | 164 </para> |
165 </refsect1> | |
166 | |
20 | 167 <refsect1 id='readpst.author.1'> |
16 | 168 <title>Author</title> |
169 <para> | |
170 This manual page was originally written by Dave Smith | |
171 <dave.s@earthcorp.com>, and updated by Joe Nahmias <joe@nahmias.net> | |
172 for the Debian GNU/Linux system (but may be used by others). It was | |
20 | 173 subsequently updated by Brad Hards <bradh@frogmouth.net>, and converted to |
16 | 174 xml format by Carl Byington <carl@five-ten-sg.com>. |
175 </para> | |
176 </refsect1> | |
177 | |
20 | 178 <refsect1 id='readpst.copyright.1'> |
16 | 179 <title>Copyright</title> |
180 <para> | |
181 Copyright (C) 2002 by David Smith <dave.s@earthcorp.com>. | |
28 | 182 XML version Copyright (C) 2006 by 510 Software Group <carl@five-ten-sg.com>. |
16 | 183 </para> |
184 <para> | |
185 This program is free software; you can redistribute it and/or modify it | |
186 under the terms of the GNU General Public License as published by the | |
187 Free Software Foundation; either version 2, or (at your option) any | |
188 later version. | |
189 </para> | |
190 <para> | |
191 You should have received a copy of the GNU General Public License along | |
192 with this program; see the file COPYING. If not, please write to the | |
193 Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. | |
194 </para> | |
195 </refsect1> | |
196 | |
20 | 197 <refsect1 id='readpst.version.1'> |
16 | 198 <title>CVS Version</title> |
199 <para> | |
200 $Id$ | |
201 </para> | |
202 </refsect1> | |
203 </refentry> | |
204 | |
205 | |
206 <refentry id="readpstlog.1"> | |
207 <refentryinfo> | |
31 | 208 <date>2007-07-10</date> |
16 | 209 </refentryinfo> |
210 | |
211 <refmeta> | |
212 <refentrytitle>readpstlog</refentrytitle> | |
213 <manvolnum>1</manvolnum> | |
214 <refmiscinfo>readpstlog @VERSION@</refmiscinfo> | |
215 </refmeta> | |
216 | |
20 | 217 <refnamediv id='readpstlog.name.1'> |
16 | 218 <refname>readpstlog</refname> |
24 | 219 <refpurpose>convert a <command>readpst</command> logfile to text format</refpurpose> |
16 | 220 </refnamediv> |
221 | |
20 | 222 <refsynopsisdiv id='readpstlog.synopsis.1'> |
16 | 223 <title>Synopsis</title> |
224 <cmdsynopsis> | |
24 | 225 <command>readpstlog</command> |
16 | 226 <arg><option>-f <replaceable class="parameter">format</replaceable></option></arg> |
227 <arg><option>-t <replaceable class="parameter">include-types</replaceable></option></arg> | |
228 <arg><option>-x <replaceable class="parameter">exclude-types</replaceable></option></arg> | |
24 | 229 <arg choice='plain'>logfile</arg> |
16 | 230 </cmdsynopsis> |
231 </refsynopsisdiv> | |
232 | |
20 | 233 <refsect1 id='readpstlog.description.1'> |
234 <title>Description</title> | |
21 | 235 <para><command>readpstlog</command> |
24 | 236 is a program that converts the binary logfile generated |
237 by <command>readpst</command> to a more desirable text format. | |
20 | 238 </para> |
239 </refsect1> | |
240 | |
241 <refsect1 id='readpstlog.options.1'> | |
16 | 242 <title>Options</title> |
243 <variablelist> | |
244 <varlistentry> | |
245 <term>-f <replaceable class="parameter">format</replaceable></term> | |
246 <listitem><para> | |
247 Sets the format of the text log output. Currently, the only valid output | |
248 format is T, for text; anything else gives the default. | |
249 </para></listitem> | |
250 </varlistentry> | |
251 <varlistentry> | |
252 <term>-t <replaceable class="parameter">include-types</replaceable></term> | |
253 <listitem><para> | |
254 Print only the specified types of log messages. | |
255 Types are specified in a comma-delimited list (e.g. 3,10,5,6). | |
256 </para></listitem> | |
257 </varlistentry> | |
258 <varlistentry> | |
259 <term>-x <replaceable class="parameter">exclude-types</replaceable></term> | |
260 <listitem><para> | |
261 Exclude the specified types of log messages. | |
262 Types are specified in a comma-delimited list (e.g. 3,10,5,6). | |
263 </para></listitem> | |
264 </varlistentry> | |
265 </variablelist> | |
266 </refsect1> | |
267 | |
20 | 268 <refsect1 id='readpstlog.message.types.1'> |
16 | 269 <title>Message Types</title> |
24 | 270 <para><command>readpstlog</command> understands the following types of log |
271 messages: | |
16 | 272 </para> |
273 <variablelist> | |
20 | 274 <varlistentry> |
275 <term>1</term> | |
276 <listitem><para> | |
277 File accesses | |
278 </para></listitem> | |
279 </varlistentry> | |
280 <varlistentry> | |
281 <term>2</term> | |
282 <listitem><para> | |
283 Index accesses | |
284 </para></listitem> | |
285 </varlistentry> | |
286 <varlistentry> | |
287 <term>3</term> | |
288 <listitem><para> | |
289 New email found | |
290 </para></listitem> | |
291 </varlistentry> | |
292 <varlistentry> | |
293 <term>4</term> | |
294 <listitem><para> | |
295 Warnings | |
296 </para></listitem> | |
297 </varlistentry> | |
298 <varlistentry> | |
299 <term>5</term> | |
300 <listitem><para> | |
301 Read accesses | |
302 </para></listitem> | |
303 </varlistentry> | |
304 <varlistentry> | |
305 <term>6</term> | |
306 <listitem><para> | |
307 Informational messages | |
308 </para></listitem> | |
309 </varlistentry> | |
310 <varlistentry> | |
311 <term>7</term> | |
312 <listitem><para> | |
313 Main function calls | |
314 </para></listitem> | |
315 </varlistentry> | |
316 <varlistentry> | |
317 <term>8</term> | |
318 <listitem><para> | |
319 Decrypting calls | |
320 </para></listitem> | |
321 </varlistentry> | |
322 <varlistentry> | |
323 <term>10</term> | |
324 <listitem><para> | |
325 Function calls | |
326 </para></listitem> | |
327 </varlistentry> | |
328 <varlistentry> | |
329 <term>11</term> | |
330 <listitem><para> | |
331 HexDump calls | |
332 </para></listitem> | |
333 </varlistentry> | |
16 | 334 </variablelist> |
335 </refsect1> | |
336 | |
20 | 337 <refsect1 id='readpstlog.author.1'> |
16 | 338 <title>Author</title> |
339 <para> | |
340 This manual page was written by Joe Nahmias <joe@nahmias.net> | |
341 for the Debian GNU/Linux system (but may be used by others). It was | |
342 converted to xml format by Carl Byington <carl@five-ten-sg.com>. | |
343 </para> | |
344 </refsect1> | |
345 | |
20 | 346 <refsect1 id='readpstlog.copyright.1'> |
16 | 347 <title>Copyright</title> |
348 <para> | |
349 Copyright (C) 2002 by David Smith <dave.s@earthcorp.com>. | |
350 XML version Copyright (C) 2005 by 510 Software Group <carl@five-ten-sg.com>. | |
351 </para> | |
352 <para> | |
353 This program is free software; you can redistribute it and/or modify it | |
354 under the terms of the GNU General Public License as published by the | |
355 Free Software Foundation; either version 2, or (at your option) any | |
356 later version. | |
357 </para> | |
358 <para> | |
359 You should have received a copy of the GNU General Public License along | |
360 with this program; see the file COPYING. If not, please write to the | |
361 Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. | |
362 </para> | |
363 </refsect1> | |
364 | |
20 | 365 <refsect1 id='readpstlog.version.1'> |
16 | 366 <title>CVS Version</title> |
367 <para> | |
368 $Id$ | |
369 </para> | |
370 </refsect1> | |
371 </refentry> | |
24 | 372 |
373 | |
374 <refentry id="pst2ldif.1"> | |
375 <refentryinfo> | |
31 | 376 <date>2007-07-10</date> |
24 | 377 </refentryinfo> |
378 | |
379 <refmeta> | |
380 <refentrytitle>pst2ldif</refentrytitle> | |
381 <manvolnum>1</manvolnum> | |
382 <refmiscinfo>pst2ldif @VERSION@</refmiscinfo> | |
383 </refmeta> | |
384 | |
385 <refnamediv id='pst2ldif.name.1'> | |
386 <refname>pst2ldif</refname> | |
387 <refpurpose>extract contacts from a MS Outlook .pst file in .ldif format</refpurpose> | |
388 </refnamediv> | |
389 | |
390 <refsynopsisdiv id='pst2ldif.synopsis.1'> | |
391 <title>Synopsis</title> | |
392 <cmdsynopsis> | |
393 <command>pst2ldif</command> | |
394 <arg><option>-h</option></arg> | |
395 <arg><option>-V</option></arg> | |
396 <arg><option>-b <replaceable class="parameter">ldap-base</replaceable></option></arg> | |
397 <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
|
398 <arg><option>-d <replaceable class="parameter">debug-file</replaceable></option></arg> |
24 | 399 <arg choice='plain'>pstfilename</arg> |
400 </cmdsynopsis> | |
401 </refsynopsisdiv> | |
402 | |
403 <refsect1 id='pst2ldif.options.1'> | |
404 <title>Options</title> | |
405 <variablelist> | |
406 <varlistentry> | |
407 <term>-h</term> | |
408 <listitem><para> | |
409 Show summary of options. Subsequent options are then ignored. | |
410 </para></listitem> | |
411 </varlistentry> | |
412 <varlistentry> | |
413 <term>-V <replaceable class="parameter">include-types</replaceable></term> | |
414 <listitem><para> | |
415 Show program version. Subsequent options are then ignored. | |
416 </para></listitem> | |
417 </varlistentry> | |
418 <varlistentry> | |
419 <term>-b <replaceable class="parameter">ldap-base</replaceable></term> | |
420 <listitem><para> | |
421 Sets the ldap base value used in the dn records. You probably want to | |
422 use something like "o=organization, c=US". | |
423 </para></listitem> | |
424 </varlistentry> | |
425 <varlistentry> | |
426 <term>-c <replaceable class="parameter">class</replaceable></term> | |
427 <listitem><para> | |
428 Sets the objectClass values for the contact items. This class needs to be | |
429 defined in the schema used by your LDAP server, and at a minimum it must | |
430 contain the ldap attributes given below. | |
431 </para></listitem> | |
432 </varlistentry> | |
33
12cac756bc05
enable -d option, but if not specified, don't generate a debug file
carl
parents:
32
diff
changeset
|
433 <varlistentry> |
12cac756bc05
enable -d option, but if not specified, don't generate a debug file
carl
parents:
32
diff
changeset
|
434 <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
|
435 <listitem><para> |
12cac756bc05
enable -d option, but if not specified, don't generate a debug file
carl
parents:
32
diff
changeset
|
436 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
|
437 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
|
438 by <command>readpstlog</command>. |
12cac756bc05
enable -d option, but if not specified, don't generate a debug file
carl
parents:
32
diff
changeset
|
439 </para></listitem> |
12cac756bc05
enable -d option, but if not specified, don't generate a debug file
carl
parents:
32
diff
changeset
|
440 </varlistentry> |
24 | 441 </variablelist> |
442 </refsect1> | |
443 | |
444 <refsect1 id='pst2ldif.description.1'> | |
445 <title>Description</title> | |
446 <para><command>pst2ldif</command> | |
447 reads the contact information from a MS Outlook .pst file | |
448 and produces a .ldif file that may be used to import those contacts | |
449 into an LDAP database. The following ldap attributes are generated: | |
450 <simplelist> | |
451 <member>cn </member> | |
452 <member>givenName </member> | |
453 <member>sn </member> | |
454 <member>personalTitle </member> | |
455 <member>company </member> | |
456 <member>mail </member> | |
457 <member>postalAddress </member> | |
458 <member>l </member> | |
459 <member>st </member> | |
460 <member>postalCode </member> | |
461 <member>c </member> | |
462 <member>homePhone </member> | |
463 <member>telephoneNumber </member> | |
464 <member>facsimileTelephoneNumber </member> | |
465 <member>mobile </member> | |
466 <member>description </member> | |
467 </simplelist> | |
468 </para> | |
469 </refsect1> | |
470 | |
471 <refsect1 id='pst2ldif.copyright.1'> | |
472 <title>Copyright</title> | |
473 <para> | |
474 Copyright (C) 2006 by 510 Software Group <carl@five-ten-sg.com> | |
475 </para> | |
476 <para> | |
477 This program is free software; you can redistribute it and/or modify it | |
478 under the terms of the GNU General Public License as published by the | |
479 Free Software Foundation; either version 2, or (at your option) any | |
480 later version. | |
481 </para> | |
482 <para> | |
483 You should have received a copy of the GNU General Public License along | |
484 with this program; see the file COPYING. If not, please write to the | |
485 Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. | |
486 </para> | |
487 </refsect1> | |
488 | |
489 <refsect1 id='pst2ldif.version.1'> | |
490 <title>CVS Version</title> | |
491 <para> | |
492 $Id$ | |
493 </para> | |
494 </refsect1> | |
495 </refentry> | |
496 | |
497 | |
498 <refentry id="pst.5"> | |
499 <refentryinfo> | |
31 | 500 <date>2007-07-10</date> |
24 | 501 </refentryinfo> |
502 | |
503 <refmeta> | |
504 <refentrytitle>outlook.pst</refentrytitle> | |
505 <manvolnum>5</manvolnum> | |
506 </refmeta> | |
507 | |
508 <refnamediv id='pst.name.1'> | |
509 <refname>outlook.pst</refname> | |
510 <refpurpose>format of MS Outlook .pst file</refpurpose> | |
511 </refnamediv> | |
512 | |
513 <refsynopsisdiv id='pst.synopsis.1'> | |
514 <title>Synopsis</title> | |
515 <cmdsynopsis> | |
516 <command>outlook.pst</command> | |
517 </cmdsynopsis> | |
518 </refsynopsisdiv> | |
519 | |
520 <refsect1 id='pst.file.overview.5'> | |
521 <title>Overview</title> | |
522 <para> | |
523 Each item in a .pst file is identified by two id values ID1 and ID2. | |
524 There are two separate b-trees indexed by these ID1 and ID2 values. | |
525 </para> | |
526 </refsect1> | |
527 | |
528 <refsect1 id='pst.file.header.5'> | |
529 <title>File Header</title> | |
530 <para> | |
531 The file header is located at offset 0 in the .pst file. | |
532 </para> | |
533 <literallayout class="monospaced"><![CDATA[ | |
534 0000 21 42 44 4e 49 f8 64 d9 53 4d 0e 00 13 00 01 01 | |
535 0010 00 00 00 00 00 00 00 00 50 d6 03 00 bd 1e 02 00 | |
536 0020 08 4c 00 00 00 04 00 00 00 04 00 00 0f 04 00 00 | |
537 0030 0d 40 00 00 99 0a 01 00 18 04 00 00 0d 40 00 00 | |
538 0040 0d 40 00 00 11 80 00 00 02 04 00 00 0a 04 00 00 | |
539 0050 00 04 00 00 00 04 00 00 0f 04 00 00 0f 04 00 00 | |
540 0060 0f 04 00 00 0d 40 00 00 00 04 00 00 00 04 00 00 | |
541 0070 04 40 00 00 00 04 00 00 00 04 00 00 00 04 00 00 | |
542 0080 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 | |
543 0090 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 | |
544 00a0 0c 09 00 00 00 00 00 00 00 04 27 00 00 24 23 00 | |
545 00b0 c0 09 0a 00 00 c8 00 00 bc 1e 02 00 00 7e 0c 00 | |
546 00c0 b4 1e 02 00 00 54 00 00 01 00 00 00 23 55 44 d1 | |
547 00d0 5a 4f ce 6b 80 ff ff ff 00 00 00 00 00 00 00 00 | |
548 00e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
549 00f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
550 0100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
551 0110 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
552 0120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
553 0130 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
554 0140 00 00 00 00 00 00 00 00 00 00 00 00 3f ff ff ff | |
555 0150 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff | |
556 0160 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff | |
557 0170 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff | |
558 0180 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff | |
559 0190 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff | |
560 01a0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff | |
561 01b0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff | |
562 01c0 ff ff ff ff ff ff ff ff ff ff ff ff 80 01 00 00 | |
563 01d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
564 01e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
565 01f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
566 | |
567 0000 signature [4 bytes] 0x4e444221 constant | |
28 | 568 000a indexType [1 byte] 0x0e constant |
569 01cd encryptionType [1 byte] 0x01 constant | |
24 | 570 00a8 total file size [4 bytes] 0x270400 in this case |
28 | 571 00c0 backPointer1 [4 bytes] 0x021eb4 in this case |
572 00c4 offsetIndex1 [4 bytes] 0x005400 in this case | |
573 00b8 backPointer2 [4 bytes] 0x021ebc in this case | |
574 00bc offsetIndex2 [4 bytes] 0x0c7e00 in this case | |
24 | 575 ]]></literallayout> |
576 <para> | |
577 We only support index type 0x0E and encryption type 0x01. | |
578 </para> | |
579 <para> | |
28 | 580 offsetIndex1 is the file offset of the root of the |
24 | 581 index1 b-tree, which contains (ID1, offset, size, unknown) tuples |
28 | 582 for each item in the file. backPointer1 is the value that should |
24 | 583 appear in the parent pointer of that root node. |
584 </para> | |
585 <para> | |
28 | 586 offsetIndex2 is the file offset of the root of the |
24 | 587 index2 b-tree, which contains (ID2, DESC-ID1, LIST-ID1, PARENT-ID2) |
28 | 588 tuples for each item in the file. backPointer2 is the value that should |
24 | 589 appear in the parent pointer of that root node. |
590 </para> | |
591 </refsect1> | |
592 | |
593 <refsect1 id='pst.file.node1.5'> | |
594 <title>Index 1 Node</title> | |
595 <para> | |
596 The index1 b-tree nodes are 516 byte blocks with the following format. | |
597 </para> | |
598 <literallayout class="monospaced"><![CDATA[ | |
599 0000 04 00 00 00 8a 1e 02 00 00 1c 0b 00 | |
600 000c 58 27 03 00 b3 1e 02 00 00 52 00 00 | |
601 0018 00 00 00 00 00 00 00 00 00 00 00 00 | |
602 0024 00 00 00 00 00 00 00 00 00 00 00 00 | |
603 0030 00 00 00 00 00 00 00 00 00 00 00 00 | |
604 003c 00 00 00 00 00 00 00 00 00 00 00 00 | |
605 0048 00 00 00 00 00 00 00 00 00 00 00 00 | |
606 0054 00 00 00 00 00 00 00 00 00 00 00 00 | |
607 0060 00 00 00 00 00 00 00 00 00 00 00 00 | |
608 006c 00 00 00 00 00 00 00 00 00 00 00 00 | |
609 0078 00 00 00 00 00 00 00 00 00 00 00 00 | |
610 0084 00 00 00 00 00 00 00 00 00 00 00 00 | |
611 0090 00 00 00 00 00 00 00 00 00 00 00 00 | |
612 009c 00 00 00 00 00 00 00 00 00 00 00 00 | |
613 00a8 00 00 00 00 00 00 00 00 00 00 00 00 | |
614 00b4 00 00 00 00 00 00 00 00 00 00 00 00 | |
615 00c0 00 00 00 00 00 00 00 00 00 00 00 00 | |
616 00cc 00 00 00 00 00 00 00 00 00 00 00 00 | |
617 00d8 00 00 00 00 00 00 00 00 00 00 00 00 | |
618 00e4 00 00 00 00 00 00 00 00 00 00 00 00 | |
619 00f0 00 00 00 00 00 00 00 00 00 00 00 00 | |
620 00fc 00 00 00 00 00 00 00 00 00 00 00 00 | |
621 0108 00 00 00 00 00 00 00 00 00 00 00 00 | |
622 0114 00 00 00 00 00 00 00 00 00 00 00 00 | |
623 0120 00 00 00 00 00 00 00 00 00 00 00 00 | |
624 012c 00 00 00 00 00 00 00 00 00 00 00 00 | |
625 0138 00 00 00 00 00 00 00 00 00 00 00 00 | |
626 0144 00 00 00 00 00 00 00 00 00 00 00 00 | |
627 0150 00 00 00 00 00 00 00 00 00 00 00 00 | |
628 015c 00 00 00 00 00 00 00 00 00 00 00 00 | |
629 0168 00 00 00 00 00 00 00 00 00 00 00 00 | |
630 0174 00 00 00 00 00 00 00 00 00 00 00 00 | |
631 0180 00 00 00 00 00 00 00 00 00 00 00 00 | |
632 018c 00 00 00 00 00 00 00 00 00 00 00 00 | |
633 0198 00 00 00 00 00 00 00 00 00 00 00 00 | |
634 01a4 00 00 00 00 00 00 00 00 00 00 00 00 | |
635 01b0 00 00 00 00 00 00 00 00 00 00 00 00 | |
636 01bc 00 00 00 00 00 00 00 00 00 00 00 00 | |
637 01c8 00 00 00 00 00 00 00 00 00 00 00 00 | |
638 01d4 00 00 00 00 00 00 00 00 00 00 00 00 | |
639 01e0 00 00 00 00 00 00 00 00 00 00 00 00 | |
640 01ec 00 00 00 00 02 29 0c 02 80 80 b6 4a | |
641 01f8 b4 1e 02 00 27 9c cc 56 58 27 03 00 | |
642 | |
28 | 643 01f0 itemCount [1 byte] 0x02 in this case |
644 01f1 maxItemCount [1 byte] 0x29 constant | |
645 01f3 nodeLevel [1 byte] 0x02 in this case | |
646 01f8 backPointer [4 bytes] 0x021eb4 in this case | |
24 | 647 ]]></literallayout> |
648 <para> | |
28 | 649 The itemCount specifies the number of 12 byte records that |
650 are active. The nodeLevel is non-zero for this style of nodes. | |
651 The leaf nodes have a different format. The backPointer must | |
652 match the backPointer from the triple that pointed to this node. | |
24 | 653 </para> |
654 <para> | |
28 | 655 Each item in this node is a triple of (ID, backPointer, offset) |
24 | 656 where the offset points to the next deeper node in the tree, the |
28 | 657 backPointer value must match the backPointer in that deeper node, |
24 | 658 and ID is the lowest ID value in the subtree. |
659 </para> | |
660 </refsect1> | |
661 | |
662 <refsect1 id='pst.file.leaf1.5'> | |
663 <title>Index 1 Leaf Node</title> | |
664 <para> | |
665 The index1 b-tree leaf nodes are 516 byte blocks with the following format. | |
666 </para> | |
667 <literallayout class="monospaced"><![CDATA[ | |
668 0000 04 00 00 00 00 58 00 00 64 00 0f 00 | |
669 000c 08 00 00 00 80 58 00 00 ac 00 06 00 | |
670 0018 0c 00 00 00 40 59 00 00 ac 00 06 00 | |
671 0024 10 00 00 00 00 5a 00 00 bc 00 03 00 | |
672 0030 14 00 00 00 00 5b 00 00 a4 00 02 00 | |
673 003c 18 00 00 00 c0 5b 00 00 64 00 02 00 | |
674 0048 1c 00 00 00 40 5c 00 00 5c 00 02 00 | |
675 0054 50 00 00 00 80 62 00 00 60 00 02 00 | |
676 0060 74 00 00 00 00 77 00 00 5e 00 02 00 | |
677 006c 7c 00 00 00 80 77 00 00 66 00 02 00 | |
678 0078 84 00 00 00 00 76 00 00 ca 00 02 00 | |
679 0084 88 00 00 00 00 63 00 00 52 00 02 00 | |
680 0090 90 00 00 00 00 79 00 00 58 00 02 00 | |
681 009c cc 00 00 00 c0 61 00 00 76 00 02 00 | |
682 00a8 e0 00 00 00 00 61 00 00 74 00 02 00 | |
683 00b4 f4 00 00 00 80 65 00 00 6e 00 02 00 | |
684 00c0 8c 01 00 00 40 60 00 00 70 00 02 00 | |
685 00cc ea 01 00 00 80 61 00 00 10 00 02 00 | |
686 00d8 ec 01 00 00 40 8a 00 00 f3 01 02 00 | |
687 00e4 f0 01 00 00 80 93 00 00 f4 1f 02 00 | |
688 00f0 fa 01 00 00 c0 7f 00 00 10 00 02 00 | |
689 00fc 00 02 00 00 00 89 00 00 34 01 02 00 | |
690 0108 1c 02 00 00 40 ec 00 00 12 06 02 00 | |
691 0114 22 02 00 00 00 84 00 00 10 00 02 00 | |
692 0120 24 02 00 00 c0 ea 00 00 3c 01 02 00 | |
693 012c 40 02 00 00 00 f4 00 00 0a 06 02 00 | |
694 0138 46 02 00 00 40 8c 00 00 10 00 02 00 | |
695 0144 48 02 00 00 80 f2 00 00 36 01 02 00 | |
696 0150 64 02 00 00 80 fb 00 00 bf 07 02 00 | |
697 015c 6a 02 00 00 80 63 00 00 10 00 02 00 | |
698 0168 6c 02 00 00 40 fa 00 00 2a 01 02 00 | |
699 0174 6c 02 00 00 40 fa 00 00 2a 01 02 00 | |
700 0180 6c 02 00 00 40 fa 00 00 2a 01 02 00 | |
701 018c 6c 02 00 00 40 fa 00 00 2a 01 02 00 | |
702 0198 6c 02 00 00 40 fa 00 00 2a 01 02 00 | |
703 01a4 6c 02 00 00 40 fa 00 00 2a 01 02 00 | |
704 01b0 64 02 00 00 80 fb 00 00 bf 07 02 00 | |
705 01bc 64 02 00 00 80 fb 00 00 bf 07 02 00 | |
706 01c8 64 02 00 00 80 fb 00 00 bf 07 02 00 | |
707 01d4 64 02 00 00 80 fb 00 00 bf 07 02 00 | |
708 01e0 64 02 00 00 80 fb 00 00 bf 07 02 00 | |
709 01ec 00 00 00 00 1f 29 0c 00 80 80 5b b3 | |
710 01f8 5a 67 01 00 4f ae 70 a7 92 06 00 00 | |
711 | |
28 | 712 01f0 itemCount [1 byte] 0x1f in this case |
713 01f1 maxItemCount [1 byte] 0x29 constant | |
714 01f3 nodeLevel [1 byte] 0x00 in this case | |
715 01f8 backPointer [4 bytes] 0x01675a in this case | |
24 | 716 ]]></literallayout> |
717 <para> | |
28 | 718 The itemCount specifies the number of 12 byte records that |
719 are active. The nodeLevel is zero for these leaf nodes. | |
720 The backPointer must match the backPointer from the triple | |
24 | 721 that pointed to this node. |
722 </para> | |
723 <para> | |
724 Each item in this node is a tuple of (ID1, offset, size, unknown) | |
725 </para> | |
726 </refsect1> | |
727 | |
728 <refsect1 id='pst.file.node2.5'> | |
729 <title>Index 2 Node</title> | |
730 <para> | |
731 The index2 b-tree nodes are 516 byte blocks with the following format. | |
732 </para> | |
733 <literallayout class="monospaced"><![CDATA[ | |
734 0000 21 00 00 00 bb 1e 02 00 00 e2 0b 00 | |
735 000c 64 78 20 00 8c 1e 02 00 00 dc 0b 00 | |
736 0018 00 00 00 00 00 00 00 00 00 00 00 00 | |
737 0024 00 00 00 00 00 00 00 00 00 00 00 00 | |
738 0030 00 00 00 00 00 00 00 00 00 00 00 00 | |
739 003c 00 00 00 00 00 00 00 00 00 00 00 00 | |
740 0048 00 00 00 00 00 00 00 00 00 00 00 00 | |
741 0054 00 00 00 00 00 00 00 00 00 00 00 00 | |
742 0060 00 00 00 00 00 00 00 00 00 00 00 00 | |
743 006c 00 00 00 00 00 00 00 00 00 00 00 00 | |
744 0078 00 00 00 00 00 00 00 00 00 00 00 00 | |
745 0084 00 00 00 00 00 00 00 00 00 00 00 00 | |
746 0090 00 00 00 00 00 00 00 00 00 00 00 00 | |
747 009c 00 00 00 00 00 00 00 00 00 00 00 00 | |
748 00a8 00 00 00 00 00 00 00 00 00 00 00 00 | |
749 00b4 00 00 00 00 00 00 00 00 00 00 00 00 | |
750 00c0 00 00 00 00 00 00 00 00 00 00 00 00 | |
751 00cc 00 00 00 00 00 00 00 00 00 00 00 00 | |
752 00d8 00 00 00 00 00 00 00 00 00 00 00 00 | |
753 00e4 00 00 00 00 00 00 00 00 00 00 00 00 | |
754 00f0 00 00 00 00 00 00 00 00 00 00 00 00 | |
755 00fc 00 00 00 00 00 00 00 00 00 00 00 00 | |
756 0108 00 00 00 00 00 00 00 00 00 00 00 00 | |
757 0114 00 00 00 00 00 00 00 00 00 00 00 00 | |
758 0120 00 00 00 00 00 00 00 00 00 00 00 00 | |
759 012c 00 00 00 00 00 00 00 00 00 00 00 00 | |
760 0138 00 00 00 00 00 00 00 00 00 00 00 00 | |
761 0144 00 00 00 00 00 00 00 00 00 00 00 00 | |
762 0150 00 00 00 00 00 00 00 00 00 00 00 00 | |
763 015c 00 00 00 00 00 00 00 00 00 00 00 00 | |
764 0168 00 00 00 00 00 00 00 00 00 00 00 00 | |
765 0174 00 00 00 00 00 00 00 00 00 00 00 00 | |
766 0180 00 00 00 00 00 00 00 00 00 00 00 00 | |
767 018c 00 00 00 00 00 00 00 00 00 00 00 00 | |
768 0198 00 00 00 00 00 00 00 00 00 00 00 00 | |
769 01a4 00 00 00 00 00 00 00 00 00 00 00 00 | |
770 01b0 00 00 00 00 00 00 00 00 00 00 00 00 | |
771 01bc 00 00 00 00 00 00 00 00 00 00 00 00 | |
772 01c8 00 00 00 00 00 00 00 00 00 00 00 00 | |
773 01d4 00 00 00 00 00 00 00 00 00 00 00 00 | |
774 01e0 00 00 00 00 00 00 00 00 00 00 00 00 | |
775 01ec 00 00 00 00 02 29 0c 02 81 81 b2 60 | |
776 01f8 bc 1e 02 00 7e 70 dc e3 21 00 00 00 | |
777 | |
28 | 778 01f0 itemCount [1 byte] 0x02 in this case |
779 01f1 maxItemCount [1 byte] 0x29 constant | |
780 01f3 nodeLevel [1 byte] 0x02 in this case | |
781 01f8 backPointer [4 bytes] 0x021ebc in this case | |
24 | 782 ]]></literallayout> |
783 <para> | |
28 | 784 The itemCount specifies the number of 12 byte records that |
785 are active. The nodeLevel is non-zero for this style of nodes. | |
786 The leaf nodes have a different format. The backPointer must | |
787 match the backPointer from the triple that pointed to this node. | |
24 | 788 </para> |
789 <para> | |
28 | 790 Each item in this node is a triple of (ID2, backPointer, offset) |
24 | 791 where the offset points to the next deeper node in the tree, the |
28 | 792 backPointer value must match the backPointer in that deeper node, |
24 | 793 and ID2 is the lowest ID2 value in the subtree. |
794 </para> | |
795 </refsect1> | |
796 | |
797 <refsect1 id='pst.file.leaf2.5'> | |
798 <title>Index 2 Leaf Node</title> | |
799 <para> | |
800 The index2 b-tree leaf nodes are 516 byte blocks with the following format. | |
801 </para> | |
802 <literallayout class="monospaced"><![CDATA[ | |
803 0000 21 00 00 00 38 e6 00 00 00 00 00 00 00 00 00 00 | |
804 0010 61 00 00 00 2c a8 02 00 36 a8 02 00 00 00 00 00 | |
805 0020 22 01 00 00 20 a2 02 00 00 00 00 00 22 01 00 00 | |
806 0030 2d 01 00 00 88 7b 03 00 00 00 00 00 00 00 00 00 | |
807 0040 2e 01 00 00 08 00 00 00 00 00 00 00 00 00 00 00 | |
808 0050 2f 01 00 00 0c 00 00 00 00 00 00 00 00 00 00 00 | |
809 0060 e1 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
810 0070 01 02 00 00 b4 e4 02 00 00 00 00 00 00 00 00 00 | |
811 0080 61 02 00 00 a0 e4 02 00 00 00 00 00 00 00 00 00 | |
812 0090 0d 06 00 00 04 00 00 00 00 00 00 00 00 00 00 00 | |
813 00A0 0e 06 00 00 08 00 00 00 00 00 00 00 00 00 00 00 | |
814 00B0 0f 06 00 00 0c 00 00 00 00 00 00 00 00 00 00 00 | |
815 00C0 10 06 00 00 10 00 00 00 00 00 00 00 00 00 00 00 | |
816 00D0 2b 06 00 00 84 00 00 00 00 00 00 00 00 00 00 00 | |
817 00E0 4c 06 00 00 1c 00 00 00 00 00 00 00 00 00 00 00 | |
818 00F0 71 06 00 00 18 00 00 00 00 00 00 00 00 00 00 00 | |
819 0100 92 06 00 00 14 00 00 00 00 00 00 00 00 00 00 00 | |
820 0110 23 22 00 00 14 a0 02 00 00 00 00 00 22 01 00 00 | |
821 0120 26 22 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
822 0130 27 22 00 00 1c a0 02 00 00 00 00 00 00 00 00 00 | |
823 0140 22 80 00 00 50 00 00 00 00 00 00 00 22 01 00 00 | |
824 0150 2d 80 00 00 f8 9f 02 00 00 00 00 00 00 00 00 00 | |
825 0160 2e 80 00 00 08 00 00 00 00 00 00 00 00 00 00 00 | |
826 0170 2f 80 00 00 34 e6 00 00 00 00 00 00 00 00 00 00 | |
827 0180 42 80 00 00 3c 6d 02 00 00 00 00 00 22 80 00 00 | |
828 0190 4d 80 00 00 04 00 00 00 00 00 00 00 00 00 00 00 | |
829 01A0 4e 80 00 00 10 6d 02 00 00 00 00 00 00 00 00 00 | |
830 01B0 4f 80 00 00 ec 23 00 00 00 00 00 00 00 00 00 00 | |
831 01C0 62 80 00 00 38 78 02 00 00 00 00 00 22 01 00 00 | |
832 01D0 6d 80 00 00 34 78 02 00 00 00 00 00 00 00 00 00 | |
833 01E0 6e 80 00 00 08 00 00 00 00 00 00 00 00 00 00 00 | |
834 01F0 10 1f 10 00 81 81 a0 9a ae 1e 02 00 89 44 6a 0f | |
835 0200 b8 b1 03 00 | |
836 | |
28 | 837 01f0 itemCount [1 byte] 0x10 in this case |
838 01f1 maxItemCount [1 byte] 0x1f constant | |
839 01f3 nodeLevel [1 byte] 0x00 in this case | |
840 01f8 backPointer [4 bytes] 0x021eae in this case | |
24 | 841 ]]></literallayout> |
842 <para> | |
28 | 843 The itemCount specifies the number of 16 byte records that |
844 are active. The nodeLevel is zero for these leaf nodes. | |
845 The backPointer must match the backPointer from the triple | |
24 | 846 that pointed to this node. |
847 </para> | |
848 <para> | |
849 Each item in this node is a tuple of (ID2, DESC-ID1, LIST-ID1, PARENT-ID2) | |
850 </para> | |
851 </refsect1> | |
852 | |
853 <refsect1 id='pst.file.list.5'> | |
854 <title>Associated List Item</title> | |
855 <para> | |
856 Contains associations between id1 and id2 for the items controlled by the record. | |
857 In the above leaf node, we have a tuple of (0x61, 0x02a82c, 0x02a836, 0) | |
858 0x02a836 is the ID1 of the associated list, and we can lookup that ID1 value | |
859 in the index1 b-tree to find the (offset,size) of the data in the .pst file. | |
860 </para> | |
861 <literallayout class="monospaced"><![CDATA[ | |
862 0000 02 00 01 00 9f 81 00 00 30 a8 02 00 00 00 00 00 | |
863 | |
864 0000 unknown [2 bytes] 0x0002 constant | |
865 0002 count [2 bytes] 0x0001 in this case | |
866 repeating | |
867 0004 id2 [4 bytes] 0x00819f in this case | |
868 0008 id [4 bytes] 0x02a830 in this case | |
869 000c unknown [4 bytes] 0 in this case | |
870 ]]></literallayout> | |
871 </refsect1> | |
872 | |
873 <refsect1 id='pst.file.desc.5'> | |
28 | 874 <title>Associated Descriptor Item 0xbcec</title> |
24 | 875 <para> |
28 | 876 Contains information about the item, which may be email, contact, or |
877 other outlook types. In the above leaf node, we have a tuple of (0x21, | |
878 0x00e638, 0, 0) 0x00e638 is the ID1 of the associated descriptor, and we | |
879 can lookup that ID1 value in the index1 b-tree to find the (offset,size) | |
880 of the data in the .pst file. | |
24 | 881 </para> |
882 <literallayout class="monospaced"><![CDATA[ | |
883 0000 3c 01 ec bc 20 00 00 00 00 00 00 00 b5 02 06 00 | |
884 0010 40 00 00 00 f9 0f 02 01 60 00 00 00 01 30 1e 00 | |
885 0020 80 00 00 00 04 30 1e 00 00 00 00 00 df 35 03 00 | |
886 0030 ff 00 00 00 e0 35 02 01 a0 00 00 00 e2 35 02 01 | |
887 0040 e0 00 00 00 e3 35 02 01 c0 00 00 00 e4 35 02 01 | |
888 0050 00 01 00 00 e5 35 02 01 20 01 00 00 e6 35 02 01 | |
889 0060 40 01 00 00 e7 35 02 01 60 01 00 00 1e 66 0b 00 | |
890 0070 00 00 00 00 ff 67 03 00 00 00 00 00 d2 7f 17 d8 | |
891 0080 64 8c d5 11 83 24 00 50 04 86 95 45 53 74 61 6e | |
892 0090 6c 65 79 00 00 00 00 d2 7f 17 d8 64 8c d5 11 83 | |
893 00A0 24 00 50 04 86 95 45 22 80 00 00 00 00 00 00 d2 | |
894 00B0 7f 17 d8 64 8c d5 11 83 24 00 50 04 86 95 45 42 | |
895 00C0 80 00 00 00 00 00 00 d2 7f 17 d8 64 8c d5 11 83 | |
896 00D0 24 00 50 04 86 95 45 a2 80 00 00 00 00 00 00 d2 | |
897 00E0 7f 17 d8 64 8c d5 11 83 24 00 50 04 86 95 45 c2 | |
898 00F0 80 00 00 00 00 00 00 d2 7f 17 d8 64 8c d5 11 83 | |
899 0100 24 00 50 04 86 95 45 e2 80 00 00 00 00 00 00 d2 | |
900 0110 7f 17 d8 64 8c d5 11 83 24 00 50 04 86 95 45 02 | |
901 0120 81 00 00 00 00 00 00 d2 7f 17 d8 64 8c d5 11 83 | |
902 0130 24 00 50 04 86 95 45 62 80 00 00 00 0b 00 00 00 | |
903 0140 0c 00 14 00 7c 00 8c 00 93 00 ab 00 c3 00 db 00 | |
904 0150 f3 00 0b 01 23 01 3b 01 | |
905 | |
28 | 906 0000 indexOffset [2 bytes] 0x013c in this case |
24 | 907 0002 signature [2 bytes] 0xbcec constant |
908 0004 offset [2 bytes] 0x0020 in this case | |
909 ]]></literallayout> | |
910 <para> | |
28 | 911 Note the signature of 0xbcec. There are other descriptor block |
912 formats with other signatures. | |
913 Note the indexOffset of 0x013c - starting at that position in the | |
24 | 914 descriptor block, we have an array of two byte integers. The first |
28 | 915 integer (0x000b) is a (count-1) of the number of overlapping pairs |
24 | 916 following the count. The first pair is (0, 0xc), the next pair is (0xc, 0x14) |
28 | 917 and the last (12th) pair is (0x123, 0x13b). These pairs are (start,end+1) |
918 offsets of items in this block. So we have count+2 integers following | |
24 | 919 the count value. |
920 </para> | |
921 <para> | |
922 Note the offset of 0x0020, which needs to be right shifted by 4 bits | |
923 to become 0x0002, which is then a byte offset to be added to the above | |
28 | 924 indexOffset plus two (to skip the count), so it points to the (0xc, 0x14) |
24 | 925 pair. Finally, we have the offset and size of the "b5" block located at offset 0xc |
926 with a size of 8 bytes in this descriptor block. The "b5" block has the | |
927 following format: | |
928 </para> | |
929 <literallayout class="monospaced"><![CDATA[ | |
930 0000 signature [2 bytes] 0x02b5 constant | |
931 0002 unknown [2 bytes] 0x0006 in this case | |
932 0004 offset [4 bytes] 0x0040 in this case | |
933 ]]></literallayout> | |
934 <para> | |
935 Note the "b5" offset of 0x0040, which needs to be right shifted by 4 bits | |
936 to become 0x0004, which is then a byte offset to be added to the above | |
28 | 937 indexOffset plus two (to skip the count), so it points to the (0x14, 0x7c) |
24 | 938 pair. We now have the offset 0x14 of the descriptor array, composed of 8 byte |
939 entries. Each descriptor entry has the following format: | |
940 </para> | |
941 <literallayout class="monospaced"><![CDATA[ | |
28 | 942 0000 itemType [2 bytes] |
943 0002 referenceType [2 bytes] | |
24 | 944 0004 value [4 bytes] |
945 ]]></literallayout> | |
946 <para> | |
947 For some reference types (2, 3, 0xb) the value is used directly. Otherwise, | |
948 the value is generally a non-zero offset, to be right shifted by 4 bits and used to fetch | |
949 a pair from the index table to find the offset and size of the item in this | |
950 descriptor block. However, if (value AND 0xf) == 0xf, then the value is an ID2 index. | |
951 </para> | |
952 <para> | |
953 The following reference types are known, but not all of these | |
954 are implemented in the code yet. | |
955 </para> | |
956 <literallayout class="monospaced"><![CDATA[ | |
957 0x0002 - Signed 16bit value | |
958 0x0003 - Signed 32bit value | |
959 0x0004 - 4-byte floating point | |
960 0x0005 - Floating point double | |
961 0x0006 - Signed 64-bit int | |
962 0x0007 - Application Time | |
963 0x000A - 32-bit error value | |
964 0x000B - Boolean (non-zero = true) | |
965 0x000D - Embedded Object | |
966 0x0014 - 8-byte signed integer (64-bit) | |
967 0x001E - Null terminated String | |
968 0x001F - Unicode string | |
969 0x0040 - Systime - Filetime structure | |
970 0x0048 - OLE Guid | |
971 0x0102 - Binary data | |
972 0x1003 - Array of 32bit values | |
973 0x1014 - Array of 64bit values | |
974 0x101E - Array of Strings | |
975 0x1102 - Array of Binary data | |
976 ]]></literallayout> | |
977 <para> | |
978 The following item types are known, but not all of these | |
979 are implemented in the code yet. | |
980 Note: it appears that some types can have a IPOS value or a ID2 value | |
981 depending on the size of the field in question. It is safer to check | |
982 every field than for me to say what the "usually" contain. Absolute | |
983 values though, are generally going to be constant. | |
984 </para> | |
985 <literallayout class="monospaced"><![CDATA[ | |
986 0002 AutoForward allowed | |
987 0003 Extended Attributes Table | |
988 0017 Importance Level | |
989 001a IPM Context. What type of message is this | |
990 0023 Global Delivery Report | |
991 0026 Priority | |
992 0029 Read Receipt | |
993 002b Reassignment Prohibited | |
994 002e Original Sensitivity | |
995 0036 Sensitivity | |
996 0037 Email Subject. The referenced item is of type "Subject Type" | |
997 0039 Date. This is likely to be the arrival date | |
998 003b Outlook Address of Sender | |
999 003f Outlook structure describing the recipient | |
1000 0040 Name of the Outlook recipient structure | |
1001 0041 Outlook structure describing the sender | |
1002 0042 Name of the Outlook sender structure | |
1003 0043 Another structure describing the recipient | |
1004 0044 Name of the second recipient structure | |
1005 004f Reply-To Outlook Structure | |
1006 0050 Name of the Reply-To structure | |
1007 0051 Outlook Name of recipient | |
1008 0052 Second Outlook name of recipient | |
1009 0057 My address in TO field | |
1010 0058 My address in CC field | |
1011 0059 Message addressed to me | |
1012 0063 Response requested | |
1013 0064 Sender's Address access method (SMTP, EX) | |
1014 0065 Sender's Address | |
1015 0070 Processed Subject (with Fwd:, Re, ... removed) | |
1016 0071 Date. Another date | |
1017 0075 Recipient Address Access Method (SMTP, EX) | |
1018 0076 Recipient's Address | |
1019 0077 Second Recipient Access Method (SMTP, EX) | |
1020 0078 Second Recipient Address | |
1021 007d Email Header. This is the header that was attached to the email | |
1022 0c17 Reply Requested | |
1023 0c19 Second sender struct | |
1024 0c1a Name of second sender struct | |
1025 0c1d Second outlook name of sender | |
1026 0c1e Second sender access method (SMTP, EX) | |
1027 0c1f Second Sender Address | |
1028 0e01 Delete after submit | |
1029 0e03 CC Address? | |
1030 0e04 SentTo Address | |
1031 0e06 Date. | |
1032 0e07 Flag - contains IsSeen value | |
1033 0e08 Message Size | |
1034 0e0a Sentmail EntryID | |
1035 0e1f Compressed RTF in Sync | |
1036 0e20 Attachment Size | |
1037 0ff9 binary record header | |
1038 1000 Plain Text Email Body. Does not exist if the email doesn't have a plain text version | |
1039 1006 RTF Sync Body CRC | |
1040 1007 RTF Sync Body character count | |
1041 1008 RTF Sync body tag | |
1042 1009 RTF Compressed body | |
1043 1010 RTF whitespace prefix count | |
1044 1011 RTF whitespace tailing count | |
1045 1013 HTML Email Body. Does not exist if the email doesn't have a HTML version | |
1046 1035 Message ID | |
1047 1042 In-Reply-To or Parent's Message ID | |
1048 1046 Return Path | |
1049 3001 Folder Name? I have seen this value used for the contacts record aswell | |
1050 3002 Address Type | |
1051 3003 Contact Address | |
1052 3004 Comment | |
1053 3007 Date item creation | |
1054 3008 Date item modification | |
1055 300b binary record header | |
1056 35df Valid Folder Mask | |
1057 35e0 binary record found in first item. Contains the reference to "Top of Personal Folder" item | |
1058 35e3 binary record with a reference to "Deleted Items" item | |
1059 35e7 binary record with a refernece to "Search Root" item | |
1060 3602 the number of emails stored in a folder | |
1061 3603 the number of unread emails in a folder | |
1062 360a Has Subfolders | |
1063 3613 the folder content description | |
1064 3617 Associate Content count | |
1065 3701 Binary Data attachment | |
1066 3704 Attachment Filename | |
1067 3705 Attachement method | |
1068 3707 Attachment Filename long | |
1069 370b Attachment Position | |
1070 370e Attachment mime encoding | |
1071 3710 Attachment Mime Sequence | |
1072 3a00 Contact's Account name | |
1073 3a01 Contact Alternate Recipient | |
1074 3a02 Callback telephone number | |
1075 3a03 Message Conversion Prohibited | |
1076 3a05 Contacts Suffix | |
1077 3a06 Contacts First Name | |
1078 3a07 Contacts Government ID Number | |
1079 3a08 Business Telephone Number | |
1080 3a09 Home Telephone Number | |
1081 3a0a Contacts Initials | |
1082 3a0b Keyword | |
1083 3a0c Contact's Language | |
1084 3a0d Contact's Location | |
1085 3a0e Mail Permission | |
1086 3a0f MHS Common Name | |
1087 3a10 Organizational ID # | |
1088 3a11 Contacts Surname | |
1089 3a12 original entry id | |
1090 3a13 original display name | |
1091 3a14 original search key | |
1092 3a15 Default Postal Address | |
1093 3a16 Company Name | |
1094 3a17 Job Title | |
1095 3a18 Department Name | |
1096 3a19 Office Location | |
1097 3a1a Primary Telephone | |
1098 3a1b Business Phone Number 2 | |
1099 3a1c Mobile Phone Number | |
1100 3a1d Radio Phone Number | |
1101 3a1e Car Phone Number | |
1102 3a1f Other Phone Number | |
1103 3a20 Transmittable Display Name | |
1104 3a21 Pager Phone Number | |
1105 3a22 user certificate | |
1106 3a23 Primary Fax Number | |
1107 3a24 Business Fax Number | |
1108 3a25 Home Fax Number | |
1109 3a26 Business Address Country | |
1110 3a27 Business Address City | |
1111 3a28 Business Address State | |
1112 3a29 Business Address Street | |
1113 3a2a Business Postal Code | |
1114 3a2b Business PO Box | |
1115 3a2c Telex Number | |
1116 3a2d ISDN Number | |
1117 3a2e Assistant Phone Number | |
1118 3a2f Home Phone 2 | |
1119 3a30 Assistant's Name | |
1120 3a40 Can receive Rich Text | |
1121 3a41 Wedding Anniversary | |
1122 3a42 Birthday | |
1123 3a43 Hobbies | |
1124 3a44 Middle Name | |
1125 3a45 Display Name Prefix (Title) | |
1126 3a46 Profession | |
1127 3a47 Preferred By Name | |
1128 3a48 Spouse's Name | |
1129 3a49 Computer Network Name | |
1130 3a4a Customer ID | |
1131 3a4b TTY/TDD Phone | |
1132 3a4c Ftp Site | |
1133 3a4d Gender | |
1134 3a4e Manager's Name | |
1135 3a4f Nickname | |
1136 3a50 Personal Home Page | |
1137 3a51 Business Home Page | |
1138 3a57 Company Main Phone | |
1139 3a58 childrens names | |
1140 3a59 Home Address City | |
1141 3a5a Home Address Country | |
1142 3a5b Home Address Postal Code | |
1143 3a5c Home Address State or Province | |
1144 3a5d Home Address Street | |
1145 3a5e Home Address Post Office Box | |
1146 3a5f Other Address City | |
1147 3a60 Other Address Country | |
1148 3a61 Other Address Postal Code | |
1149 3a62 Other Address State | |
1150 3a63 Other Address Street | |
1151 3a64 Other Address Post Office box | |
1152 65e3 Entry ID | |
1153 67f2 Attachment ID2 value | |
1154 67ff Password checksum [0x67FF] | |
1155 6f02 Secure HTML Body | |
1156 6f04 Secure Text Body | |
1157 7c07 Top of folders RecID [0x7c07] | |
1158 8000 Contain extra bits of information that have been taken from the email's header. I call them extra lines | |
1159 8005 Contact Fullname | |
1160 801a Home Address | |
1161 801b Business Address | |
1162 801c Other Address | |
1163 8082 Email Address 1 Transport | |
1164 8083 Email Address 1 Address | |
1165 8084 Email Address 1 Description | |
1166 8085 Email Address 1 Record | |
1167 8092 Email Address 2 Transport | |
1168 8093 Email Address 2 Address | |
1169 8094 DEBUG_EMAIL (("Email Address 2 Description | |
1170 8095 Email Address 2 Record | |
1171 80a2 DEBUG_EMAIL (("Email Address 3 Transport | |
1172 80a3 Email Address 3 Address | |
1173 80a4 Email Address 3 Description | |
1174 80a5 Email Address 3 Record | |
1175 80d8 Internet Free/Busy | |
1176 8205 Appointment shows as | |
1177 8208 Appointment Location | |
1178 8214 Label for appointment | |
32 | 1179 8215 All day appointment flag |
24 | 1180 8234 TimeZone of times |
1181 8235 Appointment Start Time | |
1182 8236 Appointment End Time | |
1183 8516 Duplicate Time Start | |
1184 8517 Duplicate Time End | |
1185 8530 Followup String | |
1186 8534 Mileage | |
1187 8535 Billing Information | |
1188 8554 Outlook Version | |
1189 8560 Appointment Reminder Time | |
1190 8700 Journal Entry Type | |
1191 8706 Start Timestamp | |
1192 8708 End Timestamp | |
1193 8712 Journal Entry Type | |
1194 ]]></literallayout> | |
1195 </refsect1> | |
1196 | |
28 | 1197 <refsect1 id='pst.file.desc2.5'> |
1198 <title>Associated Descriptor Item 0x7cec</title> | |
1199 <para> | |
1200 This style of descriptor block is similar to the BCEC format. | |
1201 </para> | |
1202 <literallayout class="monospaced"><![CDATA[ | |
1203 0000 7a 01 ec 7c 40 00 00 00 00 00 00 00 b5 04 02 00 | |
1204 0010 60 00 00 00 7c 18 60 00 60 00 62 00 65 00 20 00 | |
1205 0020 00 00 80 00 00 00 00 00 00 00 03 00 20 0e 0c 00 | |
1206 0030 04 03 1e 00 01 30 2c 00 04 0b 1e 00 03 37 28 00 | |
1207 0040 04 0a 1e 00 04 37 14 00 04 05 03 00 05 37 10 00 | |
1208 0050 04 04 1e 00 07 37 24 00 04 09 1e 00 08 37 20 00 | |
1209 0060 04 08 02 01 0a 37 18 00 04 06 03 00 0b 37 08 00 | |
1210 0070 04 02 1e 00 0d 37 1c 00 04 07 1e 00 0e 37 40 00 | |
1211 0080 04 10 02 01 0f 37 30 00 04 0c 1e 00 11 37 34 00 | |
1212 0090 04 0d 1e 00 12 37 3c 00 04 0f 1e 00 13 37 38 00 | |
1213 00A0 04 0e 03 00 f2 67 00 00 04 00 03 00 f3 67 04 00 | |
1214 00B0 04 01 03 00 09 69 44 00 04 11 03 00 fa 7f 5c 00 | |
1215 00C0 04 15 40 00 fb 7f 4c 00 08 13 40 00 fc 7f 54 00 | |
1216 00D0 08 14 03 00 fd 7f 48 00 04 12 0b 00 fe 7f 60 00 | |
1217 00E0 01 16 0b 00 ff 7f 61 00 01 17 45 82 00 00 00 00 | |
1218 00F0 45 82 00 00 78 3c 00 00 ff ff ff ff 49 1e 00 00 | |
1219 0100 06 00 00 00 00 00 00 00 a0 00 00 00 00 00 00 00 | |
1220 0110 00 00 00 00 00 00 00 00 00 00 00 00 c0 00 00 00 | |
1221 0120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1222 0130 00 00 00 00 00 00 00 00 00 00 00 00 00 40 dd a3 | |
1223 0140 57 45 b3 0c 00 40 dd a3 57 45 b3 0c 02 00 00 00 | |
1224 0150 00 00 fa 10 3e 2a 86 48 86 f7 14 03 0a 03 02 01 | |
1225 0160 4a 2e 20 44 61 76 69 64 20 4b 61 72 61 6d 27 73 | |
1226 0170 20 42 69 72 74 68 64 61 79 00 06 00 00 00 0c 00 | |
1227 0180 14 00 ea 00 f0 00 55 01 60 01 79 01 | |
1228 | |
1229 0000 indexOffset [2 bytes] 0x017a in this case | |
1230 0002 signature [2 bytes] 0x7cec constant | |
1231 0004 offset [2 bytes] 0x0040 in this case | |
1232 ]]></literallayout> | |
1233 <para> | |
1234 Note the signature of 0x7cec. There are other descriptor block | |
1235 formats with other signatures. | |
1236 Note the indexOffset of 0x017a - starting at that position in the | |
1237 descriptor block, we have an array of two byte integers. The first | |
1238 integer (0x0006) is a (count-1) of the number of overlapping pairs | |
1239 following the count. The first pair is (0, 0xc), the next pair is (0xc, 0x14) | |
1240 and the last (7th) pair is (0x160, 0x179). These pairs are (start,end+1) | |
1241 offsets of items in this block. So we have count+2 integers following | |
1242 the count value. | |
1243 </para> | |
1244 <para> | |
1245 Note the offset of 0x0040, which needs to be right shifted by 4 bits | |
1246 to become 0x0004, which is then a byte offset to be added to the above | |
1247 indexOffset plus two (to skip the count), so it points to the (0x14, 0xea) | |
1248 pair. We have the offset and size of the "7c" block located at offset 0x14 | |
1249 with a size of 214 bytes in this case. The "7c" block starts with | |
1250 a header with the following format: | |
1251 </para> | |
1252 <literallayout class="monospaced"><![CDATA[ | |
1253 0000 signature [1 bytes] 0x7c constant | |
1254 0001 itemCount [1 bytes] 0x18 in this case | |
1255 0002 unknown [2 bytes] 0x0060 in this case | |
1256 0004 unknown [2 bytes] 0x0060 in this case | |
1257 0006 unknown [2 bytes] 0x0062 in this case | |
1258 0008 recordSize [2 bytes] 0x0065 in this case | |
1259 000a b5Offset [2 bytes] 0x0020 in this case | |
1260 000c unknown [2 bytes] 0x0000 in this case | |
1261 000e index2Offset [2 bytes] 0x0080 in this case | |
1262 0010 unknown [2 bytes] 0x0000 in this case | |
1263 0012 unknown [2 bytes] 0x0000 in this case | |
1264 0014 unknown [2 bytes] 0x0000 in this case | |
1265 ]]></literallayout> | |
1266 <para> | |
1267 Note the b5Offset of 0x0020, which needs to be right shifted by 4 bits | |
1268 to become 0x0002, which is then a byte offset to be added to the above | |
1269 indexOffset plus two (to skip the count), so it points to the (0xc, | |
1270 0x14) pair. Finally, we have the offset and size of the "b5" block | |
1271 located at offset 0xc with a size of 8 bytes in this descriptor block. | |
1272 The "b5" block has the following format: | |
1273 </para> | |
1274 <literallayout class="monospaced"><![CDATA[ | |
1275 0000 signature [2 bytes] 0x04b5 constant | |
1276 0002 unknown [2 bytes] 0x0002 in this case | |
1277 0004 offset [4 bytes] 0x0060 in this case | |
1278 ]]></literallayout> | |
1279 <para> | |
1280 Note the "b5" offset of 0x0060, which needs to be right shifted by 4 | |
1281 bits to become 0x0006, which is then a byte offset to be added to the | |
1282 above indexOffset plus two (to skip the count), so it points to the | |
1283 (0xea, 0xf0) pair. That gives us (0xf0 - 0xea)/6 = 1, so we have a | |
1284 recordCount of one. The actual data between 0xea and 0xf0 is unknown | |
1285 and unused here. | |
1286 </para> | |
1287 <para> | |
1288 Note the index2Offset above of 0x0080, which needs to be right shifted | |
1289 by 4 bits to become 0x0008, which is then a byte offset to be added to | |
1290 the above indexOffset plus two (to skip the count), so it points to the | |
1291 (0xf0, 0x155) pair. This is an array of tables of four byte integers. | |
1292 We will call these the IND2 tables. The size of each of these tables is | |
1293 specified by the recordSize field of the "7c" header. The number of | |
1294 these tables is the above recordCount value derived from the "b5" block. | |
1295 </para> | |
1296 <para> | |
1297 Now the remaining data in the "7c" block after the header starts at | |
1298 offset 0x2a. There should be itemCount 8 byte items here, with the | |
1299 following format: | |
1300 </para> | |
1301 <literallayout class="monospaced"><![CDATA[ | |
1302 0000 referenceType [2 bytes] | |
1303 0002 itemType [2 bytes] | |
1304 0004 ind2Offset [2 bytes] | |
1305 0006 unknown [2 bytes] | |
1306 ]]></literallayout> | |
1307 <para> | |
1308 The ind2Offset is a byte offset into the current IND2 table of a four | |
1309 byte integer value. Once we fetch that, we have the same triple (item | |
1310 type, reference type, value) as we find in the 0xbcec style descriptor | |
1311 blocks. These 8 byte descriptors are processed recordCount times, each | |
1312 time using the next IND2 table. The item and reference types are as | |
1313 described above for the 0xbcec format descriptor block. | |
1314 </para> | |
1315 </refsect1> | |
1316 | |
24 | 1317 </refentry> |
16 | 1318 </reference> |