public void ReadTransactionLog(Dictionary <uint, uint> transactionsData, IFileChunkReference fileChunkReference, uint cTransactionsInLog) { oneNoteFileReader.Move(fileChunkReference.Offset, "TransactionLog"); uint cbRead = 0; var cbTransactionLogFragmentSize = fileChunkReference.DataSize; var cbMax = cbTransactionLogFragmentSize - FileChunkReference64x32.SizeInBytes; for (var i = 0; i < cTransactionsInLog; i++) { if (cbRead == cbMax) { const string operationContext = "TransactionLog.nextFragment"; var nextFragment = new FileChunkReference64x32(); oneNoteFileReader.ReadFileChunkReference64x32(ref nextFragment, operationContext); oneNoteFileReader.Move(nextFragment.Offset, operationContext); cbRead = 0; cbMax = nextFragment.cb - FileChunkReference64x32.SizeInBytes; } else if (cbRead > cbMax) { throw new FileFormatException("Transaction log is broken"); } ReadTransaction(transactionsData, ref cbRead); } }
public ObjectSpaceObjectPropSet ReadObjectSpaceObjectPropSet(IFileChunkReference fileChunkReference) { oneNoteFileReader.Move(fileChunkReference.Offset, "PropertySet"); var oids = ReadObjectSpaceObjectStream(); var osids = oids.Header.OsidStreamNotPresent ? null : ReadObjectSpaceObjectStream(); var contextIDs = oids.Header.ExtendedStreamsPresent ? ReadObjectSpaceObjectStream() : null; return(new ObjectSpaceObjectPropSet(oids, osids, contextIDs)); }
public ICollection <FNDBase> ReadFileNodeList(IFileChunkReference fileChunkReference, Dictionary <uint, uint> transactionsData, params uint[] fileNodeIds) { ICollection <FNDBase> result = new List <FNDBase>(); var nextFragment = new FileChunkReference64x32(); while (true) { ReadFileNodeListFragment(fileChunkReference, result, ref nextFragment, transactionsData, fileNodeIds); if (FileChunkReference64x32.Nil.Equals(nextFragment)) { break; } fileChunkReference = nextFragment; } return(result); }
public ObjectDeclaration2RefCountFND(FileNodeHeader header, IFileChunkReference blobFileChunkReference, ObjectDeclaration2Body body, byte cRef) : base(header) { this.blobFileChunkReference = blobFileChunkReference; this.body = body; this.cRef = cRef; }
public RevisionManifestListReferenceFND(FileNodeHeader header, IFileChunkReference fileChunkReference) : base(header) { this.fileChunkReference = fileChunkReference; }
public ObjectGroupListReferenceFND(FileNodeHeader header, IFileChunkReference fileChunkReference, ExtendedGuid objectGroupId) : base(header) { this.fileChunkReference = fileChunkReference; ObjectGroupID = objectGroupId; }
public ObjectSpaceManifestListReferenceFND(FileNodeHeader header, IFileChunkReference fileChunkReference, ExtendedGuid gosid) : base(header) { this.fileChunkReference = fileChunkReference; this.gosid = gosid; }
public void ReadFileNodeListFragment(IFileChunkReference fileChunkReference, ICollection <FNDBase> result, ref FileChunkReference64x32 nextFragment, Dictionary <uint, uint> transactionsData, params uint[] fileNodeIds) { oneNoteFileReader.Move(fileChunkReference.Offset, "FileNodeListFragment"); var jumpSizeToNextFragmentReference = GetJumpSizeToNextFragmentReference(fileChunkReference.DataSize); var fileNodeListHeader = new FileNodeListHeader(); oneNoteFileReader.ReadFileNodeListHeader(ref fileNodeListHeader); jumpSizeToNextFragmentReference -= FileNodeListHeader.SizeInBytes; var fileNodeListId = fileNodeListHeader.FileNodeListID; var nodesCount = transactionsData[fileNodeListId]; var fileNodeHeader = new FileNodeHeader(); while (true) { if (nodesCount == 0) { break; } oneNoteFileReader.ReadFileNodeHeader(ref fileNodeHeader); jumpSizeToNextFragmentReference -= FileNodeHeader.SizeInBytes; var fileNodeId = fileNodeHeader.FileNodeID; if (fileNodeId == FileNodeIDs.ChunkTerminatorFND) { break; } var sizeOfData = fileNodeHeader.Size - FileNodeHeader.SizeInBytes; var skip = true; if (fileNodeIds.Length == 0 || Array.IndexOf(fileNodeIds, fileNodeId) >= 0) { var readFileNodeData = ReadFileNodeData(fileNodeHeader); if (readFileNodeData == null) { readFileNodeData = new NotImplementedFND(fileNodeHeader); } else { skip = false; } result.Add(readFileNodeData); jumpSizeToNextFragmentReference -= sizeOfData; } if (skip && sizeOfData != 0) { oneNoteFileReader.Skip(sizeOfData); jumpSizeToNextFragmentReference -= sizeOfData; } nodesCount--; const uint minJumpSize = 4; if (jumpSizeToNextFragmentReference < minJumpSize) { break; } } if (jumpSizeToNextFragmentReference != 0) { oneNoteFileReader.Skip(jumpSizeToNextFragmentReference); } oneNoteFileReader.ReadFileChunkReference64x32(ref nextFragment, "FileNodeListFragment.nextFragment"); oneNoteFileReader.ExpectFileNodeListFooter(); transactionsData[fileNodeListId] = nodesCount; }