如何使用Win32_DiskDrive识别系统硬盘驱动器

本文关键字:识别 系统 硬盘驱动器 DiskDrive 何使用 Win32 | 更新日期: 2023-09-27 18:25:48

我正在使用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文档,但运气不好。

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

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

如何使用Win32_DiskDrive识别系统硬盘驱动器

您可以将其获取为:

  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)
        {
        }
    }

您链接的文档有答案:

string   SerialNumber;
uint32   Signature;

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

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

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

在这种情况下,您必须使用Signature属性,但我认为这需要XP SP3。

有一个类似于Win32_Diskdrive的类别Win32_LogicalDisk,它拥有卷,而不是物理磁盘。它有一个带有驱动器号的名称属性。

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

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

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