WMIによる抽出方法
WMI(Windows Management Instrumentation)は、Windowsを効率的に管理するための統合システムです。Windows 2000から標準で組み込まれていますが、別途、WMIを入手しインストールすることでWindows 9x系でも使用できます。WMIはWSHや.NET環境から簡単に使用することができます(C/C++でも使用可能ですが、使用するまでの前処理が複雑ですのであまりお勧めしません)。
今回は物理ディスクドライブを抽出するWMI
クラスである「Win32_DiskDrive」を使用します。
- InterfaceType
接続しているインターフェイスの型が返却されます(例:「IDE」「SCSI」「USB」「1394」など)。
- Model
ハードディスクの型番が返却されます(例:「ST3250823A」)。
WSHによる実装
「物理ディスクプロパティの列挙」を参考にして改造しました。
'物理ドライブの収集 by WMI Set objWMIService = GetObject( _ "winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") Set colDiskDrives = _ objWMIService.ExecQuery("Select * from Win32_DiskDrive") For each objDiskDrive in colDiskDrives Wscript.Echo "[" & objDiskDrive.InterfaceType & _ "] " & objDiskDrive.Model Next
上記のソースをテキストエディタで「disk.vbs」という名前で保存し、コマンドプロンプトで「cscript disk.vbs」と入力して実行しました。
[IDE] ST3250823A [1394] Apple Computer_ Inc. iPod IEEE 1394 SBP2 Device [SCSI] Maxtor 6 L250S0 SCSI Disk Device [USB] HTS54802 0M9AT00 USB Device [USB] IC25N040 ATMR04-0 USB Device
WMIを使用することでデバイスマネージャの情報を取得できます。
C#による実装
WMI Code Creator(参考:「Utility Spotlight: WMI Code Creator」)でWin32_DiskDriveのサンプルコードを吐かせて改造しました。このツールは使い勝手が良く便利です。
using System; using System.Collections.Generic; using System.Text; using System.Management; namespace disk { class Program { static void Main(string[] args) { try { ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_DiskDrive"); foreach (ManagementObject queryObj in searcher.Get()) { Console.WriteLine("[{0}] {1}", queryObj["InterfaceType"], queryObj["Model"]); } } catch (ManagementException e) { Console.WriteLine( "An error occurred while querying for WMI data: " + e.Message); } } } }