2010年12月09日

"ASSOCIATORS OF" on System.Management

HDDフォーマット形式の取得方法 - Insider .NET会議室 より。

回答にて ちなみに、WMI でドライブレターからそのパーティションを探すには、Win32_LogicalDiskToPartition を使用できます。.NET(System.Management)だと使いづらいんですが。 などと書いてしまったわけですが、単に私の勉強不足による誤解でした。

ある WMI クラスインスタンスに関連するクラスインスタンスを取得するのに、WQL で ASSOCIATORS OF クエリを使うことができます。C ドライブの Win32_DiskPartition を取得するにはこんな感じのクエリになります。見れば大体分かると思うので解説は略。

ASSOCIATORS OF {Win32_LogicalDisk.DeviceID='C:'} WHERE
     ResultClass=Win32_DiskPartition AssocClass=Win32_LogicalDiskToPartition
     ResultRole=Antecedent Role=Dependent

上記はきわめて丁寧に書いた場合で、手を抜ききるとこんな感じになります。

ASSOCIATORS OF {Win32_LogicalDisk='C:'} WHERE ResultClass=Win32_DiskPartition

もちろん、System.Management でもこのクエリを使うことができます。ManagementObjectSearcher のコンストラクタに直接上記のクエリを渡すのが手っ取り早いでしょう。

クエリ構文が思いつかない、という場合、パラメータを渡すことで ASSOCIATORS OF クエリの構築を行ってくれる RelatedObjectQuery クラスも存在しています。このクラスを使った場合はこんな感じになります。

// 丁寧に書いた版
var query = new RelatedObjectQuery("Win32_LogicalDisk='C:'", "Win32_DiskPartition",
    "Win32_LogicalDiskToPartition", null, null, "Antecedent", "Dependent", false);
var searcher = new ManagementObjectSearcher(query);
// 省略版
var query = new RelatedObjectQuery("Win32_LogicalDisk='C:'", "Win32_DiskPartition");
posted by Hongliang at 21:25| Comment(10) | TrackBack(0) | .NET | このブログの読者になる | 更新情報をチェックする

ここ(hongliang.seesaa.net)で公開しているものについて、利用は自由に行って頂いて構いません。改変、再頒布もお好きになさって下さい。利用に対しこちらが何かを要求することはありません。

ただし、公開するものを使用、または参考したことによって何らかの損害等が生じた場合でも、私はいかなる責任も負いません。

あ、こんなのに使ったってコメントを頂ければ嬉しいです。

×

この広告は1年以上新しい記事の投稿がないブログに表示されております。