ここでは、C# において物理ディスク情報のデバイスIDや製造元、および割り当てられている論路ディスク情報(ドライブレター)を取得するサンプルコードを掲載しています。
スポンサーリンク
物理ディスクと論理ディスクの紐づけ
物理ディスク情報から紐づけられている論理ディスク情報の取得を行うサンプルコードは以下の通りです。
//using System.Management;
// 物理ディスク情報をすべて取得
string query = @"SELECT * FROM Win32_DiskDrive";
// 例えば、USB接続のディスクのみを取得する場合
// @"SELECT * FROM Win32_DiskDrive WHERE InterfaceType LIKE '%USB%'";
foreach (ManagementObject device in new ManagementObjectSearcher(query).Get())
{
// 各種情報は、GetPropertyValueを使用したり、配列のように取り出せる
string deviceID = (string)device.GetPropertyValue("DeviceID"); // デバイスID
string manufacturer = device["Manufacturer"].ToString(); // 製造元
string model = device["Model"].ToString(); // モデル(型番)
string if = device["InterfaceType"].ToString(); // 接続タイプ(USBなど)
// パーティション情報を取得する
query = @"ASSOCIATORS OF {Win32_DiskDrive.DeviceID='" + device.Properties["DeviceID"].Value +
"'} WHERE AssocClass = Win32_DiskDriveToDiskPartition";
foreach (ManagementObject partition in new ManagementObjectSearcher(query).Get())
{
// 論理ディスク情報を取得
query = @"ASSOCIATORS OF {Win32_DiskPartition.DeviceID='" +
partition["DeviceID"] +
"'} WHERE AssocClass = Win32_LogicalDiskToPartition";
foreach (ManagementObject disk in new ManagementObjectSearcher(query).Get())
{
string driveLetter = (string)disk["Name"]; // ドライブレター (ex H:)
}
}
}
foreach (ManagementObject device in new ManagementObjectSearcher(query).Get())⇒無効なクエリーと言う表示がされて、デバックエラーを起こしました。