2012-04-05 16 views
1

物理ドライブをパーティションに割り当ててドライブすると、DiskDriveToDiskPartitionがそのような候補のようですが、私は、クエリの要旨を作成するために、WMIクエリビルダを使用しましたWQLの構文:LIKE演算子を使用したDiskDriveToDiskPartition

ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", 
    "SELECT * FROM Win32_DiskDriveToDiskPartition WHERE 
    Antecedent = \\\\localhost\\root\\cimv2:Win32_DiskDrive.DeviceID="\\\\\\\\.\\\\PHYSICALDRIVE3""); 

まず第一に、それは持っているとVisual Studioが、これは有効なクエリではないことを私に告げる私はそれをしたいです余りにも多くの\文字が含まれています。また、ソートする必要がある不正な引用符があります。第二に、私はちょうど

WHERE Antecedent LIKE \"%" + physicalDriveID + "%\" 

それをPHYSICALDRIVE変数を渡すというアイデア

を読み取るために、単にWHERE句したいと思いますが、私が得るすべては、無効なクエリーエラーです。

これに正しい方向のポインタはありますか?

WMIクエリビルダを実行するか、LIKE句を実行するかのどちらかが本当に役立ちます。

+0

解決方法を見つけましたか? – sri

答えて

1

答えはおそらく長い時間ですが、まだ興味がある人の利益のために、これは私が思いついた解決策でした。このトリックは、WMIクエリの構文のASSOCIATORS OFを使用することです。こうすることで、DeviceIDをパーティションに効果的に結合できます。

using (ManagementObjectSearcher search = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive")) 
{ 
    // extract model and interface information 
    foreach (ManagementObject drive in search.Get()) 
    { 
     string antecedent = drive["DeviceID"].ToString(); // the disk we're trying to find out about 
     antecedent = antecedent.Replace(@"\", "\\"); // this is just to escape the slashes 
     string query = "ASSOCIATORS OF {Win32_DiskDrive.DeviceID='" + antecedent + "'} WHERE AssocClass = Win32_DiskDriveToDiskPartition"; 
     using (ManagementObjectSearcher partitionSearch = new ManagementObjectSearcher(query)) 
     { 
      foreach (ManagementObject part in partitionSearch.Get()) 
      { 
       //...pull out the partition information 
      } 
     } 
    } 
} 
関連する問題