Пример #1
0
 /// <summary>
 /// Transforms the specified linear address.
 /// </summary>
 /// <param name="linearAddress">The linear address.</param>
 /// <param name="geometry">The geometry.</param>
 /// <returns></returns>
 /// <remarks></remarks>
 public static CubicAddress Transform(long linearAddress, CubicAddress geometry)
 {
     var cubicAddress = new CubicAddress();
     uint sectorsPerCylinder = geometry.Sector*geometry.Head;
     long remainder;
     cubicAddress.Cylinder = Math.DivRem(linearAddress, sectorsPerCylinder, out remainder);
     cubicAddress.Head = (uint) Math.DivRem(remainder, geometry.Sector, out remainder);
     cubicAddress.Sector = 1 + (uint) remainder;
     return cubicAddress;
 }
Пример #2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="DiskGeometry"/> class.
        /// </summary>
        /// <param name="deviceName">Name of the device.</param>
        /// <remarks></remarks>
        private DiskGeometry(String deviceName)
        {
            var x = new Win32.DISK_GEOMETRY_EX();
            InputOutputControlExtension.Execute(ref x, InputOutputControlExtension.DISK_GET_DRIVE_GEOMETRY_EX,
                                                deviceName);
            m_DiskSize = x.DiskSize;
            m_Geometry = x.Geometry;

            long remainder;
            m_MaximumLinearAddress = Math.DivRem(DiskSize, BytesPerSector, out remainder) - 1;
            ThrowIfDiskSizeOutOfIntegrity(remainder);

            m_BytesPerCylinder = BytesPerSector*Sector*Head;
            m_MaximumCubicAddress = Transform(m_MaximumLinearAddress, this);
        }