Exemple #1
0
        /// <summary>
        /// Translates an IDE (aka Physical) geometry to a BIOS (aka Logical) geometry.
        /// </summary>
        /// <param name="capacity">The capacity of the disk, required if the geometry is an approximation on the actual disk size</param>
        /// <param name="translation">The translation to perform</param>
        /// <returns>The translated disk geometry</returns>
        public Geometry TranslateToBios(long capacity, GeometryTranslation translation)
        {
            if (capacity <= 0)
            {
                capacity = TotalSectors * 512L;
            }

            switch (translation)
            {
            case GeometryTranslation.None:
                return(this);

            case GeometryTranslation.Auto:
                if (IsBiosSafe)
                {
                    return(this);
                }
                else
                {
                    return(Geometry.LbaAssistedBiosGeometry(capacity));
                }

            case GeometryTranslation.Lba:
                return(Geometry.LbaAssistedBiosGeometry(capacity));

            case GeometryTranslation.Large:
                return(Geometry.LargeBiosGeometry(this));

            default:
                throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, "Translation mode '{0}' not yet implemented", translation), "translation");
            }
        }