private Stream BuildVltStream() { MemoryStream ms = new MemoryStream(8192); BinaryWriter bw = new BinaryWriter(ms); ChunkWriter cw = new ChunkWriter(bw, Vault); var versionChunk = new VltVersionChunk(); cw.WriteChunk(versionChunk); var startChunk = new VltStartChunk(); cw.WriteChunk(startChunk); var dependencyChunk = new VltDependencyChunk(new List <string> { $"{Vault.Name}.vlt", $"{Vault.Name}.bin" }); cw.WriteChunk(dependencyChunk); var dataChunk = new VltDataChunk(ExportManager.GetExports()); cw.WriteChunk(dataChunk); var exportChunk = new VltExportChunk(dataChunk.ExportEntries); cw.WriteChunk(exportChunk); var binWriter = new BinaryWriter(BinStream); foreach (var pointerObject in ExportManager.GetExports().OfType <IPointerObject>()) { pointerObject.WritePointerData(Vault, binWriter); } // after writing exports, we can build pointers BuildPointers(); var pointersChunk = new VltPointersChunk(); cw.WriteChunk(pointersChunk); var endChunk = new EndChunk(); cw.WriteChunk(endChunk); return(ms); }
public ChunkBase NextChunk(Vault vault) { var header = new ChunkBlockHeader(); header.Read(vault, Reader); ChunkBase chunk = null; switch (header.ID) { case 0x53747245: chunk = new BinStringsChunk(); break; case 0x5374724E: chunk = new VltStartChunk(); break; case 0x456E6443: chunk = new EndChunk(); break; case 0x56657273: chunk = new VltVersionChunk(); break; case 0x4465704E: chunk = new VltDependencyChunk(); break; case 0x4578704E: chunk = new VltExportChunk(); break; case 0x5074724E: chunk = new VltPointersChunk(); break; default: chunk = new GenericChunk(header.ID); break; } chunk.Offset = header.Offset; chunk.Size = header.Size + 8; return(chunk); }