【问题标题】:Given a hard disk letter, how can I get the manufacturer serial number?给定一个硬盘盘符,我怎样才能得到制造商的序列号?
【发布时间】:2017-01-19 17:09:25
【问题描述】:

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

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

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

我对暗示中间步骤的解决方案持开放态度,例如“首先您需要从驱动器号获取设备 ID,然后您可以使用该值来查询 WMI”(当然最好使用 WinAPI函数来避免 WMI 调用的负面性能影响),问题是我不知道如何像引用的那样进行所需的检索,因为 Volume Management Functions 没有'似乎没有一个有用的功能来从驱动器号检索磁盘信息,只有 GetVolumeInformation 函数,我只能检索系统的串行信息,这是我不能用来在 WMI 上进行查询的值,以及磁盘标题,我也不能使用,因为多个磁盘可能具有相同的标题...

【问题讨论】:

  • 驱动器号标识卷。卷可以跨越多个物理驱动器。
  • 另外,一个驱动器上可以有多个卷...

标签: c# .net vb.net winapi wmi


【解决方案1】:

没有简单的方法可以根据卷号获取硬盘驱动器的序列号 - 例如以防万一或 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 就没有简单的方法来获取硬件信息 - 您很可能必须编写自己的库来与硬件交互。

【讨论】:

    猜你喜欢
    • 2021-08-17
    • 1970-01-01
    • 2021-03-24
    • 2016-08-28
    • 2022-11-26
    • 2023-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多