Thanks very much for the tips Ken - they're really useful.
You're absolutely right: EWF is indeed non-sparse, a single layer, and the layer is made of multiple segments.
I've already rolled my sleeves up and started playing, but I have a question:
My Disk constructor currently looks like this:
public Disk(string path)
DiskImageFile file = new DiskImageFile(path, FileAccess.Read);
_files = new List<DiscUtils.Tuple<DiskImageFile, Ownership>>();
_files.Add(new DiscUtils.Tuple<DiskImageFile, Ownership>(file, Ownership.Dispose));
obviously stolen from 'Vhd'. Given that it's going to be my EWFStream that does all the work with the segment files is there any need for the _files list in this class?
Would it be better for the list of segment files to be maintained by the EWFStream class?
It would of course be sensible to check all the necessary segment files are present at this stage, but once that's confirmed, couldn't the list just be passed to DiskImageFile and then onto EWFStream?