OE dbx file format : 'indexed info' | C++ |
The indexed info structure stores information of various kinds. I found int4 (direct stored int3), windows FILETIME structures, 0x00 terminated c-strings and data arrays (the first int4 value of every data array I found is the data array length - 0x04).
The indexed info data structure is used for the message info and the folder info objects.
The header is 0x0c bytes long | ||
---|---|---|
position | type | description |
(1) | int4 | object marker |
(2) | int4 | length of the following indexed info body |
(3) | int2 | length of this indexed info object. (not always set) |
(4) | int1 | entries in the following index field |
(5) | int1 | counts the changes on this indexed info object |
The body of the indexed info is separated in two sectors. | ||
The index field : Consists of (4) entries. | ||
position | type | description |
(6) | int1 | Bits 1-7 index |
(7) | Bit 8 value is stored direct | |
(8) | int3 | value |
The data field : Data addressed in the index field. | ||
position | type | description |
(9) | data | the length of this data field is (2) - 4*(4) bytes In the following text I am using data as a pointer to the data field. |
If direct stored in(7) is not set, the content of the index (6) is stored in the data field starting at data+(8) and ends before the next entry. To make the object length a multiple of 4, padding fields can be inserted behind the last entry. In the other case the value is directly used. The indexes are sorted.
A small example 0x0000ba00 : 00 ba 00 00 1c 00 00 00 00 00 04 01 80 0a 00 00 0x0000ba10 : 01 00 00 00 02 04 00 00 84 f0 30 00 07 09 00 00 0x0000ba20 : 80 09 12 56 26 09 81 1b => (1) = 0xba00 (object marker OK) (2) = 0x1c (object ends before 0xba00+0xc+0x1c) (3) = 0x00 (not set) (4) = 0x04 (5) = 0x01 (6) = 0x00 0x01 0x02 0x04 (7) = 1 0 0 1 (8) = 0x00000a 0x000000 0x000004 0x0030f0 So the contents of the indexes are 0x00 -> 0x0a 0x01 -> "07 09 00 00" 0x02 -> "80 09 12 56 26 09 81 1b" (ends with the object) 0x04 -> 0x30f0