ConvertVirtualHardDisk method of the Msvm_ImageManagementService class
Converts an existing virtual hard disk to a different type or format. This method creates a new virtual hard disk and does not convert the source virtual hard disk in place. See Remarks for usage restrictions for this method.
Syntax
uint32 ConvertVirtualHardDisk(
[in] string SourcePath,
[in] string VirtualDiskSettingData,
[out] CIM_ConcreteJob REF Job
);
Parameters
-
SourcePath [in]
-
Type: string
The fully qualified path of the source virtual hard disk file to convert. This file will not be modified as a result of this operation.
-
VirtualDiskSettingData [in]
-
Type: string
A string representation of the Msvm_VirtualHardDiskSettingData class that specifies the attributes of the new virtual hard disk. The Path, Type, Format, ParentPath, BlockSize, and LogicalSectorSize properties must be set. The ParentPath property can be Null if it is not needed. Set the BlockSize and LogicalSectorSize properties to 0 to use the default values.
To specify the format (VHD or VHDX) of the new virtual hard disk, set the extension of the Path to the appropriate value (".vhd" or ".vhdx"). The Format property must match the file name extension in the Path.
The LogicalSectorSize property will be ignored.
-
Job [out]
-
Type: CIM_ConcreteJob
If the operation is performed asynchronously, this method will return 4096, and this parameter will contain a reference to an object derived from CIM_ConcreteJob.
Return value
Type: uint32
This method can return one of the following values.
-
Completed with No Error (0)
-
Method Parameters Checked - Job Started (4096)
-
Failed (32768)
-
Access Denied (32769)
-
Not Supported (32770)
-
Status is unknown (32771)
-
Timeout (32772)
-
Invalid parameter (32773)
-
System is in use (32774)
-
Invalid state for this operation (32775)
-
Incorrect data type (32776)
-
System is not available (32777)
-
Out of memory (32778)
-
File not found (32779)
Remarks
Only the following types of virtual hard disks can be used with this method:
- Fixed VHD
- Fixed VHDX
- Dynamic VHD
- Dynamic VHDX
- Differencing VHD
- Differencing VHDX
Access to the Msvm_ImageManagementService class might be restricted by UAC Filtering. For more information, see User Account Control and WMI.
Examples
The following C# example converts a virtual hard disk. The referenced utilities can be found in Common utilities for the virtualization samples (V2).
public enum VirtualHardDiskType
{
Fixed = 2,
Dynamic = 3,
Differencing = 4
}
public enum VirtualHardDiskFormat
{
Unknown = 0,
Vhd = 2,
Vhdx = 3
}
public static void ConvertVirtualHardDisk(string sourcePath, string destinationPath, VirtualHardDiskType diskType, VirtualHardDiskFormat diskFormat)
{
ManagementScope scope = new ManagementScope(@"root\virtualization\V2", null);
ManagementObject imageService = Utility.GetServiceObject(scope, "Msvm_ImageManagementService");
ManagementPath path = new ManagementPath()
{
Server = null,
NamespacePath = imageService.Path.Path,
ClassName = "Msvm_VirtualHardDiskSettingData"
};
ManagementClass settingsClass = new ManagementClass(path);
ManagementObject settingsInstance = settingsClass.CreateInstance();
settingsInstance["Path"] = destinationPath;
settingsInstance["Type"] = diskType;
settingsInstance["Format"] = diskFormat;
settingsInstance["ParentPath"] = null;
settingsInstance["MaxInternalSize"] = 0;
settingsInstance["BlockSize"] = 0;
settingsInstance["LogicalSectorSize"] = 0;
settingsInstance["PhysicalSectorSize"] = 0;
ManagementBaseObject inParams = imageService.GetMethodParameters("ConvertVirtualHardDisk");
inParams["SourcePath"] = sourcePath;
inParams["VirtualDiskSettingData"] = settingsInstance.GetText(TextFormat.WmiDtd20);
ManagementBaseObject outParams = imageService.InvokeMethod("ConvertVirtualHardDisk", inParams, null);
UInt32 result = (UInt32)outParams["ReturnValue"];
if (ReturnCode.Completed == result)
{
Console.WriteLine("{0} was converted successfully.", inParams["SourcePath"]);
}
else if (ReturnCode.Started == result)
{
if (Utility.JobCompleted(outParams, scope))
{
Console.WriteLine("{0} was converted successfully.", inParams["SourcePath"]);
}
else
{
Console.WriteLine("Unable to convert {0}", inParams["SourcePath"]);
}
}
else
{
// The method failed.
Console.WriteLine("ConvertVirtualHardDisk failed with error code {0}.", result);
}
outParams.Dispose();
inParams.Dispose();
imageService.Dispose();
}
Requirements
Requirement | Value |
---|---|
Minimum supported client |
Windows 8 [desktop apps only] |
Minimum supported server |
Windows Server 2012 [desktop apps only] |
Namespace |
Root\Virtualization\V2 |
MOF |
|
DLL |
|