如何使用Win32_DiskDrive识别系统硬盘

时间:2013-08-01 21:06:08

标签: c# wmi

我正在使用WMI获取有关计算机硬盘驱动器的信息,但我找不到允许我识别哪个硬盘驱动器用作安装Windows的系统驱动器的属性。

ManagementObjectSearcher mos_HDD = new ManagementObjectSearcher("select * from Win32_DiskDrive");

我尝试迭代所有属性,但似乎没有一个看起来它包含我需要的信息。

foreach (ManagementObject mo_HDD in mos_HDD.Get())
{
      Console.WriteLine("HDD Properties:");
      foreach (PropertyData pd in mo_HDD.Properties)
      {
           Console.WriteLine("\tName: {0} \tValue: {1}", pd.Name, pd.Value != null ? pd.Value.ToString() : "NULL");
      }
} 

我也查看了MSDN文档,但没有运气。

我在这里要做的是获取系统驱动器的某种标识符(例如签名或序列号)。

非常感谢您获取此信息的任何帮助。

3 个答案:

答案 0 :(得分:1)

你可以得到它:

  public static void Main()
    {
        try
        {
            ManagementObjectSearcher searcher = 
                new ManagementObjectSearcher("root\\CIMV2", 
                "SELECT * FROM Win32_DiskDrive"); 

            foreach (ManagementObject queryObj in searcher.Get())
            {                 
                Console.WriteLine("SerialNumber: {0}", queryObj["SerialNumber"]);
                Console.WriteLine("Signature: {0}", queryObj["Signature"]);
            }
        }
        catch (ManagementException e)
        {

        }
    }

答案 1 :(得分:0)

您链接的文档有答案:

string   SerialNumber;
uint32   Signature;

您的管理对象将包含这些属性。

如果您为这些值获取null,那么问题是您使用的是不支持它们的Windows版本。

SerialNumber
...
Windows Server 2003 and Windows XP:  This property is not available.

在这种情况下你必须使用Signature属性,但这需要XP SP3我相信。

答案 2 :(得分:0)

有一个类似于Win32_Diskdrive的类Win32_LogicalDisk,它具有卷,而不是物理磁盘。它具有包含驱动器号的name属性。

环境变量%SystemRoot%具有Windows所在的路径(例如D:\ windows) 同样在注册表Computer \ HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion SystemRoot中。

因此,您可以将SystemRoot驱动器号与Win32_LogicalDisk的Name属性进行比较。

我相信有一种方法可以从Win32_Diskdrive的属性中获取卷列表,但是我还没有尝试过。