, ( ) . , , , , . , , Win32_DiskDrive , , 0,1 , :)
Dictionary<string, Dictionary<string, string>> results = new Dictionary<string,Dictionary<string,string>>();
ManagementClass diskPartMap = null;
ManagementObjectCollection diskPartIns = null;
ManagementClass partLogicalMap = null;
ManagementObjectCollection partLogicalIns = null;
try
{
using (ManagementClass diskDriveClass = new ManagementClass("Win32_Diskdrive"))
{
using (ManagementObjectCollection diskDrives = diskDriveClass.GetInstances())
{
foreach (ManagementObject diskDrive in diskDrives)
{
results.Add((string)diskDrive["DeviceId"], new Dictionary<string, string>());
}
}
}
Dictionary<string, ManagementObject> partToDisk = new Dictionary<string, ManagementObject>();
Dictionary<string, ManagementObject> partToLogical = new Dictionary<string, ManagementObject>();
diskPartMap = new ManagementClass("Win32_DiskDriveToDiskPartition");
diskPartIns = diskPartMap.GetInstances();
foreach (ManagementObject diskDrive in diskPartIns)
{
ManagementObject o = new ManagementObject((string)diskDrive["Antecedent"]);
partToDisk.Add((string)diskDrive["Dependent"], o);
}
partLogicalMap = new ManagementClass("Win32_LogicalDiskToPartition");
partLogicalIns = partLogicalMap.GetInstances();
foreach (ManagementObject diskDrive in partLogicalIns)
{
ManagementObject o = new ManagementObject((string)diskDrive["Dependent"]);
string s = (string)diskDrive["Antecedent"];
partToLogical.Add(s, o);
}
foreach (KeyValuePair<string, ManagementObject> pair in partToDisk)
{
string deviceId = (string)pair.Value["DeviceId"];
Dictionary<string, string> dict = null;
if (!results.ContainsKey(deviceId))
{
dict = new Dictionary<string, string>();
results[deviceId] = dict;
}
else
{
dict = results[deviceId];
}
if (partToLogical.ContainsKey(pair.Key))
{
ManagementObject o = partToLogical[pair.Key];
dict.Add((string)o["Name"], (string)o["FileSystem"]);
}
}
}
finally
{
if (diskPartIns != null)
{
diskPartIns.Dispose();
diskPartIns = null;
}
if (diskPartMap != null)
{
diskPartMap.Dispose();
diskPartMap = null;
}
if (partLogicalIns != null)
{
partLogicalIns.Dispose();
partLogicalIns = null;
}
if (partLogicalMap != null)
{
partLogicalMap.Dispose();
partLogicalMap = null;
}
}