Esempio n. 1
0
        public PSTHeader(PSTFile pst)
        {
            using (var mmfView = pst.PSTMMF.CreateViewAccessor(0, 684))
            {
                var dwMagicBuffer = new byte[4];
                mmfView.ReadArray(0, dwMagicBuffer, 0, 4);
                DWMagic = Encoding.Default.GetString(dwMagicBuffer);

                var ver = mmfView.ReadInt16(10);


                IsANSI    = ver == 14 || ver == 15;
                IsUNICODE = ver == 23;

                if (IsUNICODE)
                {
                    var fileSizeBuffer = new byte[8];
                    mmfView.ReadArray(184, fileSizeBuffer, 0, 8);
                    var fileSizeBytes = BitConverter.ToUInt64(fileSizeBuffer, 0);
                    Root = new PSTRoot(fileSizeBytes);

                    var sentinel    = mmfView.ReadByte(512);
                    var cryptMethod = (uint)mmfView.ReadByte(513);

                    EncodingAlgotihm = (BlockEncoding)cryptMethod;

                    var bytes = new byte[16];
                    mmfView.ReadArray(216, bytes, 0, 16);
                    var nbt_bref = new BREF(bytes);

                    mmfView.ReadArray(232, bytes, 0, 16);
                    var bbt_bref = new BREF(bytes);

                    NodeBT  = new NodeDatabaseLayer.PSTBTree(nbt_bref, pst);
                    BlockBT = new NodeDatabaseLayer.PSTBTree(bbt_bref, pst);
                }
            }
        }
Esempio n. 2
0
        public PSTHeader(PSTFile pst)
        {
            using (var mmfView = pst.PSTMMF.CreateViewAccessor(0, 684))
            {
                var dwMagicBuffer = new byte[4];
                mmfView.ReadArray(0, dwMagicBuffer, 0, 4);
                DWMagic = Encoding.Default.GetString(dwMagicBuffer);

                var ver = mmfView.ReadInt16(10);
                Version = ver == 23 ? PstVersion.UNICODE : PstVersion.ANSI;
                if (Version == PstVersion.ANSI)
                {
                    throw new Exception("ANSI encoded PST not supported");
                }

                var rootBuffer = new byte[72];
                mmfView.ReadArray(180, rootBuffer, 0, rootBuffer.Length);

                Root = new PSTRoot(rootBuffer);

                var sentinel    = mmfView.ReadByte(512);
                var cryptMethod = (uint)mmfView.ReadByte(513);

                EncodingAlgotihm = (BlockEncoding)cryptMethod;

                var bytes = new byte[16];
                mmfView.ReadArray(216, bytes, 0, 16);
                var nbt_bref = new BREF(bytes);

                mmfView.ReadArray(232, bytes, 0, 16);
                var bbt_bref = new BREF(bytes);

                NodeBT  = new PSTBTree(nbt_bref, pst);
                BlockBT = new PSTBTree(bbt_bref, pst);
            }
        }