public void VhdFooter_Checksum() { HardDiskFooter target = new HardDiskFooter(); var firstChecksum = BitConverter.ToString(target.Checksum); target.BeginUpdate(); target.UniqueId = Guid.NewGuid(); Assert.AreEqual(firstChecksum, BitConverter.ToString(target.Checksum)); Assert.AreEqual(false, target.IsChecksumCorrect); target.EndUpdate(); Assert.AreNotEqual(firstChecksum, BitConverter.ToString(target.Checksum)); Assert.AreEqual(true, target.IsChecksumCorrect); }
private bool CreateVhd() { using (var stream = new FileStream(this.FileName, FileMode.CreateNew, FileAccess.ReadWrite, FileShare.None, 1, FileOptions.WriteThrough)) { ReFS.RemoveIntegrityStream(stream.SafeFileHandle); var footer = new HardDiskFooter(); footer.BeginUpdate(); footer.CreatorApplication = VhdCreatorApplication.JosipMedvedVhdAttach; footer.CreatorVersion = Medo.Reflection.EntryAssembly.Version; footer.SetSize((UInt64)this.SizeInBytes); footer.OriginalSize = footer.CurrentSize; footer.DiskType = VhdDiskType.FixedHardDisk; footer.EndUpdate(); var lastReport = DateTime.UtcNow; byte[] buffer = new byte[Settings.WriteBufferSize]; ulong remaining = footer.CurrentSize; while (remaining > 0) { if (bgw.CancellationPending) { stream.Dispose(); File.Delete(this.FileName); return(false); } ulong count = (ulong)buffer.Length; if ((ulong)count > remaining) { count = remaining; } stream.Write(buffer, 0, (int)count); remaining -= count; if (lastReport.AddSeconds(1) < DateTime.UtcNow) { bgw.ReportProgress(100 - (int)(remaining * 100 / footer.CurrentSize)); lastReport = DateTime.UtcNow; } } buffer = footer.Bytes; stream.Write(buffer, 0, buffer.Length); } return(true); }