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; }
static void Main(string[] args) { VirtualStorageType storageType = new VirtualStorageType(); storageType.DeviceId = VirtualStorageDeviceTypes.Vhdx; storageType.VendorId = VirtualStorageType.VendorIdMicrosoft; VirtualDiskSafeHandle diskHandle = new VirtualDiskSafeHandle(); string filename = @"C:\temp\test.vhdx"; OpenVirtualDiskParameters readParameters = new OpenVirtualDiskParameters(); readParameters.Version = OpenVirtualDiskVersions.Version2; readParameters.Version2 = new OpenVirtualDiskParametersVersion2() { GetInfoOnly = false, ReadOnly = false, ResiliencyGuid = Guid.Empty, }; uint result = VirtualDiskApi.OpenVirtualDisk(storageType, filename, VirtualDiskAccessMasks.None, OpenVirtualDiskFlags.None, readParameters, diskHandle); RawSecurityDescriptor descriptor = new RawSecurityDescriptor("O:BAG:BAD:(A;;GA;;;WD)"); AttachVirtualDiskParameters parameters = new AttachVirtualDiskParameters(); parameters.Version = AttachVirtualDiskVersions.Version1; result = VirtualDiskApi.AttachVirtualDisk(diskHandle, descriptor, AttachVirtualDiskFlags.PermanentLifetime, 0, parameters, null); diskHandle.Close(); diskHandle = null; }
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; }