Export (0) Print
Expand All
2 out of 3 rated this helpful - Rate this topic

CreateDynamicVirtualHardDisk method of the Msvm_ImageManagementService class

Hyper-V

Creates a dynamically expanding virtual hard disk (.vhd) file.

Syntax


uint32 CreateDynamicVirtualHardDisk(
  [in]   string Path,
  [in]   uint64 MaxInternalSize,
  [out]  CIM_ConcreteJob REF Job
);

Parameters

Path [in]

Type: string

A fully qualified path that specifies the location of the new file.

MaxInternalSize [in]

Type: uint64

The maximum size of the virtual hard disk, in bytes. The specified size must be a multiple of 512 or this method will fail. If this value is 0, the default size of 3 MB is chosen.

Job [out]

Type: CIM_ConcreteJob

A reference to the job (can be null if the task is completed).

Return value

Type: uint32

This method can return one of the following values.

Completed with No Error (0)
Method Parameters Checked - JobStarted (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)

Remarks

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 creates a dynamically expanding virtual hard disk file. The referenced utilities can be found in Common Utilities for the Virtualization Samples.


using System;
using System.Management;

namespace HyperVSamples
{
    class CreateDynamicVHD
    {
        const UInt64 Size1G = 0x40000000;
        static void CreateDynamicVirtualHardDisk(string path, UInt64 maxInternalSize)
        {

            ManagementScope scope = new ManagementScope(@"root\virtualization", null);
            ManagementObject imageService = Utility.GetServiceObject(scope, "Msvm_ImageManagementService");

            ManagementBaseObject inParams = imageService.GetMethodParameters("CreateDynamicVirtualHardDisk");
            inParams["Path"] = path;
            inParams["MaxInternalSize"] = maxInternalSize * Size1G;
            ManagementBaseObject outParams = imageService.InvokeMethod("CreateDynamicVirtualHardDisk", inParams, null);
            if ((UInt32)outParams["ReturnValue"] == ReturnCode.Started)
            {
                if (Utility.JobCompleted(outParams, scope))
                {
                    Console.WriteLine("{0} was created successfully.", inParams["Path"]);
                }
                else
                {
                    Console.WriteLine("Unable to create {0}", inParams["Path"]);
                }
            }

            inParams.Dispose();
            outParams.Dispose();
            imageService.Dispose();

        }

        static void Main(string[] args)
        {
            if (args != null && args.Length != 2)
            {
                Console.WriteLine("Usage: CreateDynamicVHD path, maxInternalSize");
                Console.WriteLine("maxInternalSize: unit in 1 gigabyte");
                return;
            }
            string path = args[0];
            UInt64 maxInternalSize = UInt64.Parse(args[1]);
            CreateDynamicVirtualHardDisk(path, maxInternalSize);
        }
    }
}



The following VBScript example creates a dynamically expanding virtual hard disk file.

option explicit

dim objWMIService
dim managementService
dim fileSystem

const Size1G = &H40000000

const JobStarting = 3
const JobRunning = 4
const JobCompleted = 7
const wmiStarted = 4096

Main()

'-----------------------------------------------------------------
' Main
'-----------------------------------------------------------------
Sub Main()
    
    dim computer, objArgs, vhdPath, dynmicVHD, size

    set fileSystem = Wscript.CreateObject("Scripting.FileSystemObject")

    computer = "."
    set objWMIService = GetObject("winmgmts:\\" & computer & "\root\virtualization")
    set managementService = objWMIService.ExecQuery("Select * from Msvm_ImageManagementService").ItemIndex(0)

    set objArgs = WScript.Arguments
    if WScript.Arguments.Count = 2 then
       vhdPath = objArgs.Unnamed.Item(0)
       size = objArgs.Unnamed.Item(1)
    else
       WScript.Echo "usage: cscript CreateDyanmicVHD.vbs VHDFilePath, size"
       WScript.Echo "size: unit in Gigabyte"
       WScript.Quit(1)
    end if

    if CreateDynamicVirtualHardDisk(vhdPath, size) then
        WriteLog "Done"
        WScript.Quit(0)
    else
        WriteLog "CreateVHD failed"
        WScript.Quit(1)
    end if


End Sub

'-----------------------------------------------------------------
' Execute CreateDynamicVirtualHardDisk method
'-----------------------------------------------------------------
Function CreateDynamicVirtualHardDisk(vhdPath, size)
    WriteLog Format2("Sub CreateFixedVirtualHardDisk({0}, {1})",  vhdPath, size)
    
    dim objInParam, objOutParams
    
    CreateDynamicVirtualHardDisk = false

    set objInParam = managementService.Methods_("CreateDynamicVirtualHardDisk").InParameters.SpawnInstance_()
    objInParam.Path = vhdPath
    objInParam.MaxInternalSize = size * Size1G

    set objOutParams = managementService.ExecMethod_("CreateDynamicVirtualHardDisk", objInParam)

    if (WMIMethodStarted(objOutParams)) then
        if (WMIJobCompleted(objOutParams)) then
            WriteLog Format1("'{0}' was created successfully!", vhdPath)
            CreateDynamicVirtualHardDisk = true
        end if
    end if

End Function


'-----------------------------------------------------------------
' Handle wmi return values
'-----------------------------------------------------------------
Function WMIMethodStarted(outParam)
    WriteLog "Function WMIMethodStarted"
    
    dim wmiStatus
    
    WMIMethodStarted = false

    if Not IsNull(outParam) then
        wmiStatus = outParam.ReturnValue

        if  wmiStatus = wmiStarted then
            WMIMethodStarted = true
        else
            WriteLog Format2("Failed to create VHD ConcreteJob with Error {1}.", wmiStatus)
        end if
   end if

End Function



'-----------------------------------------------------------------
' Handle wmi Job object
'-----------------------------------------------------------------
Function WMIJobCompleted(outParam)
    WriteLog "Function WMIJobCompleted"
    
    dim WMIJob, jobState

    set WMIJob = objWMIService.Get(outParam.Job)

    WMIJobCompleted = true

    jobState = WMIJob.JobState

    while jobState = JobRunning or jobState = JobStarting
        WriteLog Format1("In progress... {0}% completed.",WMIJob.PercentComplete)
        WScript.Sleep(1000)
        set WMIJob = objWMIService.Get(outParam.Job)
        jobState = WMIJob.JobState
    wend

    if (jobState <> JobCompleted) then
        WriteLog Format1("ErrorCode:{0}", WMIJob.ErrorCode)
        WriteLog Format1("ErrorDescription:{0}", WMIJob.ErrorDescription)
        WMIJobCompleted = false
    end if

End Function

'-----------------------------------------------------------------
' Create the console log files.
'-----------------------------------------------------------------
Sub WriteLog(line)
    dim fileStream
    set fileStream = fileSystem.OpenTextFile(".\CreateDynamicVHD.log", 8, true)
    WScript.Echo line
    fileStream.WriteLine line
    fileStream.Close

End Sub


'------------------------------------------------------------------------------
' The string formatting functions to avoid string concatenation.
'------------------------------------------------------------------------------
Function Format2(myString, arg0, arg1)
    Format2 = Format1(myString, arg0)
    Format2 = Replace(Format2, "{1}", arg1)
End Function

'------------------------------------------------------------------------------
' The string formatting functions to avoid string concatenation.
'------------------------------------------------------------------------------
Function Format1(myString, arg0)
    Format1 = Replace(myString, "{0}", arg0)
End Function

Requirements

Minimum supported client

None supported

Minimum supported server

Windows Server 2008

End of client support

None supported

End of server support

Windows Server 2012

Namespace

\\.\Root\Virtualization

MOF

WindowsVirtualization.mof

See also

CreateVirtualHardDisk (V2)
CIM_ConcreteJob
Msvm_ImageManagementService

 

 

Did you find this helpful?
(1500 characters remaining)
Thank you for your feedback

Community Additions

ADD
Show:
© 2014 Microsoft. All rights reserved.