本文整理汇总了C#中Geometry.ToChsAddress方法的典型用法代码示例。如果您正苦于以下问题:C# Geometry.ToChsAddress方法的具体用法?C# Geometry.ToChsAddress怎么用?C# Geometry.ToChsAddress使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Geometry
的用法示例。
在下文中一共展示了Geometry.ToChsAddress方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: UpdateBiosGeometry
/// <summary>
/// Updates the CHS fields in partition records to reflect a new BIOS geometry.
/// </summary>
/// <param name="geometry">The disk's new BIOS geometry</param>
/// <remarks>The partitions are not relocated to a cylinder boundary, just the CHS fields are updated on the
/// assumption the LBA fields are definitive.</remarks>
public void UpdateBiosGeometry(Geometry geometry)
{
_diskData.Position = 0;
byte[] bootSector = Utilities.ReadFully(_diskData, Utilities.SectorSize);
BiosPartitionRecord[] records = ReadPrimaryRecords(bootSector);
for (int i = 0; i < records.Length; ++i)
{
BiosPartitionRecord record = records[i];
if (record.IsValid)
{
ChsAddress newStartAddress = geometry.ToChsAddress(record.LBAStartAbsolute);
if (newStartAddress.Cylinder > 1023)
{
newStartAddress = new ChsAddress(1023, geometry.HeadsPerCylinder - 1, geometry.SectorsPerTrack);
}
ChsAddress newEndAddress = geometry.ToChsAddress(record.LBAStartAbsolute + record.LBALength - 1);
if (newEndAddress.Cylinder > 1023)
{
newEndAddress = new ChsAddress(1023, geometry.HeadsPerCylinder - 1, geometry.SectorsPerTrack);
}
record.StartCylinder = (ushort)newStartAddress.Cylinder;
record.StartHead = (byte)newStartAddress.Head;
record.StartSector = (byte)newStartAddress.Sector;
record.EndCylinder = (ushort)newEndAddress.Cylinder;
record.EndHead = (byte)newEndAddress.Head;
record.EndSector = (byte)newEndAddress.Sector;
WriteRecord(i, record);
}
}
_diskGeometry = geometry;
}