跳转到主要内容
HWID Checker

如何在 CMD 和 PowerShell 中查看 HWID 序列号:Windows 硬件 ID 详解

在 CMD 和 PowerShell 中查看 HWID 序列号,包括 SMBIOS UUID、主板、BIOS、硬盘、内存、CPU ProcessorId、MAC 和 MachineGuid,并了解示例输出及各项数值会在什么情况下发生变化。

HWID Checker · 2026年9月4日 · 6 分钟阅读

不存在一条命令可以直接显示“你的 HWID”。在打开命令行窗口开始输入之前,首先要明确这一点。Windows 并不存储某个唯一的硬件 ID,而是提供十余种彼此独立的标识符:固件 UUID、主板序列号、BIOS 序列号、每块硬盘的序列号、每根内存条的序列号、CPU 特征值、每个网络适配器的 MAC 地址,以及若干由软件生成的 GUID。凡是提到“你的 HWID”的程序,都会自行选取其中一部分数值,再按自己的方式组合。

因此,用户搜索如何在 CMD 中查看 HWID 序列号时,真正需要的是一份清单:有哪些序列号、分别用什么命令读取、输出是什么样,以及哪些操作会让数值发生变化。本文正是这样一份指南。内容同时涵盖传统命令提示符(cmd.exe)和 PowerShell,因为在当前版本的 Windows 中,两者都需要用到:一些旧 CMD 命令依赖 wmic,而微软已将其从 Windows 11 的默认安装中移除,官方支持的替代方案是 PowerShell cmdlet(命令),即专为 PowerShell 设计的轻量命令。

本文所有操作均为只读查询。这些命令只读取 Windows 和固件已经公开的数据;不会修改、随机化或伪造任何标识符。截至 2026 年 9 月 4 日,文中命令已根据微软有关 Windows 10 22H2 和 Windows 11 24H2/25H2 的文档核对。

快速查询:完整命令表

如果只想查命令,直接看下表即可。每一行对应一种标识符。“旧版 CMD”一列保留了旧式 wmic 写法,方便对照论坛中的历史内容;现在应优先使用 PowerShell 一列的命令。

标识符存储位置PowerShell(推荐)旧版 CMD(Windows 11 上可能不存在)
SMBIOS system UUID(系统 UUID)主板固件(Get-CimInstance Win32_ComputerSystemProduct).UUIDwmic csproduct get uuid
系统序列号固件(OEM)(Get-CimInstance Win32_ComputerSystemProduct).IdentifyingNumberwmic csproduct get identifyingnumber
BIOS 序列号固件(Get-CimInstance Win32_BIOS).SerialNumberwmic bios get serialnumber
主板序列号基板固件表(Get-CimInstance Win32_BaseBoard).SerialNumberwmic baseboard get serialnumber
机箱序列号机箱固件表(Get-CimInstance Win32_SystemEnclosure).SerialNumberwmic systemenclosure get serialnumber
物理硬盘序列号硬盘固件Get-PhysicalDisk | Select-Object FriendlyName, SerialNumberwmic diskdrive get model,serialnumber
卷序列号(非硬件)文件系统头(Get-CimInstance Win32_LogicalDisk -Filter "DeviceID='C:'").VolumeSerialNumbervol C:
内存模块序列号DIMM SPD 芯片Get-CimInstance Win32_PhysicalMemory | Select-Object DeviceLocator, SerialNumberwmic memorychip get devicelocator,serialnumber
CPU ProcessorId(处理器标识)CPUID 指令(Get-CimInstance Win32_Processor).ProcessorIdwmic cpu get processorid
MAC 地址网络适配器固件/驱动程序Get-NetAdapter | Select-Object Name, MacAddress, Statusgetmac /v
显示器序列号(EDID,扩展显示标识数据)显示器固件参见显示器一节无
MachineGuid(Windows 安装实例标识)注册表,由 Windows 安装时设置(Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Cryptography').MachineGuidreg query HKLM\SOFTWARE\Microsoft\Cryptography /v MachineGuid
Windows 产品 ID注册表/许可证(Get-CimInstance Win32_OperatingSystem).SerialNumberwmic os get serialnumber
ComputerHardwareIds(计算机硬件 ID 集合)注册表,由 SMBIOS 派生(Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\SystemInformation').ComputerHardwareIdsreg query "HKLM\SYSTEM\CurrentControlSet\Control\SystemInformation" /v ComputerHardwareIds

下文会逐项说明:这个值是什么、正常结果和异常结果分别是什么样,以及哪些操作会改变它。如果只准备阅读一个章节,请看哪些序列号实际构成“HWID”。

CMD 还是 PowerShell?同一个命令行窗口中的两种语言

cmd.exe 和 PowerShell 都是文本控制台。在 Windows 11 中,两者通常也都运行在同一个 Windows 终端应用内,因此很容易让人误以为命令可以混用。实际并非如此。

  • cmd.exe 运行批处理风格的命令,例如 dir、reg、vol、getmac、systeminfo,以及过去常用的 wmic。它没有对象管道,输出只是纯文本。
  • PowerShell(Windows 自带 Windows PowerShell 5.1;PowerShell 7 需单独安装)运行 Get-CimInstance、Get-PhysicalDisk 等 cmdlet(命令)。输出是对象,可以使用 Select-Object 筛选。

这一区别对查询 HWID 很重要,原因在于 wmic.exe。几乎所有 2024 年以前编写的“在 CMD 中查看 HWID”教程,都会使用 wmic csproduct get uuid、wmic bios get serialnumber 等命令。WMIC(WMI 命令行工具)于 2016 年被弃用,后来成为 Windows 11 24H2 中默认禁用的可选“按需功能”,并正在被彻底移除。在全新安装的 Windows 11 上,通常会看到:

'wmic' is not recognized as an internal or external command,
operable program or batch file.

底层 WMI(Windows Management Instrumentation,Windows 管理规范)类仍然存在,例如 Win32_BIOS、Win32_BaseBoard 等;消失的只是旧命令行客户端。因此,本文所有 PowerShell 命令均使用 Get-CimInstance:它通过受支持的 CIM(Common Information Model,通用信息模型)接口读取相同的类。如果现有脚本仍离不开 wmic,请参阅 WMIC 故障排查指南,其中详细介绍了迁移方法。

使用 PowerShell 命令并不需要退出 CMD。 本文中的任何 PowerShell 单行命令都可以从命令提示符或 .bat 文件中执行,只需按以下方式封装:

powershell -NoProfile -Command "(Get-CimInstance Win32_BaseBoard).SerialNumber"

我们的可下载 BAT 脚本采用的正是这种方式:它是一个纯文本批处理文件,针对每种标识符调用一次 PowerShell,因此运行前可以逐行查看内容。

是否需要管理员权限? 本文所有操作都不需要。读取 SMBIOS 表、硬盘序列号、内存 SPD 数据、CPUID 和相关注册表项,在标准用户会话中均可完成。如果命令返回 Access denied,基本可以确定你是在查询远程计算机,或受到企业策略限制,而不是遇到了普通的本机权限问题。

SMBIOS system UUID(系统 UUID)

它是什么。 这是一个 128 位标识符,由主板厂商写入 SMBIOS System Information(系统信息)表(类型 1)。在没有进一步限定的情况下,人们所说的“HWID”最常指这个值,因为它位于固件层,重装操作系统后仍会保留,而且读取方便。

(Get-CimInstance Win32_ComputerSystemProduct).UUID

典型输出:

4C4C4544-0034-5A10-8047-B8C04F4E3232

如何理解这个值。 在戴尔计算机上(如上例),UUID 的一部分由服务标签派生,因此两台戴尔设备不会使用同一个 UUID。许多消费级主板则会在出厂时写入一个随机值。无论哪种情况,它都不是秘密信息——任何拥有本机访问权限的人都能读取,也没有经过加密。

异常结果及其含义。

  • 00000000-0000-0000-0000-000000000000 或 FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF——固件没有填写该字段。这种情况常见于部分低端主板、更换过 BIOS 芯片的计算机,以及采用精简 SMBIOS 配置的某些虚拟机。
  • 03000200-0400-0500-0006-000700080009——参考 BIOS 中一个广为人知的默认占位值。它并不唯一,有数千块主板都会报告这个值。
  • 空白——通常表示虚拟化平台未提供 UUID。

什么会改变它。 更换主板。正常刷新 BIOS 通常会保留该值,但某些主板在完全重置 CMOS/NVRAM 后,或服务中心更换主板后,可能会生成新值。重装 Windows 不会改变它。在虚拟机中,该值由虚拟机监控程序设置;克隆虚拟机时是否重新生成,则取决于具体平台。

查询这个类时还可以读取 IdentifyingNumber,即 OEM 系统序列号,也就是笔记本电脑底部标签上印刷的同一串字符:

Get-CimInstance Win32_ComputerSystemProduct |
  Select-Object Vendor, Name, IdentifyingNumber, UUID

BIOS 序列号

它是什么。 这是通过 Win32_BIOS 类读取的、由 SMBIOS System Information 表报告的序列号。在品牌整机和笔记本电脑上,它几乎总是与上文的 IdentifyingNumber 相同。对于自行组装的台式机,它取决于主板厂商写入了什么,而这个值往往没有实际用途。

(Get-CimInstance Win32_BIOS).SerialNumber

以下是从有效到无效的典型输出:

5CG1234XYZ                    ← HP laptop, real serial
To Be Filled By O.E.M.        ← common on ASRock/ASUS retail boards
Default string                 ← common on MSI/Gigabyte retail boards
System Serial Number           ← another placeholder

后三种并不是报错。零售主板本来就是供其他人组装整机的,因此主板厂商会将“系统”序列号留给系统集成商填写,而实际通常无人填写。任何依赖 BIOS 序列号作为唯一键的软件,都会把所有这类计算机视为同一台设备;这确实会造成“硬件重复”误报。

什么会改变它。 与 UUID 相同:更换主板。正常情况下,更新 BIOS 不会改变它。

主板(baseboard)序列号

它是什么。 这是 SMBIOS Baseboard(基板)表(类型 2)中的序列号。与 BIOS/系统序列号不同,零售主板通常会填写这一项,因为它标识的是主板本身,而不是组装后的整机。

Get-CimInstance Win32_BaseBoard |
  Select-Object Manufacturer, Product, SerialNumber

典型输出:

Manufacturer                 Product            SerialNumber
------------                 -------            ------------
ASUSTeK COMPUTER INC.        ROG STRIX B650-A   230412345678901

异常结果。 To Be Filled By O.E.M.、Default string、None,或全部为零的序列号。相比 BIOS 序列号,这种情况不算常见,但在非常便宜的主板上仍会出现;某些技嘉主板在更新固件前也会将序列号显示为 Default string。

什么会改变它。 只有更换主板才会改变。这也是反作弊系统和许可证系统通常最看重主板序列号与 SMBIOS UUID 的原因。

机箱(系统外壳)序列号

它是什么。 这是 SMBIOS Chassis(机箱)表(类型 3)中的序列号。在笔记本电脑和 OEM 台式机上,它通常与系统序列号一致。在自行组装的电脑上,它几乎总是占位值,因为机箱没有固件,主板厂商也无从知道用户购买了哪款机箱。

(Get-CimInstance Win32_SystemEnclosure).SerialNumber

可以将其视为辅助值。本文之所以收录,是因为某些 HWID 工具会读取它;看到 Default string 时不必意外。

物理硬盘序列号,以及为什么 vol 查到的不是它

这部分最容易混淆,因为 Windows 提供了两种完全不同的值,而人们都将其称为“硬盘序列号”。

硬件序列号(通常需要查这个)

每块 SSD 和 HDD 都有由厂商分配并存储在硬盘固件中的序列号。该号码印在硬盘标签上,也会通过 SATA 或 NVMe Identify 命令报告。

在当前版本的 Windows 中,最可靠的读取方式是使用 Storage 模块:

Get-PhysicalDisk | Select-Object DeviceId, FriendlyName, MediaType, SerialNumber

典型输出:

DeviceId FriendlyName                 MediaType SerialNumber
-------- ------------                 --------- ------------
0        Samsung SSD 990 PRO 2TB      SSD       S6Z2NJ0T123456A
1        WDC WD40EZAZ-00SF3B0         HDD       WD-WX12D34ABCDE

传统 WMI 类也可以使用,旧版 wmic diskdrive 命令调用的正是这个类:

Get-CimInstance Win32_DiskDrive | Select-Object Model, SerialNumber

实际使用中会遇到的特殊情况。

  • 开头或结尾有空格。 某些驱动程序会用空格将序列号填充到固定宽度。比较前应使用 .Trim(),否则可能出现无意义的不匹配。
  • 旧系统上的十六进制字节交换。 在 Windows 7 及更早版本中,Win32_PhysicalMedia 返回的是十六进制序列号,其中每对字符的顺序会被互换。当前版本 Windows 返回正常字符串;但如果正在与多年前记录的值比较,这就是旧值看起来顺序混乱的原因。
  • USB、RAID 或部分 NVMe 硬盘返回空白。 RAID 控制器后方的硬盘向系统报告的是控制器创建的虚拟磁盘,而不是物理硬盘;USB 硬盘盒有时也会隐藏内部硬盘的序列号。Get-PhysicalDisk 在这方面通常优于 Win32_DiskDrive,但两者都无法穿透硬件 RAID 查看物理盘。
  • 虚拟机。 虚拟机监控程序会分配合成序列号;重新创建虚拟磁盘后,该值会发生变化。

什么会改变它。 只有更换硬盘。格式化、重新分区、克隆到新硬盘(克隆盘使用新硬盘自身的序列号)和重装 Windows 都不会改变它,更新固件也不会。

卷序列号(通常不是需要的值)

vol C:
 Volume in drive C is Windows
 Volume Serial Number is 8A3F-1C2B

这个 8 位十六进制数是在格式化卷时写入文件系统头的。它不存储在硬盘固件中,与硬件本身无关。重新格式化分区就会得到新值;如果逐扇区克隆硬盘,克隆盘则会保留与原盘相同的卷序列号。

较早的许可证机制(部分来自 20 世纪 90 年代和 21 世纪初)确实会绑定 C: 卷序列号,因此 HWID 相关讨论中至今仍会提到它。现代反作弊和 DRM 通常会忽略这个值,原因正是它很容易改变。如果某个工具将类似 8A3F-1C2B 的值显示为“硬盘序列号”,它读取的是卷序列号,而不是物理硬盘序列号。

如需在脚本中使用,对应的 PowerShell 命令如下:

(Get-CimInstance Win32_LogicalDisk -Filter "DeviceID='C:'").VolumeSerialNumber

该命令返回不带连字符的 8A3F1C2B。

内存模块序列号

它是什么。 每根内存模块都有一颗 SPD(Serial Presence Detect,串行存在检测)芯片,其中存储部件编号、厂商信息,并且大多数模块还存有序列号。Windows 通过 Win32_PhysicalMemory 提供这些数据。

Get-CimInstance Win32_PhysicalMemory |
  Select-Object DeviceLocator, Manufacturer, PartNumber, SerialNumber

典型输出:

DeviceLocator Manufacturer PartNumber           SerialNumber
------------- ------------ ----------           ------------
DIMM_A2       Corsair      CMK32GX5M2B5600C36   00000000
DIMM_B2       Corsair      CMK32GX5M2B5600C36   00000000

请注意其中的序列号。消费级内存返回 00000000、空白,或每根内存都返回相同数值的情况非常常见。有些厂商不写入序列号,有些主板则不会通过 SMBIOS 传递 SPD 序列号字段。服务器和工作站内存更有可能报告真实且唯一的序列号。

什么会改变它。 增加、移除或更换内存模块。更改 XMP/EXPO 配置不会改变它。还要注意,DeviceLocator(插槽名称)由主板决定;即使序列号本身不变,将同一组内存换到其他插槽也会改变插槽与序列号之间的对应关系。一些设计简单的 HWID 实现容易在这里出错。

CPU ProcessorId:它并不是序列号

它是什么。 Windows 根据 CPUID 指令生成的 16 位十六进制值,由处理器特征签名(系列、型号、步进)和功能标志组成。

Get-CimInstance Win32_Processor | Select-Object Name, ProcessorId
Name                                       ProcessorId
----                                       -----------
AMD Ryzen 7 7800X3D 8-Core Processor       178BFBFF00A60F12

这里有一点几乎所有 HWID 教程都会说错:ProcessorId 并非每颗芯片独有。 只要步进和微代码可见的功能集相同,每颗 Ryzen 7 7800X3D 都会返回相同的 178BFBFF00A60F12。出于隐私方面的反对意见,英特尔在 2000 年 Pentium III 之后就从 CPUID 中移除了逐芯片处理器序列号(PSN);AMD 则从未提供过这种序列号。如今 Windows 报告的是型号标识,而不是单颗芯片标识。

这并不代表它毫无用处。在复合哈希中,它仍是一个稳定的组成部分:除非将 CPU 更换为其他型号,否则不会改变,也有助于区分计算机的整体配置。只是单独使用时,它无法从所有采用同款处理器的计算机中识别出某一台设备。

什么会改变它。 将 CPU 更换为其他型号或步进。理论上,改变所报告功能标志的微代码更新也可能改动低位,但实际很少发生。

MAC 地址

它是什么。 写入每个网络适配器的 48 位地址,以六组十六进制数显示。有线以太网、Wi-Fi 和蓝牙适配器各自拥有独立地址。

下面这条纯 CMD 命令目前仍然有效,值得记住:

getmac /v /fo list

PowerShell 可以在同一视图中显示适配器名称和状态:

Get-NetAdapter | Select-Object Name, InterfaceDescription, MacAddress, Status
Name      InterfaceDescription                     MacAddress        Status
----      --------------------                     ----------        ------
Ethernet  Realtek Gaming 2.5GbE Family Controller  04-42-1A-9B-3C-7D Up
Wi-Fi     Intel(R) Wi-Fi 6E AX211 160MHz           A0-B1-C2-D3-E4-F5 Up

对 HWID 有影响的特殊情况。

  • 虚拟适配器。 VPN 客户端、Hyper-V、VMware、WSL2 和 Docker 都会添加各自带有 MAC 地址的虚拟适配器。这些适配器会随软件安装或卸载而出现、消失,因此包含“所有 MAC 地址”的 HWID 并不稳定。可以使用 Get-NetAdapter -Physical 筛选物理适配器。
  • 随机硬件地址。 Windows 10 和 11 可以按网络随机化 Wi-Fi MAC(设置 → 网络和 Internet → Wi-Fi → 随机硬件地址)。启用后,同一个 Wi-Fi 适配器在不同网络中显示的 MAC 会有所不同。有线适配器不受此设置影响。
  • 管理员可修改。 大多数驱动程序都允许在设备管理器 → 高级 → 网络地址中覆盖 MAC。这是正规且有文档说明的功能,并非破解手段;也正因如此,单独使用 MAC 作为标识符并不可靠。

什么会改变它。 更换适配器、启用 Wi-Fi 随机化、设置驱动程序覆盖值,或添加/移除虚拟化软件(针对虚拟适配器)。

通过 EDID 读取显示器序列号

大多数 HWID 指南都会略过这一项,但某些反作弊系统确实会读取,因此完整清单应当包含它。每台显示器都会向显卡发送一块 EDID(Extended Display Identification Data,扩展显示标识数据),用于说明自身信息;其中包含厂商代码,通常也包含序列号。

Get-CimInstance -Namespace root\wmi -ClassName WmiMonitorID | ForEach-Object {
  [PSCustomObject]@{
    Manufacturer = -join [char[]]($_.ManufacturerName -ne 0)
    Model        = -join [char[]]($_.UserFriendlyName -ne 0)
    Serial       = -join [char[]]($_.SerialNumberID -ne 0)
  }
}
Manufacturer Model          Serial
------------ -----          ------
DEL          DELL S2721DGF  9X2Y3Z4

这些字段是以零填充的字节数组,因此上述代码片段会将其转换为字符并丢弃零值。有些显示器(尤其是低价型号)会报告序列号 0,或整个生产批次共用的同一个值。

什么会改变它。 更换显示器。更换线缆或端口不会改变。

MachineGuid:更换硬件后仍保留的软件 ID

它是什么。 这是 Windows 安装时生成并存储在 HKLM\SOFTWARE\Microsoft\Cryptography\MachineGuid 中的 GUID。它不是硬件信息。MachineGuid 是 Windows 软件中使用最广泛的“计算机标识符”,因为读取非常方便,而且无论更换什么硬件组件,它都会保持不变。

纯 CMD:

reg query HKLM\SOFTWARE\Microsoft\Cryptography /v MachineGuid
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography
    MachineGuid    REG_SZ    7e3a1b2c-4d5e-4f60-9a7b-8c9d0e1f2a3b

PowerShell:

(Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Cryptography').MachineGuid

什么会改变它。 重装 Windows(全新安装;就地升级或保留注册表配置单元的“重置”不算)。将磁盘映像还原到另一台计算机时,相同的 MachineGuid 会随映像进入新硬件。因此,采用映像部署的组织有时会发现,仅以此值作为键的软件将数百台计算机识别为“同一台”。

MachineGuid 会在重装系统时改变,却不会随硬件更换而改变,其表现与固件 UUID 正好相反。严谨的 HWID 实现会同时使用两者,从而避免仅凭一次重装或一次组件更换就将设备认定为“新”计算机。

Windows 产品 ID

它是什么。 这是设置 → 系统 → 系统信息中显示的 xxxxx-xxxxx-xxxxx-AAOEM 格式字符串。它标识的是 Windows 许可证渠道和安装实例,而不是硬件。

(Get-CimInstance Win32_OperatingSystem).SerialNumber

之所以在本文列出,是因为很多“查看 HWID”的批处理文件都包含 wmic os get serialnumber,用户容易误以为它是硬件序列号。事实并非如此;重装系统后它会变化,有时更改版本或重新激活后也会变化。

ComputerHardwareIds:微软自己的硬件 ID

这一项在驱动开发领域之外很少被提及,却是 Windows 中最接近官方“HWID”的内容。

Windows 更新使用一组称为 Computer Hardware IDs(计算机硬件 ID)的 GUID,将固件和驱动程序包定向提供给特定系统。这些 GUID 由 SMBIOS 多个字段的不同组合经哈希计算得出,包括厂商、产品名称、SKU、产品系列、BIOS 厂商和版本、基板信息等,并存储在注册表中:

reg query "HKLM\SYSTEM\CurrentControlSet\Control\SystemInformation" /v ComputerHardwareIds
(Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\SystemInformation').ComputerHardwareIds
{a8b1c2d3-e4f5-5a6b-9c8d-7e6f5a4b3c2d}
{b9c2d3e4-f5a6-5b7c-8d9e-6f5a4b3c2d1e}
{c0d3e4f5-a6b7-5c8d-9e0f-5a4b3c2d1e0f}
...

这些值标识的是机型层级,而不是单台设备层级:两台型号相同且 BIOS 版本相同的笔记本会生成同一组值。不过,当其他数据看起来像占位符时,它们可以作为有效的合理性检查,因为这些值也派生自 HWID 工具会读取的固件字符串。如果多台计算机的每个 ComputerHardwareId 都相同,它们几乎可以确定还存在上文所述的 SMBIOS UUID 重复问题,或 To Be Filled By O.E.M. 占位值问题。

Windows Driver Kit 附带 ComputerHardwareIds.exe,它会显示同一列表,以及参与每项哈希计算的具体 SMBIOS 字段。需要精确了解系统公开了哪些固件字符串时,这个工具很有帮助。

哪些序列号实际构成“HWID”?

现在回到这两类搜索背后的核心问题。已经读取了十余种数值,其中哪一个才是 HWID?

没有任何一项单独是 HWID。反作弊系统、许可证服务器和设备管理工具所说的 HWID,通常是由上述多项数值计算出的哈希;每家厂商选择的字段和哈希方法各不相同。这就是我们编写 HWID 格式指南的原因,也解释了为什么不能直接比较不同程序生成的值。

根据公开文档和逆向分析文章,可以大致归纳出各项数值通常所占的权重:

标识符常见权重原因
主板序列号、SMBIOS UUID高重装操作系统后仍保留,仅更换主板时变化
物理硬盘序列号(系统盘)高稳定、唯一、读取成本低
MachineGuid中到高可识别重装,但克隆映像会共用该值
CPU ProcessorId中稳定,但同型号的每颗芯片都会共用
物理 MAC 地址低到中容易覆盖,Wi-Fi 还可随机化
内存序列号低消费级内存经常为零或重复
显示器 EDID 序列号低部分反作弊系统会读取,但外设经常更换
卷序列号很低每次格式化都会变化
BIOS/机箱序列号视情况而定OEM 整机上很可靠,零售主板上往往只是占位符

由此可以得出两个实际结论:

  1. 对于设计合理的系统,更换一个组件通常不会导致 HWID 改变。 大多数实现会容忍一定数量的字段变化,超过阈值后才将其视为新设备。更换 GPU 通常不会改变任何结果——本文没有列出 GPU,原因正是显卡不会通过 WMI 提供序列号。
  2. 重装 Windows 会改变 MachineGuid 和卷序列号,但不会改变任何固件层数值。 如果想知道为什么封禁或许可证锁定在重装后仍然存在,原因就在这里:主板、硬盘和 UUID 都没有变化。HWID 封禁指南进一步说明了这在实际使用中的含义。

一次读取所有信息

手动运行 14 条命令,偶尔一次并不麻烦。如果需要生成一份报告以便保存或日后比较,有以下三种只读方案。

可直接粘贴的 PowerShell 代码块。 下面的代码会显示高权重数值,并原样保留占位值,方便确认固件实际报告的内容:

$csp = Get-CimInstance Win32_ComputerSystemProduct
$bb  = Get-CimInstance Win32_BaseBoard
[PSCustomObject]@{
  SmbiosUuid    = $csp.UUID
  SystemSerial  = $csp.IdentifyingNumber
  BiosSerial    = (Get-CimInstance Win32_BIOS).SerialNumber
  BoardSerial   = $bb.SerialNumber
  BoardProduct  = $bb.Product
  DiskSerials   = (Get-PhysicalDisk | ForEach-Object { $_.SerialNumber.Trim() }) -join ', '
  CpuId         = (Get-CimInstance Win32_Processor).ProcessorId
  PhysicalMacs  = (Get-NetAdapter -Physical | ForEach-Object MacAddress) -join ', '
  MachineGuid   = (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Cryptography').MachineGuid
} | Format-List

BAT 脚本。 如果希望先检查文件内容再运行,可下载的 .bat是一个纯文本批处理文件,它会针对每种标识符各执行一次 PowerShell 查询,并在结束时暂停。它不使用 wmic,不计算哈希,也不会向磁盘写入任何内容。

EXE 程序。 Windows 版 HWID Checker会读取相同的标识符,并额外读取内存和卷序列号,然后将其全部显示出来;它还会对稳定字段计算 SHA-256,以便得到一条可以跨时间比较的字符串。这是一个便携式控制台应用程序——双击运行、查看结果、按 Enter 键退出。它生成的哈希是我们定义的复合值,不是任何游戏或许可证服务器使用的值。这个工具用于检查自己的计算机当前读取结果是否与上个月相同,不能预测其他软件会算出什么。下载页面公布了可执行文件本身的 SHA-256,运行前可以据此验证文件。

常见问题

为什么我的结果与朋友使用的“HWID checker”工具不同? 因为没有统一标准。对方的工具对另一组字段进行了哈希计算。应比较本文列出的原始数值,而不是哈希。

我的主板和 BIOS 序列号都显示 To Be Filled By O.E.M.,这是故障吗? 不是。你使用的是零售主板,而系统集成商(也就是你自己)从未填写 OEM 字段。部分主板厂商提供可以设置这些字段的 DMI 编辑工具,但通常没有必要这样做。

可以在无法亲自接触的计算机上查看这些值吗? 可以,但需要具备相应权限:Get-CimInstance -ComputerName <name> Win32_BaseBoard 可以通过 WinRM 或 DCOM 执行。本文中所有使用 Get-CimInstance 的命令都接受 -ComputerName 或 -CimSession 参数。

systeminfo 会显示 HWID 序列号吗? 不会。它会显示厂商、型号、BIOS 版本和 Windows 产品 ID,但不显示硬件序列号。它可以提供环境背景信息,却不能用于查询序列号。

其中哪些值可以修改? 本文不介绍如何修改标识符,HWID Checker也不会修改任何内容。MAC 和卷序列号在设计上允许用户更改;固件数值本不应修改。是否能在自己的主板上更改这些值,属于固件厂商的支持范畴,而不是 Windows 的功能。

运行这些命令时,会上传任何信息吗? 不会。每条命令都只读取本机固件表、本机设备驱动程序或本机注册表。本文中的任何操作都不会连接网络;可下载的 EXE 和 BAT 也完全不含网络代码。


如果手中有某个程序生成的标识符,想知道它最接近上述哪一种,可以使用在线 HWID 格式检查器。它能够识别 UUID、MAC 地址、十六进制哈希和常见序列号格式,并解释其结构;所有处理都在浏览器中完成,不会将数值发送到任何地方。