我想从驱动器号中获取型号名称。例如,Crucial_CT256MX100SSD1
是我的驱动器C:\
可以使用简单的WMI查询
检索模型var hdd = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive WHERE Index = '0'")
.Get()
.Cast<ManagementObject>()
.First();
MessageBox.Show(hdd["Model"].ToString());
但是,我无法使用驱动器号过滤查询。
不幸的是Win32_LogicalDisk
没有驱动器的型号。
我没有更多的想法。
答案 0 :(得分:12)
我给你写了一个应该做你需要的功能:
class Program
{
static void Main(string[] args)
{
const string drive = "C:";
Console.WriteLine("Drive {0}'s Model Number is {1}", drive, GetModelFromDrive(drive));
}
public static string GetModelFromDrive(string driveLetter)
{
// Must be 2 characters long.
// Function expects "C:" or "D:" etc...
if (driveLetter.Length != 2)
return "";
try
{
using (var partitions = new ManagementObjectSearcher("ASSOCIATORS OF {Win32_LogicalDisk.DeviceID='" + driveLetter +
"'} WHERE ResultClass=Win32_DiskPartition"))
{
foreach (var partition in partitions.Get())
{
using ( var drives = new ManagementObjectSearcher("ASSOCIATORS OF {Win32_DiskPartition.DeviceID='" +
partition["DeviceID"] +
"'} WHERE ResultClass=Win32_DiskDrive"))
{
foreach (var drive in drives.Get())
{
return (string) drive["Model"];
}
}
}
}
}
catch
{
return "<unknown>";
}
// Not Found
return "<unknown>";
}
}
只需传入一个字符串,例如C:
或D:
。它必须只是驱动器号和冒号。此外,我为硬盘驱动器做了这项工作。它不适用于CD-ROM驱动器。如果你需要这个功能,它可以扩展。
答案 1 :(得分:1)
我相信可以从Win32_LogicalDiskToPartition
和Win32_DiskDriveToDiskPartition
类中读取分区驱动器映射。
答案 2 :(得分:1)
Win32_DiskDriveToDiskPartition,Win32_LogicalDiskToPartition
蛮力:
拿走所有磁盘
SELECT * FROM Win32_DiskDrive
对于每个磁盘获取分区
协会的{Win32_DiskDrive.DeviceID = disk.DeviceID } WHERE AssocClass = Win32_DiskDriveToDiskPartition
对于每个分区获取卷号
协会的{Win32_DiskPartition.DeviceID = partition.DeviceID } WHERE AssocClass = Win32_LogicalDiskToPartition
答案 3 :(得分:0)
我认为您可以从注册表中获取信息。我有一个英特尔固态硬盘,我在设备管理器中查找了它的名字。当我进行注册表搜索时,我找到了它:
所以我认为当您编写代码来迭代HKLM\HARDWARE\DEVICEMAP\Scsi
时,您可以找到信息。