Compartilhar via


Método ConvertVirtualHardDisk da classe Msvm_ImageManagementService

Converte um disco rígido virtual existente em um tipo ou formato diferente. Esse método cria um novo disco rígido virtual e não converte o disco rígido virtual de origem em vigor. Consulte Comentários sobre restrições de uso para este método.

Sintaxe

uint32 ConvertVirtualHardDisk(
  [in]  string              SourcePath,
  [in]  string              VirtualDiskSettingData,
  [out] CIM_ConcreteJob REF Job
);

Parâmetros

SourcePath [in]

Tipo: cadeia de caracteres

O caminho totalmente qualificado do arquivo de disco rígido virtual de origem a ser convertido. Esse arquivo não será modificado como resultado dessa operação.

VirtualDiskSettingData [in]

Tipo: cadeia de caracteres

Uma representação de cadeia de caracteres da classe Msvm_VirtualHardDiskSettingData que especifica os atributos do novo disco rígido virtual. As propriedades Path, Type, Format, ParentPath, BlockSize e LogicalSectorSize devem ser definidas. A propriedade ParentPath poderá ser Null se não for necessária. Defina as propriedades BlockSize e LogicalSectorSize como 0 para usar os valores padrão.

Para especificar o formato (VHD ou VHDX) do novo disco rígido virtual, defina a extensão do Caminho para o valor apropriado (".vhd" ou ".vhdx"). A propriedade Format deve corresponder à extensão de nome de arquivo no Caminho.

A propriedade LogicalSectorSize será ignorada.

Trabalho [out]

Tipo: CIM_ConcreteJob

Se a operação for executada de forma assíncrona, esse método retornará 4096 e esse parâmetro conterá uma referência a um objeto derivado de CIM_ConcreteJob.

Valor retornado

Tipo: uint32

Esse método pode retornar um dos valores a seguir.

Concluído sem erro (0)

Parâmetros de método verificados – Trabalho iniciado (4096)

Falha (32768)

Acesso negado (32769)

Sem suporte (32770)

O status é desconhecido (32771)

Tempo limite (32772)

Parâmetro inválido (32773)

O sistema está em uso (32774)

Estado inválido para esta operação (32775)

Tipo de dados incorreto (32776)

O sistema não está disponível (32777)

Memória insuficiente (32778)

Arquivo não encontrado (32779)

Comentários

Somente os seguintes tipos de discos rígidos virtuais podem ser usados com este método:

  • VHD fixo
  • Corrigido O VHDX
  • VHD dinâmico
  • VHDX dinâmico
  • VHD diferencial
  • VHDX de diferenciação

O acesso à classe Msvm_ImageManagementService pode ser restrito pela Filtragem UAC. Para obter mais informações, consulte Controle de conta de usuário e WMI.

Exemplos

O exemplo de C# a seguir converte um disco rígido virtual. Os utilitários referenciados podem ser encontrados em Utilitários comuns para os exemplos de virtualização (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();
}

Requisitos

Requisito Valor
Cliente mínimo com suporte
Windows 8 [somente aplicativos da área de trabalho]
Servidor mínimo com suporte
Windows Server 2012 [somente aplicativos da área de trabalho]
Namespace
Root\Virtualization\V2
MOF
WindowsVirtualization.V2.mof
DLL
Vmms.exe

Confira também

ConvertVirtualHardDisk (V1)

CIM_ConcreteJob

Msvm_ImageManagementService