2014-12-23 96 views
7

我想从驱动器盘符中获取型号名称。例如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

您仍然需要使用WMI。我不知道确切的查询,但您需要查看_physical_驱动器。驱动器号不对应于特定的物理驱动器。它可能代表单个驱动器内的分区,单个驱动器上的唯一分区,或者跨越多个驱动器的逻辑分区。因此,第一步是通过“从驱动器号中获取型号名称”来确定您的真正含义。 –

+0

当再次阅读你的问题时,我想我没有给你的问题给出正确的答案。但玛贝这可以帮助你进一步:http://www.geekpedia。com/tutorial233_Getting-Disk-Drive-Information-using-WMI-and-Csharp.html – Sjips

+0

@Sjips如果你知道*你没有给出正确的答案,***不回答这个问题!*** – cybermonkey

回答

11

我给你写了一个功能,应该做你需要的功能:

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

即使使用USB闪存驱动器或USB硬盘驱动器,也可以正常工作。谢谢 ! – fakemeta

1

我相信可以从Win32_LogicalDiskToPartitionWin32_DiskDriveToDiskPartition类读取分区驱动器映射。

0

我想你可以从注册表中获取信息。我有一个英特尔SSD,我在设备管理器中查找它的名字。当我做一个注册表搜索,我发现它:

enter image description here

所以我认为当你的代码迭代线槽HKLM\HARDWARE\DEVICEMAP\Scsi你可以找到的信息。

+0

这只有*部分*回答这个问题。请使用如何检索这些信息的代码示例编辑您的答案,然后我将删除downvote并取而代之。 – cybermonkey

1

Win32_DiskDriveToDiskPartition,Win32_LogicalDiskToPartition

蛮力:

  1. 采取所有磁盘

    SELECT * FROM Win32_DiskDrive

  2. 对于每个磁盘拿到分区

    的ASSOCIATORS【W in32_DiskDrive.DeviceID = disk.DeviceID} WHERE AssocClass = Win32_DiskDriveToDiskPartition

  3. 对于每个分区获取体积字母

    作者ASSOCIATORS {Win32_DiskPartition.DeviceID = partition.DeviceID} WHERE AssocClass = Win32_LogicalDiskToPartition

相关问题