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