private void Initialize() { _fileStream.Position = 0; FileHeader fileHeader = Utilities.ReadStruct <FileHeader>(_fileStream); if (!fileHeader.IsValid) { throw new IOException("Invalid VHDX file - file signature mismatch"); } _freeSpace = new FreeSpaceTable(_fileStream.Length); ReadHeaders(); ReplayLog(); ReadRegionTable(); ReadMetadata(); _batStream = OpenRegion(RegionTable.BatGuid); _freeSpace.Reserve(BatControlledFileExtents()); // Indicate the file is open for modification if (_fileStream.CanWrite) { _header.FileWriteGuid = Guid.NewGuid(); WriteHeader(); } }
public Chunk(Stream bat, SparseStream file, FreeSpaceTable freeSpace, FileParameters fileParameters, int chunk, int blocksPerChunk) { _bat = bat; _file = file; _freeSpace = freeSpace; _fileParameters = fileParameters; _chunk = chunk; _blocksPerChunk = blocksPerChunk; _bat.Position = _chunk * (_blocksPerChunk + 1) * 8; _batData = Utilities.ReadFully(bat, (_blocksPerChunk + 1) * 8); }
public ContentStream(SparseStream fileStream, Stream batStream, FreeSpaceTable freeSpaceTable, Metadata metadata, long length, SparseStream parentStream, Ownership ownsParent) { _fileStream = fileStream; _batStream = batStream; _freeSpaceTable = freeSpaceTable; _metadata = metadata; _fileParameters = _metadata.FileParameters; _length = length; _parentStream = parentStream; _ownsParent = ownsParent; _chunks = new ObjectCache<int, Chunk>(); }
public ContentStream(SparseStream fileStream, Stream batStream, FreeSpaceTable freeSpaceTable, Metadata metadata, long length, SparseStream parentStream, Ownership ownsParent) { _fileStream = fileStream; _batStream = batStream; _freeSpaceTable = freeSpaceTable; _metadata = metadata; _fileParameters = _metadata.FileParameters; _length = length; _parentStream = parentStream; _ownsParent = ownsParent; _chunks = new ObjectCache <int, Chunk>(); }
private void Initialize() { _fileStream.Position = 0; FileHeader fileHeader = Utilities.ReadStruct<FileHeader>(_fileStream); if (!fileHeader.IsValid) { throw new IOException("Invalid VHDX file - file signature mismatch"); } _freeSpace = new FreeSpaceTable(_fileStream.Length); ReadHeaders(); if (_header.LogGuid != Guid.Empty) { throw new NotSupportedException("Detected VHDX file with replay log - not yet supported"); } _freeSpace.Reserve((long)_header.LogOffset, _header.LogLength); ReadRegionTable(); ReadMetadata(); _batStream = OpenRegion(RegionTable.BatGuid); _freeSpace.Reserve(BatControlledFileExtents()); // Indicate the file is open for modification if (_fileStream.CanWrite) { _header.FileWriteGuid = Guid.NewGuid(); WriteHeader(); } }