【问题标题】:Is the hard-drive serial number with WMIService CHANGEABLE?带有 WMIService 的硬盘驱动器序列号是否可以更改?
【发布时间】:2023-03-23 13:26:01
【问题描述】:

我使用硬盘驱动器序列号检查来注册我的产品。

但我发现有时它正在改变。 客户激活产品仅 2 周后,硬盘的 Serial-Num 就发生了变化。

这个属性可以改变吗?如果是这样,它是如何改变的以及为什么改变?

这是我在 VB 中使用的代码:

Dim WMIService As Object, Items As Object, SubItems As Object, temp
    
Set WMIService = GetObject("winmgmts:\\" & "." & "\root\cimv2")
    Set Items = WMIService.ExecQuery("Select * from Win32_PhysicalMedia", , 48)
    For Each SubItems In Items
        temp = SubItems.SerialNumber
        If LenB(temp) Then Exit For
    Next

和我在 C# 中使用的一样

using System.Management;

public string GetHDDSerial()
{
    ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");

    foreach (ManagementObject wmi_HD in searcher.Get())
    {
        // get the hardware serial no.
        if (wmi_HD["SerialNumber"] != null)
            return wmi_HD["SerialNumber"].ToString();
    }

    return string.Empty;
}

【问题讨论】:

  • 我说的是管理员用户,相同的用户,相同的电脑,相同的硬盘,但更改了序列号。
  • 当然,也有明显的解释:硬盘序列号变了是因为硬盘变了。也许它有缺陷,用户更换了它,也许用户用更大或更快的更换了它。也许用户正在使用可移动媒体并定期交换它们。
  • 请查看第一条评论
  • 如果用户故意更改,他们可以raymond.cc/blog/…,但我不确定它是否可以自己更改
  • 不确定选择语句的顺序,但如果您有多个驱动器,您的代码将返回第一个具有序列号的驱动器。也许用户有多个驱动器,或者添加了一个闪存驱动器 (USB)?

标签: c# vba


【解决方案1】:

感谢FunThomas 的评论,在与我的客户进行了一些故障排除后,我发现他有时会使用外部驱动器来获得更多空间,并且当插入外部驱动器时 - 我得到了不同硬盘序列号。

现在我想出了如何从当前驱动器号中获取序列号。

这是VB的代码:

Dim WMIService As Object, DiskDrives As Object, Drive As Object, DiskPartitions As Object, Partition As Object, SerialNumber, currentDrive
currentDrive = Environ("HomeDrive")
Set WMIService = GetObject("winmgmts:\\" & "." & "\root\cimv2")
Set DiskPartitions = WMIService.ExecQuery("ASSOCIATORS OF {Win32_LogicalDisk.DeviceID='" & currentDrive & "'} WHERE ResultClass=Win32_DiskPartition")

For Each Partition In DiskPartitions
Set DiskDrives = WMIService.ExecQuery("ASSOCIATORS OF {Win32_DiskPartition.DeviceID='" & Partition.DeviceID & "'} WHERE ResultClass=Win32_DiskDrive")
    For Each Drive In DiskDrives
        Debug.Print "Caption: " & Drive.Caption, "Description: " & Drive.Description, "Name: " & Drive.Name, "Model: " & Drive.Model, "SerialNumber: " & Drive.SerialNumber
        SerialNumber = Drive.SerialNumber
    Next
Next

【讨论】:

    猜你喜欢
    • 2014-10-11
    • 2011-08-06
    • 2011-11-25
    • 2013-02-18
    • 1970-01-01
    • 1970-01-01
    • 2014-06-03
    • 2019-12-24
    • 2020-07-15
    相关资源
    最近更新 更多