2012-10-19 3 views
3

IVdsCreatePartitionEx::CreatePartitionEx 메서드를 사용하여 UEFI 파티션을 만들려고합니다. CREATE_PARTITION_PARAMETERS 구조체 파라미터로VDS를 사용하여 UEFI 파티션 만들기

PARTITION_SYSTEM_GUID (c12a7328-f81f-11D2-ba4b-00a0c93ec93b) 특성과 같은 partitionTypeGPT_BASIC_DATA_ATTRIBUTE_NO_DRIVE_LETTER (0x8000000000000000)로 전달.

하지만 c12a0000-f81f-11d2-ba4b-00a0c93ec93b 유형의 알 수없는 파티션이 있습니다.

Screenshot of DISKPART showing error http://i49.tinypic.com/s1kzub.png.

어떤 아이디어가 잘못 될 수 있습니까?

또한 Win8에서 WMI를 사용하여 UEFI 파티션을 만들려고했습니다. 하지만 오류 값 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; 
     } 
    } 
} 
+0

이 코드를 호출하고 원시 오류 자체를 확인하는 것이 도움이 될 것입니다. – Kev

답변

2

마침내 VDS를 사용하여 문제를 해결할 수 있습니다 : 나는 IVdsAdvancedDisk :: FormatPartition를 사용하여 FAT32로 그것을 포맷은 파티션의받은 IVdsPack :: CreateVolume()를 사용하여 볼륨을 생성()와 PartitionType 변경 IVdsAdvancedDisk2 :: ChangePartitionType()을 사용하여