コード例 #1
0
        public override VirtualDisk CreateDisk(FileLocator locator, string variant, string path,
                                               VirtualDiskParameters diskParameters)
        {
            DiskParameters vmdkParams = new DiskParameters(diskParameters);

            vmdkParams.CreateType = VariantToCreateType(variant);
            return(Disk.Initialize(locator, path, vmdkParams));
        }
コード例 #2
0
ファイル: DiskFactory.cs プロジェクト: JGTM2016/discutils
 public override VirtualDisk CreateDisk(FileLocator locator, string variant, string path, VirtualDiskParameters diskParameters)
 {
     switch (variant)
     {
         case "fixed":
             return Disk.InitializeFixed(locator.Open(path, FileMode.Create, FileAccess.ReadWrite, FileShare.None), Ownership.Dispose, diskParameters.Capacity);
         case "dynamic":
             return Disk.InitializeDynamic(locator.Open(path, FileMode.Create, FileAccess.ReadWrite, FileShare.None), Ownership.Dispose, diskParameters.Capacity);
         default:
             throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, "Unknown VDI disk variant '{0}'", variant), "variant");
     }
 }
コード例 #3
0
 public override VirtualDisk CreateDisk(FileLocator locator, string variant, string path, VirtualDiskParameters diskParameters)
 {
     switch (variant)
     {
         case "fixed":
             return Disk.InitializeFixed(locator, path, diskParameters.Capacity, diskParameters.Geometry);
         case "dynamic":
             throw new NotImplementedException();
         default:
             throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, "Unknown VHD disk variant '{0}'", variant), "variant");
     }
 }
コード例 #4
0
ファイル: DiskFactory.cs プロジェクト: Lukas0610/ndiscutils
        public override VirtualDisk CreateDisk(FileLocator locator, string variant, string path,
                                               VirtualDiskParameters diskParameters)
        {
            switch (variant)
            {
            case "fixed":
                return(Disk.InitializeFixed(locator, path, diskParameters.Capacity, diskParameters.Geometry));

            case "dynamic":
                return(Disk.InitializeDynamic(locator, path, diskParameters.Capacity,
                                              FileParameters.DefaultDynamicBlockSize));

            default:
                throw new ArgumentException(
                          string.Format(CultureInfo.InvariantCulture, "Unknown VHD disk variant '{0}'", variant),
                          nameof(variant));
            }
        }
コード例 #5
0
        /// <summary>
        /// Initializes a new instance of the DiskParameters class with generic parameters.
        /// </summary>
        /// <param name="genericParameters">The generic parameters to copy.</param>
        public DiskParameters(VirtualDiskParameters genericParameters)
        {
            Capacity     = genericParameters.Capacity;
            Geometry     = genericParameters.Geometry;
            BiosGeometry = genericParameters.BiosGeometry;

            string stringCreateType;

            if (genericParameters.ExtendedParameters.TryGetValue(Disk.ExtendedParameterKeyCreateType,
                                                                 out stringCreateType))
            {
                CreateType = (DiskCreateType)Enum.Parse(typeof(DiskCreateType), stringCreateType);
            }
            else
            {
                CreateType = DiskCreateType.MonolithicSparse;
            }

            if (genericParameters.AdapterType == GenericDiskAdapterType.Ide)
            {
                AdapterType = DiskAdapterType.Ide;
            }
            else
            {
                string stringAdapterType;
                if (genericParameters.ExtendedParameters.TryGetValue(Disk.ExtendedParameterKeyAdapterType,
                                                                     out stringAdapterType))
                {
                    AdapterType = (DiskAdapterType)Enum.Parse(typeof(DiskAdapterType), stringAdapterType);

                    // Don't refining sub-type of SCSI actually select IDE
                    if (AdapterType == DiskAdapterType.Ide)
                    {
                        AdapterType = DiskAdapterType.LsiLogicScsi;
                    }
                }
                else
                {
                    AdapterType = DiskAdapterType.LsiLogicScsi;
                }
            }
        }
コード例 #6
0
        /// <summary>
        /// Initializes a new instance of the DiskParameters class with generic parameters.
        /// </summary>
        /// <param name="genericParameters">The generic parameters to copy</param>
        public DiskParameters(VirtualDiskParameters genericParameters)
        {
            Capacity = genericParameters.Capacity;
            Geometry = genericParameters.Geometry;
            BiosGeometry = genericParameters.BiosGeometry;

            string stringCreateType;
            if (genericParameters.ExtendedParameters.TryGetValue(Disk.ExtendedParameterKeyCreateType, out stringCreateType))
            {
                CreateType = (DiskCreateType)Enum.Parse(typeof(DiskCreateType), stringCreateType);
            }
            else
            {
                CreateType = DiskCreateType.MonolithicSparse;
            }

            if (genericParameters.AdapterType == GenericDiskAdapterType.Ide)
            {
                AdapterType = DiskAdapterType.Ide;
            }
            else
            {
                string stringAdapterType;
                if (genericParameters.ExtendedParameters.TryGetValue(Disk.ExtendedParameterKeyAdapterType, out stringAdapterType))
                {
                    AdapterType = (DiskAdapterType)Enum.Parse(typeof(DiskAdapterType), stringAdapterType);

                    // Don't refining sub-type of SCSI actually select IDE
                    if (AdapterType == DiskAdapterType.Ide)
                    {
                        AdapterType = DiskAdapterType.LsiLogicScsi;
                    }
                }
                else
                {
                    AdapterType = DiskAdapterType.LsiLogicScsi;
                }
            }
        }
コード例 #7
0
ファイル: DiskFactory.cs プロジェクト: Lukas0610/ndiscutils
        public override VirtualDisk CreateDisk(FileLocator locator, string variant, string path,
                                               VirtualDiskParameters diskParameters)
        {
            switch (variant)
            {
            case "fixed":
                return
                    (Disk.InitializeFixed(locator.Open(path, FileMode.Create, FileAccess.ReadWrite, FileShare.None),
                                          Ownership.Dispose, diskParameters.Capacity));

            case "dynamic":
                return
                    (Disk.InitializeDynamic(
                         locator.Open(path, FileMode.Create, FileAccess.ReadWrite, FileShare.None), Ownership.Dispose,
                         diskParameters.Capacity));

            default:
                throw new ArgumentException(
                          string.Format(CultureInfo.InvariantCulture, "Unknown VDI disk variant '{0}'", variant),
                          nameof(variant));
            }
        }
コード例 #8
0
ファイル: DiskFactory.cs プロジェクト: alexcmd/DiscUtils
 public override VirtualDisk CreateDisk(FileLocator locator, string variant, string path, VirtualDiskParameters diskParameters)
 {
     return Disk.Initialize(locator.Open(path, FileMode.Create, FileAccess.ReadWrite, FileShare.None), Ownership.Dispose, diskParameters.Capacity, diskParameters.Geometry);
 }
コード例 #9
0
        protected override void DoRun()
        {
            using (VirtualDisk inDisk = VirtualDisk.OpenDisk(_inFile.Value, FileAccess.Read, UserName, Password))
            {
                VirtualDiskParameters diskParams = inDisk.Parameters;
                diskParams.AdapterType = AdapterType;

                VirtualDiskTypeInfo diskTypeInfo = VirtualDisk.GetDiskType(OutputDiskType, OutputDiskVariant);
                if (diskTypeInfo.DeterministicGeometry)
                {
                    diskParams.Geometry = diskTypeInfo.CalcGeometry(diskParams.Capacity);
                }

                if (_translation.IsPresent && _translation.EnumValue != GeometryTranslation.None)
                {
                    diskParams.BiosGeometry = diskParams.Geometry.TranslateToBios(diskParams.Capacity, _translation.EnumValue);
                }
                else if (!inDisk.DiskTypeInfo.PreservesBiosGeometry)
                {
                    // In case the BIOS geometry was just a default, it's better to override based on the physical geometry
                    // of the new disk.
                    diskParams.BiosGeometry = Geometry.MakeBiosSafe(diskParams.Geometry, diskParams.Capacity);
                }

                using (VirtualDisk outDisk = VirtualDisk.CreateDisk(OutputDiskType, OutputDiskVariant, _outFile.Value, diskParams, UserName, Password))
                {
                    if (outDisk.Capacity < inDisk.Capacity)
                    {
                        Console.WriteLine("ERROR: The output disk is smaller than the input disk, conversion aborted");
                    }

                    SparseStream contentStream = inDisk.Content;

                    if (_translation.IsPresent && _translation.EnumValue != GeometryTranslation.None)
                    {
                        SnapshotStream ssStream = new SnapshotStream(contentStream, Ownership.None);
                        ssStream.Snapshot();

                        UpdateBiosGeometry(ssStream, inDisk.BiosGeometry, diskParams.BiosGeometry);

                        contentStream = ssStream;
                    }

                    StreamPump pump = new StreamPump()
                    {
                        InputStream  = contentStream,
                        OutputStream = outDisk.Content,
                        SparseCopy   = !_wipe.IsPresent
                    };

                    if (!Quiet)
                    {
                        long totalBytes = contentStream.Length;
                        if (!_wipe.IsPresent)
                        {
                            totalBytes = 0;
                            foreach (var se in contentStream.Extents)
                            {
                                totalBytes += se.Length;
                            }
                        }

                        DateTime now = DateTime.Now;
                        pump.ProgressEvent += (o, e) => { ShowProgress("Progress", totalBytes, now, o, e); };
                    }

                    pump.Run();
                }
            }
        }
コード例 #10
0
 public override VirtualDisk CreateDisk(FileLocator locator, string variant, string path, VirtualDiskParameters diskParameters)
 {
     throw new NotSupportedException();
 }
コード例 #11
0
ファイル: DiskFactory.cs プロジェクト: alexcmd/DiscUtils
 public override VirtualDisk CreateDisk(FileLocator locator, string variant, string path, VirtualDiskParameters diskParameters)
 {
     throw new NotSupportedException();
 }
コード例 #12
0
 public override VirtualDisk CreateDisk(FileLocator locator, string variant, string path, VirtualDiskParameters diskParameters)
 {
     return(Disk.Initialize(locator.Open(path, FileMode.Create, FileAccess.ReadWrite, FileShare.None), Ownership.Dispose, diskParameters.Capacity, diskParameters.Geometry));
 }
コード例 #13
0
ファイル: DiskFactory.cs プロジェクト: alexcmd/DiscUtils
 public override VirtualDisk CreateDisk(FileLocator locator, string variant, string path, VirtualDiskParameters diskParameters)
 {
     DiskParameters vmdkParams = new DiskParameters(diskParameters);
     vmdkParams.CreateType = VariantToCreateType(variant);
     return Disk.Initialize(locator, path, vmdkParams);
 }
コード例 #14
0
ファイル: VirtualDiskFactory.cs プロジェクト: tckm1977/LibHac
 public abstract VirtualDisk CreateDisk(FileLocator locator, string variant, string path,
                                        VirtualDiskParameters diskParameters);