繁体   English   中英

给定硬盘字母,我如何获得制造商序列号?

[英]Given a hard disk letter, how can I get the manufacturer serial number?

我在尝试确定驱动器的制造商序列号时遇到了很多麻烦,这可能是最快的方法(而不是调用WMI )。

我可以用来查询制造商序列号的信息是驱动器号(例如C:\\ )或操作系统分配给驱动器的数字序列号(例如4030771280 ),我可以检索该信息通过指定一个调用GetVolumeInformation函数的驱动器号。

关于如何使用WMI检索制造商序列号的问题,Stackoverflow中有很多示例和Q / A,但是所有这些问题和答案都是针对CURRENT驱动器的,而Win32_PhysicalMediaWin32_DiskDrive类似乎并未公开我可以使用的属性。与WHERE一起使用以查询给定驱动器号或其系统的序列号的特定驱动器的序列号

我愿意接受包含中间步骤的解决方案,例如“ 首先需要从驱动器号中获取设备ID,然后可以使用该值查询WMI ”(当然,最好使用WinAPI函数来避免WMI调用对性能的负面影响。 ),问题是我不知道如何执行如引用的那样的必需检索,因为卷管理功能似乎没有有用的功能来从驱动器号中检索磁盘信息,只是我在其上获得的GetVolumeInformation函数只能检索系统的串行信息,该信息是我不能用来在WMI上进行查询的值,以及磁盘标题,我也不能使用它,因为多个磁盘可能具有相同的标题...

没有简单的方法可以根据卷号获取硬盘驱动器的序列号-例如,在RAID 5的情况下,有多个物理驱动器可以构成卷。 要获得硬盘驱动器的序列号会更容易:

// A little bit modified code from https://stackoverflow.com/questions/24022130/generate-activation-key-from-hardware-id
public string identifier(string wmiClass, string wmiProperty)
        {
            string result = "";
            System.Management.ManagementClass mc = new System.Management.ManagementClass(wmiClass);
            System.Management.ManagementObjectCollection moc = mc.GetInstances();
            foreach (System.Management.ManagementObject mo in moc)
            {
                //Only get the first one
                if (result == "")
                {
                    try
                    {
                        result = mo[wmiProperty].ToString();
                        break;
                    }
                    catch
                    {
                    }
                }
            }
            return result;
        }

并像这样使用它:

identifier("Win32_DiskDrive", "SerialNumber"));

此源代码无法满足您的需求,但可能会导致找到解决方案。

编辑:没有WMI,没有简单的方法来获取硬件信息-您很可能必须编写自己的库才能与硬件交互。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM