WMI查询中硬盘的顺序不同

时间:2017-10-17 16:03:28

标签: c# wmi hardware hard-drive wmi-query

我正在做一些WMI查询以获取有关计算机上硬盘驱动器的信息,特别是我使用命名空间Win32_DiskDrive来获取常规硬盘驱动器信息和MSStorageDriver_ATAPISmartData,以获取SMART数据。

我的查询如下:

ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");
foreach (ManagementObject wmiValue in searcher.Get())
{
    hd.Model = wmiValue["Model"].ToString().Trim();
    ...
}

就像这样:

searcher = new ManagementObjectSearcher("root\\WMI", "SELECT * FROM MSStorageDriver_ATAPISmartData");
foreach (ManagementObject wmiValue in searcher.Get())
{
    hd.InstanceName = wmiValue["InstanceName"].ToString().Trim();
    ...
}

问题在于,由于某种原因,我得到了不同顺序的结果,例如:

Win32_DiskDrive查询:

  • 磁盘1的值A
  • 磁盘1的值B
  • ...
  • 磁盘2的值A
  • ...

MSStorageDriver_ATAPISmartData查询:

  • 磁盘2的值A
  • 磁盘2的值B
  • ...
  • 磁盘1的值A
  • ...

现在我的计算机上只有2个硬盘驱动器,所以我真的不知道是否总会如此,或者在我的系统中是否特别强调查询结果排序不同。

MSStorageDriver_ATAPISmartData命名空间确实包含InstanceName值,该值应包括可能用于将该信息与上一个查询中的信息相关联的硬盘驱动器模型,但该数据不是与Win32_DiskDrive查询完全相同,因为它将品牌分开并且显然具有字符限制,更不用说您的计算机上可能有2个相同型号的硬盘驱动器。

我也在使用Name命名空间中的Win32_DiskDrive值,它返回的值如下:

Disk 1: \\.\PHYSICALDRIVE1
Disk 2: \\.\PHYSICALDRIVE0

这种行为是正常的,我应该相信它总是1,2,......和......,2,1,并使数据在应用程序中匹配,还是有另一种方法来解决这个问题?

0 个答案:

没有答案