1

我目前有一个函数,它使用通过 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();
                    }
                }
            }
        }
    }
}
4

2 回答 2

2

如果要识别 VM 实例,可以使用实例的 UUID 属性Win32_ComputerSystemProduct。在现实世界中,这映射到主板上的 ID。在虚拟机中,无论​​驱动器如何,这都会为每个虚拟机配置返回一个唯一值(但我不确定如果克隆或移动虚拟机会发生什么)。

于 2013-05-09T21:39:21.920 回答
1

您可以使用“逻辑”磁盘的序列号。如果磁盘被重新分区,这将改变。如果更改冗余 RAID 设置的一个驱动器,它不会更改。这是存储在块级别的东西,因此实际的存储设置是什么并不重要。

您需要安装卷VolumeSerialNumber的 a 属性。Win32_LogicalDisk

http://msdn.microsoft.com/en-us/library/windows/desktop/aa394173(v=vs.85).aspx

于 2012-10-16T15:30:38.847 回答