主板ID -WMI C++ -可靠吗? 我在C++类中使用WMI来检索主板的序列号。 查询如下: "SELECT SerialNumber FROM Win32_BaseBoard"

主板ID -WMI C++ -可靠吗? 我在C++类中使用WMI来检索主板的序列号。 查询如下: "SELECT SerialNumber FROM Win32_BaseBoard",c++,windows,wmi,identifier,motherboard,C++,Windows,Wmi,Identifier,Motherboard,我自己编写了查询,因此我不确定它是否正确,但它确实返回了一些信息: /9637CW1/CN1296131Q0BA8/。返回的字符串在多台计算机上的格式相同,因此我假设查询是正确的 我的问题是:我真的在这里查询主板序列号吗?因为我看到了另一个名为Win32_主板设备的类,它没有序列号属性。使用它作为计算机标识符是一个好主意吗?我目前正在使用HDD序列号,但我认为使用更可靠组件(如主板)的序列号会更好,因为磁盘比主板更容易更换 谢谢:我发现,根据制造商和分销渠道的不同,检索主板的序列号可能会产生非常

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

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


谢谢:

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

由于序列号位于基于制造商的特定域或名称空间内,不同制造商可能使用相同的序列号,因此您确实需要同时了解制造商和序列号,尽管这是不可能的

一些销售点终端的序列号是一致的,如果主板出现故障,更换主板的部分程序是将更换主板的序列号设置为被更换主板的序列号。这意味着某些人可能拥有与LAN NIC MAC欺骗类似的多个设备的相同序列号

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

查看Win32_主板设备的文档并尝试一些属性,那里似乎没有太多有用的数据,当然也没有类似于唯一序列号的数据

在戴尔Windows XP笔记本电脑上,当我运行一个C++应用程序时,使用WMI查看几个不同属性的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
在这台笔记本电脑的底部,我看到一个贴纸,上面有条形码和打印,上面写着服务标签49495G1,所以对于这台笔记本电脑,检索到的序列号是服务标签标识符。我可以访问Dell网站并在支持区域中查找此服务标签

一种新的销售点,用于用POS准备好的Windows 7版本转售,它提供了与C++ C++ WMI应用程序相同的输出。这类似于我自己用购买的部件构造的PC的输出,该部件也没有运行Windows 8.1的PC的序列号

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

也许它打印在主板上,因此您可以将该数字与wmi返回值进行比较。@Bgie感谢您的回答。确实有一个带有PPID的标签,数字以CN某物开头,但它与我通过编程检索的标签不匹配。PPID是我主板的序列号吗?如果是,信任哪一个?标签或WMI?不可靠,不应将其用作唯一的系统标识符。由制造商决定是否填写该字段。他们中的很多人都没有。如果你的应用程序为空,你会怎么做?我想应该回退到HDD序列。HDD序列可能不容易获取,或者在RAID配置中不可靠