主板ID - WMI C++ - 可靠性?

5
我将使用C++类中的WMI来获取我的主板序列号。 查询如下:
"SELECT SerialNumber FROM Win32_BaseBoard"

我自己编写了查询,所以我不能确定它是否正确,但确实返回了一些内容: / 9637CW1 / CN1296131Q0BA8 / 。返回的字符串在多台计算机上具有相同的格式,因此我认为查询是正确的。
我的问题是:我真的在这里查询主板序列号吗?因为我看到另一个名为"Win32_MotherboardDevice"的类(没有“序列号”属性)。将其用作计算机标识符是否是个好主意?我目前正在使用HDD序列号,但我想使用更可靠组件(如主板)的序列号可能更好,因为磁盘更有可能被更换而不是主板。
谢谢 :)

也许它被印在主板上,因此您可以将该数字与WMI返回值进行比较。 - Bgie
@Bgie 感谢您的回答。确实有一个带有“PPID”的贴纸,上面有以CN开头的数字,但它与我通过编程检索到的不匹配。 PPID是我的主板序列号吗?如果是,应该相信哪一个?贴纸还是WMI? - Virus721
1
不可靠,你不应该将其用作唯一的系统标识符。是否填写该字段取决于制造商。其中很多制造商并没有填写。如果为空,你的应用程序会怎么做? - Cody Gray
我猜应该是回退到硬盘序列号。 - Virus721
硬盘序列号在RAID配置中可能不容易获取或不可靠。 - Pavel Holoborodko
最接近的数据是Win32_MotherboardDevice,它返回文本Motherboard作为我的设备ID(而Win32_BaseBoardSerialNumber返回一个看起来像序列号的字符串)。因此,BaseBoard看起来是最好的选择(顺便说一句,BaseBoard的文档页面指出,“Win32_BaseBoard WMI类代表一个基板,也就是所谓的motherboard或系统主板”)。 - Veverke
1个回答

3
我发现根据制造商和销售渠道,检索主板序列号的结果可能会有很大不同。一些直接向最终客户销售并具有良好设备维修支持流程的制造商会在WMI中一致设置序列号信息。而提供OEM类型设备的其他制造商则取决于OEM来设置序列号。
由于序列号基于制造商的特定域或命名空间,因此不同制造商可能使用相同的序列号,尽管这种情况很少见,但你确实需要知道制造商和序列号。
一些销售终端在序列号方面是一致的,并且在更换故障主板时,将替换板的序列号设置为被替换板的序列号是更换程序的一部分。这意味着某人可以拥有几个设备具有相同的序列号,类似于进行LAN NIC MAC欺骗。
WMI查询将影响提供的序列号。除了序列号外,还有一个资产标记属性。
查看Win32_MotherboardDevice文档并尝试几个属性后,似乎没有太多有用的数据,肯定没有类似唯一序列号的东西。
在运行使用WMI查看几个不同属性的Select WMI查询结果的C++应用程序的Dell笔记本电脑上,我得到了以下结果:
Connected to ROOT\CIMV2 WMI namespace

Query for SELECT * FROM Win32_SystemEnclosure
  SMBIOS SerialNumber: 49495G1
  SMBIOS Name: System Enclosure
  SMBIOS SMBIOSAssetTag:
  SMBIOS Manufacturer: Dell Inc.

Query for SELECT * FROM Win32_BaseBoard
  SMBIOS SerialNumber: .49495G1.CN486438441035.
  SMBIOS Product: 0UY141
  SMBIOS Name: Base Board
  SMBIOS Manufacturer: Dell Inc.

Query for SELECT * FROM Win32_BIOS
  SMBIOS SerialNumber: 49495G1
  SMBIOS Name: Phoenix ROM BIOS PLUS Version 1.10 A10
  SMBIOS Manufacturer: Dell Inc.

Query for SELECT * FROM Win32_ComputerSystem
  SMBIOS Name: CIT-31204E1FF03
  SMBIOS Manufacturer: Dell Inc.

Query for SELECT * FROM Win32_ComputerSystemProduct
  SMBIOS Name: Latitude D830
  SMBIOS IdentifyingNumber: 49495G1
  SMBIOS UUID: 4C4C4544-0039-3410-8039-B4C04F354731

在这台笔记本电脑的底部,我看到一个带有条形码的贴纸,上面印着“SERVICE TAG 49495G1”,因此对于这台笔记本电脑,检索到的序列号是服务标识符。我可以访问戴尔网站,在支持区域查找此服务标记。
一台新的销售点终端用于POS Ready 7版本的Windows,并使用相同的C++ WMI应用程序提供以下输出。这类似于我从购买的零件构建的PC所提供的输出,该PC也没有序列号。该PC正在运行Windows 8.1。
Connected to ROOT\CIMV2 WMI namespace

Query for SELECT * FROM Win32_SystemEnclosure
  SMBIOS SerialNumber: None
  SMBIOS Name: System Enclosure
  SMBIOS SMBIOSAssetTag: None
  SMBIOS Manufacturer: To Be Filled By O.E.M.

Query for SELECT * FROM Win32_BaseBoard
  SMBIOS SerialNumber: None
  SMBIOS Product: EIN70-SAM
  SMBIOS Name: Base Board
  SMBIOS Manufacturer: INTEL Corporation

Query for SELECT * FROM Win32_BIOS
  SMBIOS SerialNumber: None
  SMBIOS Name: BIOS Date: 10/15/13 20:06:15 Ver: 04.06.05
  SMBIOS Manufacturer: American Megatrends Inc.

Query for SELECT * FROM Win32_ComputerSystem
  SMBIOS Name: GENPOSA-1
  SMBIOS Manufacturer: To be filled by O.E.M.

Query for SELECT * FROM Win32_ComputerSystemProduct
  SMBIOS Name: EIN70-SAM
  SMBIOS IdentifyingNumber: None
  SMBIOS UUID: 03000200-0400-0500-0006-000700080009

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接