Создайте раздел UEFI с помощью VDS

Я пытаюсь создать раздел UEFI, используя IVdsCreatePartitionEx::CreatePartitionEx метод.

В параметре структуры CREATE_PARTITION_PARAMETERS я передал PARTITION_SYSTEM_GUID (c12a7328-f81f-11d2-ba4b-00a0c93ec93b) как partitionType и GPT_BASIC_DATA_ATTRIBUTE_NO_DRIVE_LETTER (0x8000000000000000) в качестве атрибутов.

Но я получаю неизвестный раздел с типом c12a0000-f81f-11d2-ba4b-00a0c93ec93b.

Скриншот DISKPART с ошибкой .

Есть идеи, что здесь может быть не так?

Также я попытался создать раздел UEFI с помощью WMI на Win8. Но я получил значение ошибки 41010 — указанный тип раздела недействителен. Вот мой код

static void Main(string[] args)
{
    try
    {
        var scope = new ManagementScope(@"\\.\Root\Microsoft\Windows\Storage");
        scope.Connect();

        const string query = "SELECT * FROM MSFT_Disk WHERE Number = 7";
        var objectQuery = new ObjectQuery(query);
        var seacher = new ManagementObjectSearcher(scope, objectQuery);
        var disks = seacher.Get();

        var disk = disks.Cast<ManagementObject>().FirstOrDefault();

        if (disk == null)
        {
            throw new NoNullAllowedException("Disk is null");
        }

        var parameters = disk.GetMethodParameters("CreatePartition");
        FillInvocationParameters(parameters, new Dictionary<string, object> { { "Size", 104857600 }, { "Offset", 5ul * 1024 * 1024 * 1024 }, { "Alignment", 512 }, { "AssignDriveLetter", false }, { "GptType", "c12a7328-f81f-11d2-ba4b-00a0c93ec93b" }, { "IsHidden", false } });

        var result = disk.InvokeMethod("CreatePartition", parameters, null);
        var returnValue = result["ReturnValue"];
    }
    catch (Exception exception)
    {
        Debug.Fail(exception.Message);
    }
}
static void FillInvocationParameters(ManagementBaseObject invokeParameters, IDictionary<string, object> parameters)
{
    foreach (var pair in parameters)
    {
        string stringParamValue;

        var managementObjectParam = pair.Value as ManagementObject;
        var arrayParam = pair.Value as string[];

        if (managementObjectParam != null)
        {
            stringParamValue = managementObjectParam.GetText(TextFormat.CimDtd20);
            invokeParameters[pair.Key] = stringParamValue;
        }
        else if (arrayParam != null)
        {
            invokeParameters[pair.Key] = arrayParam;
        }
        else if (pair.Value != null)
        {
            stringParamValue = pair.Value.ToString();
            invokeParameters[pair.Key] = stringParamValue;
        }
    }
}

person Syshka    schedule 19.10.2012    source источник
comment
Было бы полезно увидеть фрагмент кода, где вы делаете этот вызов, и саму необработанную ошибку.   -  person Kev    schedule 19.10.2012


Ответы (1)


Я наконец решил проблему с помощью VDS: я создал том с помощью IVdsPack::CreateVolume(), получил его раздел, отформатировал его в Fat32 с помощью IVdsAdvancedDisk::FormatPartition() и изменил PartitionType с помощью IVdsAdvancedDisk2::ChangePartitionType()

person Syshka    schedule 23.10.2012