Поделиться через


Mount method of the Msvm_ImageManagementService class

Mounts a virtual disk image file in loopback mode.

Syntax

uint32 Mount(
  [in]  string              Path,
  [out] CIM_ConcreteJob REF Job
);

Parameters

Path [in]

Type: string

A fully qualified path that specifies the location of the virtual disk image file.

Job [out]

Type: CIM_ConcreteJob

A reference to the job, represented by a CIM_ConcreteJob object (can be null if the task is completed).

Return value

Type: uint32

This method can return one of the following values.

Return code/value Description
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 used
32774
Invalid state for this operation
32775
Incorrect data type
32776
System is not available
32777
Out of memory
32778
File not found
32779
[!Note]
Added in Windows Server 2012 R2.

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

using System;
using System.Management;

namespace HyperVSamples
{
    class MountVHD
    {
        static void Mount(string path)
        {
            ManagementScope scope = new ManagementScope(@"root\virtualization", null);
            ManagementObject imageService = Utility.GetServiceObject(scope, "Msvm_ImageManagementService");

            ManagementBaseObject inParams = imageService.GetMethodParameters("Mount");
            inParams["Path"] = path;
            ManagementBaseObject outParams = imageService.InvokeMethod("Mount", inParams, null);
            if ((UInt32)outParams["ReturnValue"] == ReturnCode.Started)
            {
                if (Utility.JobCompleted(outParams, scope))
                {
                    Console.WriteLine("{0} was mounted successfully.", inParams["Path"]);
                }
                else
                {
                    Console.WriteLine("Unable to mount {0}", inParams["Path"]);
                }
            }
            inParams.Dispose();
            outParams.Dispose();
            imageService.Dispose();
        }

        static void Main(string[] args)
        {
            if (args != null && args.Length != 1)
            {
                Console.WriteLine("Usage: MountVHD vhdPath");
                return;
            }
            Mount(args[0]);
        }
    }
}

The following VBScript example mounts a virtual disk image file.

option explicit 

dim objWMIService
dim managementService
dim fileSystem

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

dim vhdPath

Main()

'-----------------------------------------------------------------
' Main
'-----------------------------------------------------------------
Sub Main()

    dim computer, objArgs
    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 = 1 then
        vhdPath = objArgs.Unnamed.Item(0)
    else
        WScript.Echo "usage: cscript MountVHD.vbs VHDFilePath"
        WScript.Quit(1)
    end if

    if ExecuteMountVHD then
        WriteLog "Done"
        WScript.Quit(0)
    else
        WriteLog "Mount failed"
        WScript.Quit(1)
    end if
End Sub

'-----------------------------------------------------------------
' Execute Mount
'-----------------------------------------------------------------
Function ExecuteMountVHD()
    WriteLog Format1("Sub ExecuteMountVHD({0})",  vhdPath)
    
    dim objInParam, objOutParams

    ExecuteMountVHD = false
    set objInParam = managementService.Methods_("Mount").InParameters.SpawnInstance_()
    objInParam.Path = vhdPath

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

    if (WMIMethodStarted(objOutParams)) then
        if (WMIJobCompleted(objOutParams)) then
            WriteLog Format1("VHD {0} was mounted successfully!", vhdPath)
            ExecuteMountVHD = 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("Mount operation for VHD {0} failed to create ConcreteJob with error {1}", vhdPath, 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(".\MountVHD.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
Header
Vds.h
MOF
WindowsVirtualization.mof

See also

AttachVirtualHardDisk (V2)

CIM_ConcreteJob

Msvm_ImageManagementService