public PSTHeader(PSTFile pst) { var tempBytes = new byte[684]; using (var mmfView = pst.PSTMMF.CreateViewAccessor(0, tempBytes.Length)) { mmfView.ReadArray(0, tempBytes, 0, tempBytes.Length); DWMagic = Encoding.ASCII.GetString(tempBytes, 0, 4); var ver = BitConverter.ToUInt16(tempBytes, 10); bool ansi = (ver == 14 || ver == 15); isUnicode = !ansi; //root.PSTSize = ByteReverse.ReverseULong(root.PSTSize); var sentinel = tempBytes[isUnicode ? 512 : 460]; EncodingAlgotihm = (BlockEncoding)tempBytes[isUnicode ? 513 : 461]; var nbt_bref = new BREF(isUnicode, tempBytes, isUnicode ? 216 : 184); var bbt_bref = new BREF(isUnicode, tempBytes, isUnicode ? 232 : 192); NodeBT = new NDB.PSTBTree(isUnicode, nbt_bref, pst); BlockBT = new NDB.PSTBTree(isUnicode, bbt_bref, pst); } }
public PSTHeader(PSTFile pst) { using (var mmfView = pst.PSTMMF.CreateViewAccessor(0, 684)) { var temp = new byte[4]; mmfView.ReadArray(0, temp, 0, 4); this.DWMagic = Encoding.Default.GetString(temp); var ver = mmfView.ReadInt16(10); this.IsANSI = ver == 14 || ver == 15 ? true : (ver == 23 ? (bool?)false : null); if (this.IsANSI != null && this.IsANSI.Value) { } else if (this.IsUNICODE != null && this.IsUNICODE.Value) { //root.PSTSize = ByteReverse.ReverseULong(root.PSTSize); var sentinel = mmfView.ReadByte(512); var cryptMethod = (uint)mmfView.ReadByte(513); this.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); this.NodeBT = new NDB.PSTBTree(nbt_bref, pst); this.BlockBT = new NDB.PSTBTree(bbt_bref, pst); } } }