Exemplo n.º 1
0
 /// <summary>
 /// This method will write privateHeader to disk as well
 /// </summary>
 public static void WriteToDisk(Disk disk, PrivateHeader privateHeader, TOCBlock tocBlock)
 {
     privateHeader.UpdateSequenceNumber++;
     tocBlock.UpdateSequenceNumber++;
     byte[] bytes = tocBlock.GetBytes();
     disk.WriteSectors((long)(privateHeader.PrivateRegionStartLBA + privateHeader.PreviousPrimaryTocLBA), bytes);
     disk.WriteSectors((long)(privateHeader.PrivateRegionStartLBA + privateHeader.PreviousSecondaryTocLBA), bytes);
     privateHeader.PrimaryTocLBA   = privateHeader.PreviousPrimaryTocLBA;
     privateHeader.SecondaryTocLBA = privateHeader.PreviousSecondaryTocLBA;
     PrivateHeader.WriteToDisk(disk, privateHeader);
 }
Exemplo n.º 2
0
        /// <summary>
        /// This method will write privateHeader to disk as well
        /// </summary>
        public static void WriteToDisk(Disk disk, PrivateHeader privateHeader, TOCBlock tocBlock)
        {
            privateHeader.UpdateSequenceNumber++;
            tocBlock.UpdateSequenceNumber++;
            byte[] tocBytes = tocBlock.GetBytes();
            if (disk.BytesPerSector > Length)
            {
                tocBytes = ByteUtils.Concatenate(tocBytes, new byte[disk.BytesPerSector - TOCBlock.Length]);
            }
            long alternatePrimaryTOCLBA   = PrivateRegionHelper.FindUnusedLBAForPrimaryToc(privateHeader, tocBlock);
            long alternateSecondaryTOCLBA = PrivateRegionHelper.FindUnusedLBAForSecondaryToc(privateHeader, tocBlock);

            disk.WriteSectors(alternatePrimaryTOCLBA, tocBytes);
            disk.WriteSectors(alternateSecondaryTOCLBA, tocBytes);
            privateHeader.PrimaryTocLBA   = (ulong)alternatePrimaryTOCLBA;
            privateHeader.SecondaryTocLBA = (ulong)alternateSecondaryTOCLBA;
            PrivateHeader.WriteToDisk(disk, privateHeader);
        }