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 LBBTEntry(BREF blockReference, int byteCountOfRawDataInReferencedBlockExcludingTrailerAndAlignmentPadding, int numberOfReferencesToThisBlock, BinaryData padding) { BlockReference = blockReference; ByteCountOfRawDataInReferencedBlockExcludingTrailerAndAlignmentPadding = byteCountOfRawDataInReferencedBlockExcludingTrailerAndAlignmentPadding; NumberOfReferencesToThisBlock = numberOfReferencesToThisBlock; Padding = padding; }
public PSTBTree(BREF bref, PSTFile pst) { using (var viewer = pst.PSTMMF.CreateViewAccessor((long)bref.IB, 512)) { var data = new byte[512]; viewer.ReadArray(0, data, 0, 512); Root = new BTPage(data, bref, pst); } }
public BID Allocate(IB blockOffset, int rawDataSize, bool internalBlock) { var bidIndex = headerUsageProvider.GetHeader().NextBID; headerUsageProvider.Use(header => header.IncrementBIDIndexForDataBlocks()); var blockId = internalBlock ? BID.ForInternalBlock(bidIndex) : BID.ForExternalBlock(bidIndex); allocatedBlockBTreeEntries.Add( new LBBTEntry( BREF.OfValue(blockId, blockOffset), rawDataSize, numberOfReferencesToThisBlock: 2, padding: BinaryData.OfSize(4))); return(blockId); }
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); } } }
public Root( int reserved, long fileEOF, long amapLast, long amapFree, long pmapFree, BREF nbtRootPage, BREF bbtRootPage, int amapValid, int bReserved, int wReserved) { Reserved = reserved; FileEOF = fileEOF; AMapLast = amapLast; AMapFree = amapFree; PMapFree = pmapFree; NBTRootPage = nbtRootPage; BBTRootPage = bbtRootPage; AMapValid = amapValid; BReserved = bReserved; WReserved = wReserved; }
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); } }
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); } } }
public NodeBTree(BREF root) { this.RootLocation = root; }
public static IBBTEntry OfValue(BID bid, BREF bref) => new IBBTEntry(bid, bref);
private IBBTEntry(BID key, BREF childPageBlockReference) { Key = key; ChildPageBlockReference = childPageBlockReference; }
public static INBTEntry OfValue(NID nid, BREF bref) => new INBTEntry(nid, bref);