Mercurial > libpst
comparison xml/libpst.in @ 44:d4606d460daf
more fixes for 64 bit format
author | carl |
---|---|
date | Tue, 08 Jan 2008 16:19:26 -0800 |
parents | f6db1f060a95 |
children | b2a7f2e0926a |
comparison
equal
deleted
inserted
replaced
43:f6db1f060a95 | 44:d4606d460daf |
---|---|
17 </partintro> | 17 </partintro> |
18 | 18 |
19 | 19 |
20 <refentry id="readpst.1"> | 20 <refentry id="readpst.1"> |
21 <refentryinfo> | 21 <refentryinfo> |
22 <date>2008-01-06</date> | 22 <date>2008-01-08</date> |
23 </refentryinfo> | 23 </refentryinfo> |
24 | 24 |
25 <refmeta> | 25 <refmeta> |
26 <refentrytitle>readpst</refentrytitle> | 26 <refentrytitle>readpst</refentrytitle> |
27 <manvolnum>1</manvolnum> | 27 <manvolnum>1</manvolnum> |
210 </refentry> | 210 </refentry> |
211 | 211 |
212 | 212 |
213 <refentry id="lspst.1"> | 213 <refentry id="lspst.1"> |
214 <refentryinfo> | 214 <refentryinfo> |
215 <date>2008-01-06</date> | 215 <date>2008-01-08</date> |
216 </refentryinfo> | 216 </refentryinfo> |
217 | 217 |
218 <refmeta> | 218 <refmeta> |
219 <refentrytitle>lspst</refentrytitle> | 219 <refentrytitle>lspst</refentrytitle> |
220 <manvolnum>1</manvolnum> | 220 <manvolnum>1</manvolnum> |
284 </refentry> | 284 </refentry> |
285 | 285 |
286 | 286 |
287 <refentry id="readpstlog.1"> | 287 <refentry id="readpstlog.1"> |
288 <refentryinfo> | 288 <refentryinfo> |
289 <date>2008-01-06</date> | 289 <date>2008-01-08</date> |
290 </refentryinfo> | 290 </refentryinfo> |
291 | 291 |
292 <refmeta> | 292 <refmeta> |
293 <refentrytitle>readpstlog</refentrytitle> | 293 <refentrytitle>readpstlog</refentrytitle> |
294 <manvolnum>1</manvolnum> | 294 <manvolnum>1</manvolnum> |
459 </refentry> | 459 </refentry> |
460 | 460 |
461 | 461 |
462 <refentry id="pst2ldif.1"> | 462 <refentry id="pst2ldif.1"> |
463 <refentryinfo> | 463 <refentryinfo> |
464 <date>2008-01-06</date> | 464 <date>2008-01-08</date> |
465 </refentryinfo> | 465 </refentryinfo> |
466 | 466 |
467 <refmeta> | 467 <refmeta> |
468 <refentrytitle>pst2ldif</refentrytitle> | 468 <refentrytitle>pst2ldif</refentrytitle> |
469 <manvolnum>1</manvolnum> | 469 <manvolnum>1</manvolnum> |
583 </refentry> | 583 </refentry> |
584 | 584 |
585 | 585 |
586 <refentry id="pst.5"> | 586 <refentry id="pst.5"> |
587 <refentryinfo> | 587 <refentryinfo> |
588 <date>2008-01-06</date> | 588 <date>2008-01-08</date> |
589 </refentryinfo> | 589 </refentryinfo> |
590 | 590 |
591 <refmeta> | 591 <refmeta> |
592 <refentrytitle>outlook.pst</refentrytitle> | 592 <refentrytitle>outlook.pst</refentrytitle> |
593 <manvolnum>5</manvolnum> | 593 <manvolnum>5</manvolnum> |
608 <refsect1 id='pst.file.overview.5'> | 608 <refsect1 id='pst.file.overview.5'> |
609 <title>Overview</title> | 609 <title>Overview</title> |
610 <para> | 610 <para> |
611 Each item in a .pst file is identified by two id values ID1 and ID2. | 611 Each item in a .pst file is identified by two id values ID1 and ID2. |
612 There are two separate b-trees indexed by these ID1 and ID2 values. | 612 There are two separate b-trees indexed by these ID1 and ID2 values. |
613 </para> | 613 Starting with Outlook 2003, the file format changed from one with 32 |
614 </refsect1> | 614 bit pointers, to one with 64 bit pointers. We describe both formats |
615 | 615 here. |
616 <refsect1 id='pst.file.header.5'> | 616 </para> |
617 <title>File Header</title> | 617 </refsect1> |
618 <para> | 618 |
619 The file header is located at offset 0 in the .pst file. | 619 <refsect1 id='pst.file.header.32.5'> |
620 <title>32 bit File Header</title> | |
621 <para> | |
622 The 32 bit file header is located at offset 0 in the .pst file. | |
620 </para> | 623 </para> |
621 <literallayout class="monospaced"><![CDATA[ | 624 <literallayout class="monospaced"><![CDATA[ |
622 0000 21 42 44 4e 49 f8 64 d9 53 4d 0e 00 13 00 01 01 | 625 0000 21 42 44 4e 49 f8 64 d9 53 4d 0e 00 13 00 01 01 |
623 0010 00 00 00 00 00 00 00 00 50 d6 03 00 bd 1e 02 00 | 626 0010 00 00 00 00 00 00 00 00 50 d6 03 00 bd 1e 02 00 |
624 0020 08 4c 00 00 00 04 00 00 00 04 00 00 0f 04 00 00 | 627 0020 08 4c 00 00 00 04 00 00 00 04 00 00 0f 04 00 00 |
652 01e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | 655 01e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |
653 01f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | 656 01f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |
654 | 657 |
655 0000 signature [4 bytes] 0x4e444221 constant | 658 0000 signature [4 bytes] 0x4e444221 constant |
656 000a indexType [1 byte] 0x0e constant | 659 000a indexType [1 byte] 0x0e constant |
657 01cd encryptionType [1 byte] 0x01 constant | 660 01cd encryptionType [1 byte] 0x01 in this case |
658 00a8 total file size [4 bytes] 0x270400 in this case | 661 00a8 total file size [4 bytes] 0x270400 in this case |
659 00c0 backPointer1 [4 bytes] 0x021eb4 in this case | 662 00c0 backPointer1 [4 bytes] 0x021eb4 in this case |
660 00c4 offsetIndex1 [4 bytes] 0x005400 in this case | 663 00c4 offsetIndex1 [4 bytes] 0x005400 in this case |
661 00b8 backPointer2 [4 bytes] 0x021ebc in this case | 664 00b8 backPointer2 [4 bytes] 0x021ebc in this case |
662 00bc offsetIndex2 [4 bytes] 0x0c7e00 in this case | 665 00bc offsetIndex2 [4 bytes] 0x0c7e00 in this case |
663 ]]></literallayout> | 666 ]]></literallayout> |
664 <para> | 667 <para> |
665 We only support index type 0x0E and encryption type 0x01. | 668 We only support index types 0x0e and 0x17, and encryption types |
669 0x00 and 0x01. Index type 0x0e is the older 32 bit Outlook format. | |
670 Index type 0x17 is the newer 64 bit Outlook format. Encryption | |
671 type 0x00 is no encryption, and type 0x01 is the only other supported | |
672 encryption type. | |
666 </para> | 673 </para> |
667 <para> | 674 <para> |
668 offsetIndex1 is the file offset of the root of the | 675 offsetIndex1 is the file offset of the root of the |
669 index1 b-tree, which contains (ID1, offset, size, unknown) tuples | 676 index1 b-tree, which contains (ID1, offset, size, unknown) tuples |
670 for each item in the file. backPointer1 is the value that should | 677 for each item in the file. backPointer1 is the value that should |
676 tuples for each item in the file. backPointer2 is the value that should | 683 tuples for each item in the file. backPointer2 is the value that should |
677 appear in the parent pointer of that root node. | 684 appear in the parent pointer of that root node. |
678 </para> | 685 </para> |
679 </refsect1> | 686 </refsect1> |
680 | 687 |
681 <refsect1 id='pst.file.node1.5'> | 688 <refsect1 id='pst.file.header.64.5'> |
682 <title>Index 1 Node</title> | 689 <title>64 bit File Header</title> |
683 <para> | 690 <para> |
684 The index1 b-tree nodes are 516 byte blocks with the following format. | 691 The 64 bit file header is located at offset 0 in the .pst file. |
692 </para> | |
693 <literallayout class="monospaced"><![CDATA[ | |
694 0000 21 42 44 4e 03 02 23 b2 53 4d 17 00 13 00 01 01 | |
695 0010 00 00 00 00 00 00 00 00 04 00 00 00 01 00 00 00 | |
696 0020 8b 00 00 00 00 00 00 00 1d 00 00 00 00 04 00 00 | |
697 0030 00 04 00 00 04 04 00 00 00 40 00 00 02 00 01 00 | |
698 0040 00 04 00 00 00 04 00 00 00 04 00 00 00 80 00 00 | |
699 0050 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 | |
700 0060 04 04 00 00 04 04 00 00 04 04 00 00 00 04 00 00 | |
701 0070 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 | |
702 0080 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 | |
703 0090 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 | |
704 00a0 00 04 00 00 00 04 00 00 02 04 00 00 00 00 00 00 | |
705 00b0 00 00 00 00 00 00 00 00 00 24 04 00 00 00 00 00 | |
706 00c0 00 44 00 00 00 00 00 00 00 71 03 00 00 00 00 00 | |
707 00d0 00 22 00 00 00 00 00 00 83 00 00 00 00 00 00 00 | |
708 00e0 00 6a 00 00 00 00 00 00 8a 00 00 00 00 00 00 00 | |
709 00f0 00 60 00 00 00 00 00 00 01 00 00 00 00 00 00 00 | |
710 0100 ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
711 0110 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
712 0120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
713 0130 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
714 0140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
715 0150 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
716 0160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
717 0170 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
718 0180 7f ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff | |
719 0190 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff | |
720 01a0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff | |
721 01b0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff | |
722 01c0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff | |
723 01d0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff | |
724 01e0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff | |
725 01f0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff | |
726 0200 80 00 00 00 e8 00 00 00 00 00 00 00 c4 68 cb 89 | |
727 | |
728 0000 signature [4 bytes] 0x4e444221 constant | |
729 000a indexType [1 byte] 0x17 constant | |
730 0201 encryptionType [1 byte] 0x00 in this case | |
731 00b8 total file size [8 bytes] 0x042400 in this case | |
732 00e8 backPointer1 [8 bytes] 0x00008a in this case | |
733 00f0 offsetIndex1 [8 bytes] 0x006000 in this case | |
734 00d8 backPointer2 [8 bytes] 0x000083 in this case | |
735 00e0 offsetIndex2 [8 bytes] 0x006a00 in this case | |
736 ]]></literallayout> | |
737 </refsect1> | |
738 | |
739 <refsect1 id='pst.file.node1.32.5'> | |
740 <title>32 bit Index 1 Node</title> | |
741 <para> | |
742 The 32 bit index1 b-tree nodes are 516 byte blocks with the | |
743 following format. | |
685 </para> | 744 </para> |
686 <literallayout class="monospaced"><![CDATA[ | 745 <literallayout class="monospaced"><![CDATA[ |
687 0000 04 00 00 00 8a 1e 02 00 00 1c 0b 00 | 746 0000 04 00 00 00 8a 1e 02 00 00 1c 0b 00 |
688 000c 58 27 03 00 b3 1e 02 00 00 52 00 00 | 747 000c 58 27 03 00 b3 1e 02 00 00 52 00 00 |
689 0018 00 00 00 00 00 00 00 00 00 00 00 00 | 748 0018 00 00 00 00 00 00 00 00 00 00 00 00 |
745 backPointer value must match the backPointer in that deeper node, | 804 backPointer value must match the backPointer in that deeper node, |
746 and ID1 is the lowest ID1 value in the subtree. | 805 and ID1 is the lowest ID1 value in the subtree. |
747 </para> | 806 </para> |
748 </refsect1> | 807 </refsect1> |
749 | 808 |
750 <refsect1 id='pst.file.leaf1.5'> | 809 <refsect1 id='pst.file.node1.64.5'> |
751 <title>Index 1 Leaf Node</title> | 810 <title>64 bit Index 1 Node</title> |
752 <para> | 811 <para> |
753 The index1 b-tree leaf nodes are 516 byte blocks with the following format. | 812 The 64 bit index1 b-tree nodes are 512 byte blocks with the |
813 following format. | |
814 </para> | |
815 <literallayout class="monospaced"><![CDATA[ | |
816 0000 04 00 00 00 00 00 00 00 88 00 00 00 | |
817 000C 00 00 00 00 00 48 00 00 00 00 00 00 | |
818 0018 74 00 00 00 00 00 00 00 86 00 00 00 | |
819 0024 00 00 00 00 00 54 00 00 00 00 00 00 | |
820 0030 00 00 00 00 00 00 00 00 00 00 00 00 | |
821 003C 00 00 00 00 00 00 00 00 00 00 00 00 | |
822 0048 00 00 00 00 00 00 00 00 00 00 00 00 | |
823 0054 00 00 00 00 00 00 00 00 00 00 00 00 | |
824 0060 00 00 00 00 00 00 00 00 00 00 00 00 | |
825 006C 00 00 00 00 00 00 00 00 00 00 00 00 | |
826 0078 00 00 00 00 00 00 00 00 00 00 00 00 | |
827 0084 00 00 00 00 00 00 00 00 00 00 00 00 | |
828 0090 00 00 00 00 00 00 00 00 00 00 00 00 | |
829 009C 00 00 00 00 00 00 00 00 00 00 00 00 | |
830 00A8 00 00 00 00 00 00 00 00 00 00 00 00 | |
831 00B4 00 00 00 00 00 00 00 00 00 00 00 00 | |
832 00C0 00 00 00 00 00 00 00 00 00 00 00 00 | |
833 00CC 00 00 00 00 00 00 00 00 00 00 00 00 | |
834 00D8 00 00 00 00 00 00 00 00 00 00 00 00 | |
835 00E4 00 00 00 00 00 00 00 00 00 00 00 00 | |
836 00F0 00 00 00 00 00 00 00 00 00 00 00 00 | |
837 00FC 00 00 00 00 00 00 00 00 00 00 00 00 | |
838 0108 00 00 00 00 00 00 00 00 00 00 00 00 | |
839 0114 00 00 00 00 00 00 00 00 00 00 00 00 | |
840 0120 00 00 00 00 00 00 00 00 00 00 00 00 | |
841 012C 00 00 00 00 00 00 00 00 00 00 00 00 | |
842 0138 00 00 00 00 00 00 00 00 00 00 00 00 | |
843 0144 00 00 00 00 00 00 00 00 00 00 00 00 | |
844 0150 00 00 00 00 00 00 00 00 00 00 00 00 | |
845 015C 00 00 00 00 00 00 00 00 00 00 00 00 | |
846 0168 00 00 00 00 00 00 00 00 00 00 00 00 | |
847 0174 00 00 00 00 00 00 00 00 00 00 00 00 | |
848 0180 00 00 00 00 00 00 00 00 00 00 00 00 | |
849 018C 00 00 00 00 00 00 00 00 00 00 00 00 | |
850 0198 00 00 00 00 00 00 00 00 00 00 00 00 | |
851 01A4 00 00 00 00 00 00 00 00 00 00 00 00 | |
852 01B0 00 00 00 00 00 00 00 00 00 00 00 00 | |
853 01BC 00 00 00 00 00 00 00 00 00 00 00 00 | |
854 01C8 00 00 00 00 00 00 00 00 00 00 00 00 | |
855 01D4 00 00 00 00 00 00 00 00 00 00 00 00 | |
856 01E0 00 00 00 00 00 00 00 00 02 14 18 01 | |
857 01EC 00 00 00 00 80 80 8a 60 68 e5 b5 19 | |
858 01F8 8a 00 00 00 00 00 00 00 | |
859 | |
860 01e8 itemCount [1 byte] 0x02 in this case | |
861 01e9 maxItemCount [1 byte] 0x14 constant | |
862 01eb nodeLevel [1 byte] 0x01 in this case | |
863 01f8 backPointer [8 bytes] 0x00008a in this case | |
864 ]]></literallayout> | |
865 <para> | |
866 The itemCount specifies the number of 24 byte records that | |
867 are active. The nodeLevel is non-zero for this style of nodes. | |
868 The leaf nodes have a different format. The backPointer must | |
869 match the backPointer from the triple that pointed to this node. | |
870 </para> | |
871 <para> | |
872 Each item in this node is a triple of (ID1, backPointer, offset) | |
873 where the offset points to the next deeper node in the tree, the | |
874 backPointer value must match the backPointer in that deeper node, | |
875 and ID1 is the lowest ID1 value in the subtree. | |
876 </para> | |
877 </refsect1> | |
878 | |
879 <refsect1 id='pst.file.leaf1.32.5'> | |
880 <title>32 bit Index 1 Leaf Node</title> | |
881 <para> | |
882 The 32 bit index1 b-tree leaf nodes are 516 byte blocks with the | |
883 following format. | |
754 </para> | 884 </para> |
755 <literallayout class="monospaced"><![CDATA[ | 885 <literallayout class="monospaced"><![CDATA[ |
756 0000 04 00 00 00 00 58 00 00 64 00 0f 00 | 886 0000 04 00 00 00 00 58 00 00 64 00 0f 00 |
757 000c 08 00 00 00 80 58 00 00 ac 00 06 00 | 887 000c 08 00 00 00 80 58 00 00 ac 00 06 00 |
758 0018 0c 00 00 00 40 59 00 00 ac 00 06 00 | 888 0018 0c 00 00 00 40 59 00 00 ac 00 06 00 |
797 01ec 00 00 00 00 1f 29 0c 00 80 80 5b b3 | 927 01ec 00 00 00 00 1f 29 0c 00 80 80 5b b3 |
798 01f8 5a 67 01 00 4f ae 70 a7 92 06 00 00 | 928 01f8 5a 67 01 00 4f ae 70 a7 92 06 00 00 |
799 | 929 |
800 01f0 itemCount [1 byte] 0x1f in this case | 930 01f0 itemCount [1 byte] 0x1f in this case |
801 01f1 maxItemCount [1 byte] 0x29 constant | 931 01f1 maxItemCount [1 byte] 0x29 constant |
802 01f3 nodeLevel [1 byte] 0x00 in this case | 932 01f3 nodeLevel [1 byte] 0x00 defines a leaf node |
803 01f8 backPointer [4 bytes] 0x01675a in this case | 933 01f8 backPointer [4 bytes] 0x01675a in this case |
804 ]]></literallayout> | 934 ]]></literallayout> |
805 <para> | 935 <para> |
806 The itemCount specifies the number of 12 byte records that | 936 The itemCount specifies the number of 12 byte records that |
807 are active. The nodeLevel is zero for these leaf nodes. | 937 are active. The nodeLevel is zero for these leaf nodes. |
817 I don't know what that means), but when we do the search in this | 947 I don't know what that means), but when we do the search in this |
818 tree we need to clear that bit so that we can find the correct item. | 948 tree we need to clear that bit so that we can find the correct item. |
819 </para> | 949 </para> |
820 </refsect1> | 950 </refsect1> |
821 | 951 |
822 <refsect1 id='pst.file.node2.5'> | 952 <refsect1 id='pst.file.leaf1.64.5'> |
823 <title>Index 2 Node</title> | 953 <title>64 bit Index 1 Leaf Node</title> |
824 <para> | 954 <para> |
825 The index2 b-tree nodes are 516 byte blocks with the following format. | 955 The 64 bit index1 b-tree leaf nodes are 512 byte blocks with the |
956 following format. | |
957 </para> | |
958 <literallayout class="monospaced"><![CDATA[ | |
959 0000 04 00 00 00 00 00 00 00 00 58 00 00 | |
960 000C 00 00 00 00 6c 00 05 00 00 00 00 00 | |
961 0018 08 00 00 00 00 00 00 00 80 58 00 00 | |
962 0024 00 00 00 00 b4 00 06 00 d8 22 37 08 | |
963 0030 0c 00 00 00 00 00 00 00 80 59 00 00 | |
964 003C 00 00 00 00 ac 00 07 00 d8 22 37 08 | |
965 0048 10 00 00 00 00 00 00 00 40 5a 00 00 | |
966 0054 00 00 00 00 bc 00 03 00 d8 22 37 08 | |
967 0060 14 00 00 00 00 00 00 00 40 5b 00 00 | |
968 006C 00 00 00 00 a4 00 02 00 d8 22 37 08 | |
969 0078 18 00 00 00 00 00 00 00 00 5c 00 00 | |
970 0084 00 00 00 00 64 00 02 00 d8 22 37 08 | |
971 0090 1c 00 00 00 00 00 00 00 80 5c 00 00 | |
972 009C 00 00 00 00 5c 00 02 00 d8 22 37 08 | |
973 00A8 24 00 00 00 00 00 00 00 80 5d 00 00 | |
974 00B4 00 00 00 00 72 00 02 00 d8 22 37 08 | |
975 00C0 34 00 00 00 00 00 00 00 00 70 00 00 | |
976 00CC 00 00 00 00 8c 00 02 00 00 0d 00 00 | |
977 00D8 38 00 00 00 00 00 00 00 c0 71 00 00 | |
978 00E4 00 00 00 00 5c 00 02 00 d8 22 9c 00 | |
979 00F0 40 00 00 00 00 00 00 00 40 72 00 00 | |
980 00FC 00 00 00 00 26 00 02 00 d8 22 9c 00 | |
981 0108 4c 00 00 00 00 00 00 00 80 5f 00 00 | |
982 0114 00 00 00 00 3e 00 02 00 d8 22 9c 00 | |
983 0120 5c 00 00 00 00 00 00 00 c0 76 00 00 | |
984 012C 00 00 00 00 8c 00 02 00 d8 22 9c 00 | |
985 0138 64 00 00 00 00 00 00 00 40 75 00 00 | |
986 0144 00 00 00 00 76 00 02 00 d8 22 9c 00 | |
987 0150 6c 00 00 00 00 00 00 00 c0 73 00 00 | |
988 015C 00 00 00 00 5e 00 02 00 d8 22 9c 00 | |
989 0168 70 00 00 00 00 00 00 00 80 72 00 00 | |
990 0174 00 00 00 00 1e 01 02 00 d8 22 9c 00 | |
991 0180 70 00 00 00 00 00 00 00 80 72 00 00 | |
992 018C 00 00 00 00 1e 01 02 00 d8 22 9c 00 | |
993 0198 70 00 00 00 00 00 00 00 80 72 00 00 | |
994 01A4 00 00 00 00 1e 01 02 00 d8 22 9c 00 | |
995 01B0 74 00 00 00 00 00 00 00 40 74 00 00 | |
996 01BC 00 00 00 00 e0 00 02 00 d8 22 9c 00 | |
997 01C8 7c 00 00 00 00 00 00 00 80 77 00 00 | |
998 01D4 00 00 00 00 dc 00 02 00 d8 22 9c 00 | |
999 01E0 00 00 00 00 00 00 00 00 10 14 18 00 | |
1000 01EC 00 00 00 00 80 80 88 48 3f 50 0b 04 | |
1001 01F8 88 00 00 00 00 00 00 00 | |
1002 | |
1003 01e8 itemCount [1 byte] 0x10 in this case | |
1004 01e9 maxItemCount [1 byte] 0x14 constant | |
1005 01eb nodeLevel [1 byte] 0x00 defines a leaf node | |
1006 01f8 backPointer [8 bytes] 0x000088 in this case | |
1007 ]]></literallayout> | |
1008 <para> | |
1009 The itemCount specifies the number of 24 byte records that | |
1010 are active. The nodeLevel is zero for these leaf nodes. | |
1011 The backPointer must match the backPointer from the triple | |
1012 that pointed to this node. | |
1013 </para> | |
1014 <para> | |
1015 Each item in this node is a tuple of (ID1, offset, size, unknown) | |
1016 The two low order bits of the ID1 value seem to be flags. I have | |
1017 never seen a case with bit zero set. Bit one indicates that the | |
1018 item is <emphasis>not</emphasis> encrypted. Note that references | |
1019 to these ID1 values elsewhere may have the low order bit set (and | |
1020 I don't know what that means), but when we do the search in this | |
1021 tree we need to clear that bit so that we can find the correct item. | |
1022 </para> | |
1023 </refsect1> | |
1024 | |
1025 <refsect1 id='pst.file.node2.32.5'> | |
1026 <title>32 bit Index 2 Node</title> | |
1027 <para> | |
1028 The 32 bit index2 b-tree nodes are 516 byte blocks with the | |
1029 following format. | |
826 </para> | 1030 </para> |
827 <literallayout class="monospaced"><![CDATA[ | 1031 <literallayout class="monospaced"><![CDATA[ |
828 0000 21 00 00 00 bb 1e 02 00 00 e2 0b 00 | 1032 0000 21 00 00 00 bb 1e 02 00 00 e2 0b 00 |
829 000c 64 78 20 00 8c 1e 02 00 00 dc 0b 00 | 1033 000c 64 78 20 00 8c 1e 02 00 00 dc 0b 00 |
830 0018 00 00 00 00 00 00 00 00 00 00 00 00 | 1034 0018 00 00 00 00 00 00 00 00 00 00 00 00 |
886 backPointer value must match the backPointer in that deeper node, | 1090 backPointer value must match the backPointer in that deeper node, |
887 and ID2 is the lowest ID2 value in the subtree. | 1091 and ID2 is the lowest ID2 value in the subtree. |
888 </para> | 1092 </para> |
889 </refsect1> | 1093 </refsect1> |
890 | 1094 |
891 <refsect1 id='pst.file.leaf2.5'> | 1095 <refsect1 id='pst.file.node2.64.5'> |
892 <title>Index 2 Leaf Node</title> | 1096 <title>64 bit Index 2 Node</title> |
893 <para> | 1097 <para> |
894 The index2 b-tree leaf nodes are 516 byte blocks with the following format. | 1098 The 64 bit index2 b-tree nodes are 512 byte blocks with the |
1099 following format. | |
1100 </para> | |
1101 <literallayout class="monospaced"><![CDATA[ | |
1102 0000 21 00 00 00 00 00 00 00 77 00 00 00 | |
1103 000C 00 00 00 00 00 56 00 00 00 00 00 00 | |
1104 0018 4c 06 00 00 00 00 00 00 82 00 00 00 | |
1105 0024 00 00 00 00 00 68 00 00 00 00 00 00 | |
1106 0030 4f 80 00 00 00 00 00 00 84 00 00 00 | |
1107 003C 00 00 00 00 00 6e 00 00 00 00 00 00 | |
1108 0048 00 00 00 00 00 00 00 00 00 00 00 00 | |
1109 0054 00 00 00 00 00 00 00 00 00 00 00 00 | |
1110 0060 00 00 00 00 00 00 00 00 00 00 00 00 | |
1111 006C 00 00 00 00 00 00 00 00 00 00 00 00 | |
1112 0078 00 00 00 00 00 00 00 00 00 00 00 00 | |
1113 0084 00 00 00 00 00 00 00 00 00 00 00 00 | |
1114 0090 00 00 00 00 00 00 00 00 00 00 00 00 | |
1115 009C 00 00 00 00 00 00 00 00 00 00 00 00 | |
1116 00A8 00 00 00 00 00 00 00 00 00 00 00 00 | |
1117 00B4 00 00 00 00 00 00 00 00 00 00 00 00 | |
1118 00C0 00 00 00 00 00 00 00 00 00 00 00 00 | |
1119 00CC 00 00 00 00 00 00 00 00 00 00 00 00 | |
1120 00D8 00 00 00 00 00 00 00 00 00 00 00 00 | |
1121 00E4 00 00 00 00 00 00 00 00 00 00 00 00 | |
1122 00F0 00 00 00 00 00 00 00 00 00 00 00 00 | |
1123 00FC 00 00 00 00 00 00 00 00 00 00 00 00 | |
1124 0108 00 00 00 00 00 00 00 00 00 00 00 00 | |
1125 0114 00 00 00 00 00 00 00 00 00 00 00 00 | |
1126 0120 00 00 00 00 00 00 00 00 00 00 00 00 | |
1127 012C 00 00 00 00 00 00 00 00 00 00 00 00 | |
1128 0138 00 00 00 00 00 00 00 00 00 00 00 00 | |
1129 0144 00 00 00 00 00 00 00 00 00 00 00 00 | |
1130 0150 00 00 00 00 00 00 00 00 00 00 00 00 | |
1131 015C 00 00 00 00 00 00 00 00 00 00 00 00 | |
1132 0168 00 00 00 00 00 00 00 00 00 00 00 00 | |
1133 0174 00 00 00 00 00 00 00 00 00 00 00 00 | |
1134 0180 00 00 00 00 00 00 00 00 00 00 00 00 | |
1135 018C 00 00 00 00 00 00 00 00 00 00 00 00 | |
1136 0198 00 00 00 00 00 00 00 00 00 00 00 00 | |
1137 01A4 00 00 00 00 00 00 00 00 00 00 00 00 | |
1138 01B0 00 00 00 00 00 00 00 00 00 00 00 00 | |
1139 01BC 00 00 00 00 00 00 00 00 00 00 00 00 | |
1140 01C8 00 00 00 00 00 00 00 00 00 00 00 00 | |
1141 01D4 00 00 00 00 00 00 00 00 00 00 00 00 | |
1142 01E0 00 00 00 00 00 00 00 00 03 14 18 01 | |
1143 01EC 00 00 00 00 81 81 83 6a 49 da f3 d3 | |
1144 01F8 83 00 00 00 00 00 00 00 | |
1145 | |
1146 01e8 itemCount [1 byte] 0x03 in this case | |
1147 01e9 maxItemCount [1 byte] 0x14 constant | |
1148 01eb nodeLevel [1 byte] 0x01 in this case | |
1149 01f8 backPointer [4 bytes] 0x000083 in this case | |
1150 ]]></literallayout> | |
1151 <para> | |
1152 The itemCount specifies the number of 24 byte records that | |
1153 are active. The nodeLevel is non-zero for this style of nodes. | |
1154 The leaf nodes have a different format. The backPointer must | |
1155 match the backPointer from the triple that pointed to this node. | |
1156 </para> | |
1157 <para> | |
1158 Each item in this node is a triple of (ID2, backPointer, offset) | |
1159 where the offset points to the next deeper node in the tree, the | |
1160 backPointer value must match the backPointer in that deeper node, | |
1161 and ID2 is the lowest ID2 value in the subtree. | |
1162 </para> | |
1163 </refsect1> | |
1164 | |
1165 <refsect1 id='pst.file.leaf2.32.5'> | |
1166 <title>32 bit Index 2 Leaf Node</title> | |
1167 <para> | |
1168 The 32 bit index2 b-tree leaf nodes are 516 byte blocks with the | |
1169 following format. | |
895 </para> | 1170 </para> |
896 <literallayout class="monospaced"><![CDATA[ | 1171 <literallayout class="monospaced"><![CDATA[ |
897 0000 21 00 00 00 38 e6 00 00 00 00 00 00 00 00 00 00 | 1172 0000 21 00 00 00 38 e6 00 00 00 00 00 00 00 00 00 00 |
898 0010 61 00 00 00 2c a8 02 00 36 a8 02 00 00 00 00 00 | 1173 0010 61 00 00 00 2c a8 02 00 36 a8 02 00 00 00 00 00 |
899 0020 22 01 00 00 20 a2 02 00 00 00 00 00 22 01 00 00 | 1174 0020 22 01 00 00 20 a2 02 00 00 00 00 00 22 01 00 00 |
942 <para> | 1217 <para> |
943 Each item in this node is a tuple of (ID2, DESC-ID1, LIST-ID1, PARENT-ID2) | 1218 Each item in this node is a tuple of (ID2, DESC-ID1, LIST-ID1, PARENT-ID2) |
944 </para> | 1219 </para> |
945 </refsect1> | 1220 </refsect1> |
946 | 1221 |
1222 <refsect1 id='pst.file.leaf2.64.5'> | |
1223 <title>64 bit Index 2 Leaf Node</title> | |
1224 <para> | |
1225 The 64 bit index2 b-tree leaf nodes are 512 byte blocks with the | |
1226 following format. | |
1227 </para> | |
1228 <literallayout class="monospaced"><![CDATA[ | |
1229 0000 21 00 00 00 00 00 00 00 74 00 00 00 00 00 00 00 | |
1230 0010 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 | |
1231 0020 61 00 00 00 00 00 00 00 34 00 00 00 00 00 00 00 | |
1232 0030 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 | |
1233 0040 22 01 00 00 00 00 00 00 4c 00 00 00 00 00 00 00 | |
1234 0050 00 00 00 00 00 00 00 00 22 01 00 00 02 00 00 00 | |
1235 0060 2d 01 00 00 00 00 00 00 70 00 00 00 00 00 00 00 | |
1236 0070 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 | |
1237 0080 2e 01 00 00 00 00 00 00 08 00 00 00 00 00 00 00 | |
1238 0090 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 | |
1239 00A0 2f 01 00 00 00 00 00 00 0c 00 00 00 00 00 00 00 | |
1240 00B0 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 | |
1241 00C0 e1 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1242 00D0 00 00 00 00 00 00 00 00 00 00 00 00 d8 e3 13 00 | |
1243 00E0 01 02 00 00 00 00 00 00 8c 00 00 00 00 00 00 00 | |
1244 00F0 00 00 00 00 00 00 00 00 00 00 00 00 b0 e3 13 00 | |
1245 0100 61 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |
1246 0110 00 00 00 00 00 00 00 00 00 00 00 00 d8 e3 13 00 | |
1247 0120 0d 06 00 00 00 00 00 00 04 00 00 00 00 00 00 00 | |
1248 0130 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 | |
1249 0140 0e 06 00 00 00 00 00 00 08 00 00 00 00 00 00 00 | |
1250 0150 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 | |
1251 0160 0f 06 00 00 00 00 00 00 0c 00 00 00 00 00 00 00 | |
1252 0170 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 | |
1253 0180 10 06 00 00 00 00 00 00 10 00 00 00 00 00 00 00 | |
1254 0190 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 | |
1255 01A0 2b 06 00 00 00 00 00 00 24 00 00 00 00 00 00 00 | |
1256 01B0 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 | |
1257 01C0 71 06 00 00 00 00 00 00 18 00 00 00 00 00 00 00 | |
1258 01D0 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 | |
1259 01E0 00 00 00 00 00 00 00 00 0e 0f 20 00 00 00 00 00 | |
1260 01F0 81 81 77 56 f8 32 43 49 77 00 00 00 00 00 00 00 | |
1261 | |
1262 01e8 itemCount [1 byte] 0x0e in this case | |
1263 01e9 maxItemCount [1 byte] 0x0f constant | |
1264 01eb nodeLevel [1 byte] 0x00 defines a leaf node | |
1265 01f8 backPointer [4 bytes] 0x000077 in this case | |
1266 ]]></literallayout> | |
1267 <para> | |
1268 The itemCount specifies the number of 32 byte records that | |
1269 are active. The nodeLevel is zero for these leaf nodes. | |
1270 The backPointer must match the backPointer from the triple | |
1271 that pointed to this node. | |
1272 </para> | |
1273 <para> | |
1274 Each item in this node is a tuple of (ID2, DESC-ID1, LIST-ID1, PARENT-ID2) | |
1275 </para> | |
1276 </refsect1> | |
1277 | |
947 <refsect1 id='pst.file.list.5'> | 1278 <refsect1 id='pst.file.list.5'> |
948 <title>Associated List Item</title> | 1279 <title>Associated List Item</title> |
949 <para> | 1280 <para> |
950 Contains associations between id1 and id2 for the items controlled by the record. | 1281 Contains associations between id1 and id2 for the items controlled by the record. |
951 In the above leaf node, we have a tuple of (0x61, 0x02a82c, 0x02a836, 0) | 1282 In the above 32 bit leaf node, we have a tuple of (0x61, 0x02a82c, 0x02a836, 0) |
952 0x02a836 is the ID1 of the associated list, and we can lookup that ID1 value | 1283 0x02a836 is the ID1 of the associated list, and we can lookup that ID1 value |
953 in the index1 b-tree to find the (offset,size) of the data in the .pst file. | 1284 in the index1 b-tree to find the (offset,size) of the data in the .pst file. |
954 </para> | 1285 </para> |
955 <literallayout class="monospaced"><![CDATA[ | 1286 <literallayout class="monospaced"><![CDATA[ |
956 0000 02 00 01 00 9f 81 00 00 30 a8 02 00 00 00 00 00 | 1287 0000 02 00 01 00 9f 81 00 00 30 a8 02 00 00 00 00 00 |