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

Posted

技术标签:

【中文标题】主板 ID - WMI C++ - 可靠吗?【英文标题】:Motherboard ID - WMI C++ - Reliable? 【发布时间】:2014-07-03 17:48:33 【问题描述】:

我在 C++ 类中使用 WMI 来检索主板的序列号。 查询如下:

"SELECT SerialNumber FROM Win32_BaseBoard"

我自己编写了查询,所以我不确定它是否正确,但它确实返回了一些东西: /9637CW1/CN1296131Q0BA8/。返回的字符串在多台计算机上的格式相同,所以我假设查询是正确的。

我的问题是:我真的在这里查询主板序列号吗?因为我看到了另一个名为"Win32_MotherboardDevice" 的类(它没有“序列号”属性)。将其用作计算机标识符是否是个好主意?我目前使用的是硬盘序列号,但我认为使用更可靠的组件(例如主板)的序列号会更好,因为磁盘比主板更容易更换。

谢谢你:)

【问题讨论】:

也许它印在主板上,所以你可以将该数字与 wmi 返回值进行比较。 @Bgie 感谢您的回答。确实有一个带有“PPID”的标签,其数字以 CN 开头,但它与我以编程方式检索的不匹配。 PPID 是我主板的序列号吗?如果是的话,该信任哪一个?贴纸还是 WMI? 可靠,您应该将它用作唯一的系统标识符。制造商是否填写该字段取决于制造商。其中很多都没有。如果它是空白的,你的应用会做什么? 我猜是回退到硬盘序列号。 HDD 串行在 RAID 配置上可能不容易获得或可靠 【参考方案1】:

我发现,根据制造商和分销渠道的不同,检索主板的序列号会导致非常不同的结果。一些向最终客户销售并具有良好的设备维修支持流程的制造商将一致地设置 WMI 的序列号信息。其他提供 OEM 类型设备的制造商将依赖 OEM 设置序列号。

由于序列号位于基于制造商的特定域或名称空间内,不同制造商使用相同序列号的可能性虽然不大,但您确实需要知道制造商和序列号。

有些销售终端的序列号是一致的,在主板出现故障的情况下,更换主板的部分程序是将更换板的序列号设置为被更换的板的序列号.这意味着某人可能对几台设备拥有相同的序列号,类似于进行 LAN NIC MAC 欺骗。

WMI 查询将对提供的序列号产生影响。除了序列号之外,还有一个资产标签属性。

查看Win32_MotherboardDevice 的文档并尝试了一些属性,那里似乎没有太多有用的数据,当然不是类似于唯一序列号的东西。

在装有 Windows XP 的戴尔笔记本电脑上,当我运行一个使用 WMI 的 C++ 应用程序来查看针对几个不同属性的几个不同 Select WMI 查询的结果时,我得到以下结果:

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 运行的是 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

【讨论】:

以上是关于主板 ID - WMI C++ - 可靠吗?的主要内容,如果未能解决你的问题,请参考以下文章

最后插入id方法可靠吗

如何在 C#(无 WMI)中获取硬盘序列号?

经过产品级考验iTOP-IMX6开发利器_全开源高可靠

在android中使用JDBC安全可靠吗?

在不使用 WMI 的情况下访问主板信息

字节一面:HTTPS 一定安全可靠吗?