首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用VDS创建UEFI分区

使用VDS创建UEFI分区
EN

Stack Overflow用户
提问于 2012-10-19 21:35:56
回答 1查看 1.2K关注 0票数 3

我正在尝试使用IVdsCreatePartitionEx::CreatePartitionEx方法创建UEFI分区。

CREATE_PARTITION_PARAMETERS结构参数中,我传递了PARTITION_SYSTEM_GUID (c12a7328-f81f-11d2-ba4b-00a0c93ec93b)作为partitionType,传递了GPT_BASIC_DATA_ATTRIBUTE_NO_DRIVE_LETTER (0x800000000000000000)作为属性。

但是我得到了一个类型为c12a0000-f81f-11d2-ba4b-00a0c93ec93b的未知分区。

你知道这里会出什么问题吗?

我还尝试在Win8上使用WMI创建UEFI分区。但是我得到了错误值41010 -指定的分区类型无效。以下是我的代码

代码语言:javascript
复制
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;
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-23 16:35:42

我最终使用VDS解决了这个问题:我使用IVdsPack::CreateVolume()创建卷,接收它的分区,使用IVdsAdvancedDisk::FormatPartition()将其格式化为Fat32,并使用IVdsAdvancedDisk2::ChangePartitionType()更改PartitionType。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12975436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档