/// <summary> /// Create a new virtual disk. /// </summary> /// <param name="type">The type of disk to create (see <see cref="SupportedDiskTypes"/>)</param> /// <param name="variant">The variant of the type to create (see <see cref="GetSupportedDiskVariants"/>)</param> /// <param name="path">The path (or URI) for the disk to create</param> /// <param name="capacity">The capacity of the new disk</param> /// <param name="geometry">The geometry of the new disk (or null).</param> /// <param name="user">The user identity to use when accessing the <c>path</c> (or null)</param> /// <param name="password">The password to use when accessing the <c>path</c> (or null)</param> /// <param name="parameters">Untyped parameters controlling the creation process (TBD)</param> /// <returns>The newly created disk</returns> public static VirtualDisk CreateDisk(string type, string variant, string path, long capacity, Geometry geometry, string user, string password, Dictionary<string, string> parameters) { VirtualDiskParameters diskParams = new VirtualDiskParameters() { AdapterType = GenericDiskAdapterType.Scsi, Capacity = capacity, Geometry = geometry, }; if (parameters != null) { foreach (var key in parameters.Keys) { diskParams.ExtendedParameters[key] = parameters[key]; } } return CreateDisk(type, variant, path, diskParams, user, password); }
/// <summary> /// Create a new virtual disk. /// </summary> /// <param name="type">The type of disk to create (see <see cref="SupportedDiskTypes"/>)</param> /// <param name="variant">The variant of the type to create (see <see cref="GetSupportedDiskVariants"/>)</param> /// <param name="path">The path (or URI) for the disk to create</param> /// <param name="capacity">The capacity of the new disk</param> /// <param name="geometry">The geometry of the new disk (or null).</param> /// <param name="parameters">Untyped parameters controlling the creation process (TBD)</param> /// <returns>The newly created disk</returns> public static VirtualDisk CreateDisk(string type, string variant, string path, long capacity, Geometry geometry, Dictionary<string, string> parameters) { return CreateDisk(type, variant, path, capacity, geometry, null, null, parameters); }
/// <summary> /// Converts a geometry into one that is BIOS-safe, if not already. /// </summary> /// <param name="geometry">The geometry to make BIOS-safe.</param> /// <param name="capacity">The capacity of the disk.</param> /// <returns>The new geometry</returns> /// <remarks>This method returns the LBA-Assisted geometry if the given geometry isn't BIOS-safe.</remarks> public static Geometry MakeBiosSafe(Geometry geometry, long capacity) { if (geometry == null) { return LbaAssistedBiosGeometry(capacity); } else if (geometry.IsBiosSafe) { return geometry; } else { return LbaAssistedBiosGeometry(capacity); } }
/// <summary> /// Create a new virtual disk, possibly within an existing disk. /// </summary> /// <param name="fileSystem">The file system to create the disk on</param> /// <param name="type">The type of disk to create (see <see cref="SupportedDiskTypes"/>)</param> /// <param name="variant">The variant of the type to create (see <see cref="GetSupportedDiskVariants"/>)</param> /// <param name="path">The path (or URI) for the disk to create</param> /// <param name="capacity">The capacity of the new disk</param> /// <param name="geometry">The geometry of the new disk (or null).</param> /// <param name="parameters">Untyped parameters controlling the creation process (TBD)</param> /// <returns>The newly created disk</returns> public static VirtualDisk CreateDisk(DiscFileSystem fileSystem, string type, string variant, string path, long capacity, Geometry geometry, Dictionary<string, string> parameters) { VirtualDiskFactory factory = TypeMap[type]; VirtualDiskParameters diskParams = new VirtualDiskParameters() { AdapterType = GenericDiskAdapterType.Scsi, Capacity = capacity, Geometry = geometry, }; if (parameters != null) { foreach (var key in parameters.Keys) { diskParams.ExtendedParameters[key] = parameters[key]; } } return factory.CreateDisk(new DiscFileLocator(fileSystem, Utilities.GetDirectoryFromPath(path)), variant.ToLowerInvariant(), Utilities.GetFileFromPath(path), diskParams); }
/// <summary> /// Gets the 'Large' BIOS geometry for a disk, given it's physical geometry. /// </summary> /// <param name="ideGeometry">The physical (aka IDE) geometry of the disk</param> /// <returns>The geometry a BIOS using the 'Large' method for calculating disk geometry will indicate for the disk</returns> public static Geometry LargeBiosGeometry(Geometry ideGeometry) { int cylinders = ideGeometry.Cylinders; int heads = ideGeometry.HeadsPerCylinder; int sectors = ideGeometry.SectorsPerTrack; while (cylinders > 1024 && heads <= 127) { cylinders >>= 1; heads <<= 1; } return new Geometry(cylinders, heads, sectors); }