我目前有一个函数,它使用通过 WMI 的调用返回虚拟机的硬盘驱动器序列,在实际物理硬盘驱动器上运行时效果很好。但是,当我在带有虚拟磁盘的虚拟机上运行该功能时,硬盘驱动器序列总是以相同的 1 和 0 序列返回。我正在尝试使用这种技术来识别特定的机器。是否有更可靠的方法来检索某种标识符,该标识符标识(虚拟)机器中使用的硬件可能不会改变?
作为说明,我已将 MAC 地址作为建议提供给我,但如果必须更换它所绑定的 NIC,我不希望我的软件损坏。
我还关心通过 RAID 配置的系统硬盘驱动器上可能返回的内容,因为此串行需要与每次调用保持一致。但是,我没有配置 RAID 的系统来测试它,所以我不确定首先会返回什么。
编辑我已经找到了一种可靠的方法来将我们的软件锁定到虚拟机,即使序列号可能不是唯一的,所以 VM 部分不再是问题。但是,我仍然不确定在某些 RAID 配置下这可能如何恢复,并且如上所述,我没有配置 RAID 的机器来测试,更不用说要测试的几个配置了。非常感谢您对此提供的任何帮助。
下面是高清串口功能:
string Win32_Class = string.Empty;
string Win32_Property = string.Empty;
string systemDrive = null;
try
{
systemDrive = System.Environment.GetFolderPath(System.Environment.SpecialFolder.System).Substring(0, 2);
Win32_Class = "Win32_LogicalDisk";
using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(string.Format("SELECT * FROM {1} WHERE DeviceID='{0}'", systemDrive, Win32_Class)))
{
foreach (ManagementObject logicalDisk in searcher.Get())
{
Win32_Class = "Win32_DiskPartition";
foreach (ManagementObject partition in logicalDisk.GetRelated(Win32_Class))
{
Win32_Class = "Win32_DiskDrive";
foreach (ManagementObject diskDrive in partition.GetRelated(Win32_Class))
{
Win32_Class = "Win32_PhysicalMedia";
foreach (ManagementObject diskMedia in diskDrive.GetRelated(Win32_Class))
{
Win32_Property = "SerialNumber";
mySystemDeviceSerial = diskMedia[Win32_Property].ToString().Trim();
}
}
}
}
}
}