Создать раздел 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.
http://i49.tinypic.com/s1kzub.png.
Есть идеи, что тут может быть не так?
Также я попытался создать раздел 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;
}
}
}
1 ответ
Я наконец решил проблему с помощью VDS: я создал том с помощью IVdsPack::CreateVolume(), получил его раздел, отформатировал его в Fat32 с помощью IVdsAdvancedDisk::FormatPartition() и изменил PartitionType с помощью IVdsAdvancedDisk2::ChangePartitionType()