我正在做一些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
查询:
MSStorageDriver_ATAPISmartData
查询:
现在我的计算机上只有2个硬盘驱动器,所以我真的不知道是否总会如此,或者在我的系统中是否特别强调查询结果排序不同。
MSStorageDriver_ATAPISmartData
命名空间确实包含InstanceName
值,该值应包括可能用于将该信息与上一个查询中的信息相关联的硬盘驱动器模型,但该数据不是与Win32_DiskDrive
查询完全相同,因为它将品牌分开并且显然具有字符限制,更不用说您的计算机上可能有2个相同型号的硬盘驱动器。
我也在使用Name
命名空间中的Win32_DiskDrive
值,它返回的值如下:
Disk 1: \\.\PHYSICALDRIVE1
Disk 2: \\.\PHYSICALDRIVE0
这种行为是正常的,我应该相信它总是1,2,......和......,2,1,并使数据在应用程序中匹配,还是有另一种方法来解决这个问题?