public static VirtualHardDisk Open(string filename,
            VirtualDiskAccessMasks accessMask = VirtualDiskAccessMasks.All,
            OpenVirtualDiskFlags flag = OpenVirtualDiskFlags.None, uint rwDepth = 0)
        {
            var storageType = new VirtualStorageType();

            var parameters = new OpenVirtualDiskParameters
            {
                Version = OpenVirtualDiskVersions.Version1,
                Version1 = new OpenVirtualDiskParametersVersion1 { RWDepth = rwDepth}
            };

            var handle = VirtualDiskCore.OpenVirtualDisk(storageType, filename, accessMask, flag, parameters);

            var vhd = new VirtualHardDisk(filename, handle);

            // ReSharper disable once InvertIf
            if (vhd.VirtualStorageType.DeviceId == VirtualStorageDeviceTypes.Iso)
            {
                vhd.Dispose();
                throw new NotSupportedException("This class does not support ISO files.");
            }

            return vhd;
        }
        public static VirtualHardDisk Create(string filename, ulong maximumSize,
            VirtualStorageDeviceTypes deviceType = VirtualStorageDeviceTypes.Vhd,
            VirtualDiskAccessMasks mask = VirtualDiskAccessMasks.All, RawSecurityDescriptor securityDescriptor = null,
            CreateVirtualDiskFlags flags = CreateVirtualDiskFlags.None, uint providerSpecificFlags = 0,
            Guid uniqueId = default(Guid), uint blockSizeInBytes = 0, uint sectorSizeInBytes = 0,
            string parentPath = null, string sourcePath = null, Overlapped overlapped = null)
        {
            if ()

            var storageType = new VirtualStorageType {DeviceId = deviceType};

            var parameters = new CreateVirtualDiskParameters
            {
                Version = CreateVirtualDiskVersions.Version1,
                Version1 = new CreateVirtualDiskParametersVersion1
                {
                    UniqueId = uniqueId,
                    MaximumSize = maximumSize,
                    BlockSizeInBytes = blockSizeInBytes,
                    SectorSizeInBytes = sectorSizeInBytes,
                    ParentPath = parentPath,
                    SourcePath = sourcePath
                }
            };

            var handle = VirtualDiskCore.CreateVirtualDisk(storageType, filename, mask, securityDescriptor, flags,
                providerSpecificFlags, parameters, overlapped);

            var vhd = new VirtualHardDisk(filename, handle);

            // ReSharper disable once InvertIf
            if (vhd.VirtualStorageType.DeviceId == VirtualStorageDeviceTypes.Iso)
            {
                vhd.Dispose();
                throw new NotSupportedException("This class does not support ISO files.");
            }

            return vhd;
        }
        public static VirtualHardDisk2 Open(string filename, OpenVirtualDiskFlags flag = OpenVirtualDiskFlags.None,
            bool getInfoOnly = false, bool readOnly = false, Guid resiliencyGuid = default(Guid))
        {
            var storageType = new VirtualStorageType();

            var parameters = new OpenVirtualDiskParameters
            {
                Version = OpenVirtualDiskVersions.Version2,
                Version2 =
                    new OpenVirtualDiskParametersVersion2
                    {
                        GetInfoOnly = getInfoOnly,
                        ReadOnly = readOnly,
                        ResiliencyGuid = resiliencyGuid
                    }
            };

            // When using OpenVirtulaDiskVersions.Version2, VirtualDiskAccessMasks *must* be set to None
            var handle = VirtualDiskCore.OpenVirtualDisk(storageType, filename, VirtualDiskAccessMasks.None, flag, parameters);

            var vhd = new VirtualHardDisk2(filename, handle);

            // ReSharper disable once InvertIf
            if (vhd.VirtualStorageType.DeviceId == VirtualStorageDeviceTypes.Iso)
            {
                vhd.Dispose();
                throw new NotSupportedException("This class does not support ISO files.");
            }

            return vhd;
        }
Пример #4
0
        static SafeFileHandle CreateVHD(string path)
        {
            VirtualStorageType vhd_type = new VirtualStorageType();
            vhd_type.DeviceId = StorageDeviceType.Vhd;
            vhd_type.VendorId = VIRTUAL_STORAGE_TYPE_VENDOR_MICROSOFT;

            CreateVirtualDiskParameters ps = new CreateVirtualDiskParameters();
            ps.Version = CreateVirtualDiskVersion.Version1;
            ps.SectorSizeInBytes = 512;
            ps.MaximumSize = 100 * 1024 * 1024;
            IntPtr hDisk;
            int error = CreateVirtualDisk(ref vhd_type, path, VirtualDiskAccessMask.All, null, CreateVirtualDiskFlag.None, 0, ref ps, IntPtr.Zero, out hDisk);
            if (error != 0)
            {
                throw new Win32Exception(error);
            }

            return new SafeFileHandle(hDisk, true);
        }