本文へスキップ
HWID Checker

CMDとPowerShellでHWIDシリアルを確認する方法:WindowsのハードウェアIDをすべて解説

CMDとPowerShellでHWIDシリアルを確認する方法を解説。SMBIOS UUID、マザーボード、BIOS、ディスク、RAM、CPU ProcessorId、MAC、MachineGuidについて、出力例と各値が変わる条件も紹介します。

HWID Checker · 2026年9月4日 · 4 分で読めます

「自分のHWID」を表示する単一のコマンドは存在しません。黒い画面を開いて入力を始める前に、まずこの点を理解しておく必要があります。Windowsが保存しているハードウェアIDは1つではありません。ファームウェアUUID、マザーボードのシリアル、BIOSのシリアル、ディスクごとのシリアル、メモリモジュールごとのシリアル、CPUシグネチャ、ネットワークアダプターごとのMACアドレス、さらにソフトウェアによって生成されるいくつかのGUIDなど、十数種類の識別子が公開されています。「あなたのHWID」を扱うプログラムは、これらの値から独自に一部を選び、それぞれ異なる方法で組み合わせています。

そのため、CMDでHWIDシリアルを確認する方法を探している人が本当に必要としているのは、どのようなシリアルが存在し、それぞれを読み取るコマンドは何か、出力はどのように見え、何をすると値が変わるのかをまとめた一覧です。本ガイドでは、まさにそれを解説します。従来のコマンドプロンプト(cmd.exe)とPowerShellの両方を取り上げます。現在のWindowsでは両方が必要だからです。古いCMDコマンドのいくつかはwmicを基盤としていましたが、MicrosoftはWindows 11の標準インストールからこれを削除しており、現在サポートされている代替手段はPowerShellコマンドレットです。

ここで扱う操作はすべて読み取り専用です。各コマンドは、Windowsとファームウェアがすでに公開している値を照会するだけであり、識別子の変更、ランダム化、偽装は一切行いません。コマンドは2026年9月4日時点のMicrosoftドキュメントに基づき、Windows 10 22H2およびWindows 11 24H2/25H2で確認済みです。

まずは結論:全コマンド一覧

コマンドだけを知りたい場合は、以下の表をご覧ください。各行が1つの識別子に対応しています。「従来のCMD」列には、フォーラム投稿などで今も見かける古いwmic形式を参考として掲載しています。現在使うべきなのはPowerShell列のコマンドです。

識別子保存場所PowerShell(推奨)従来のCMD(Windows 11では存在しない場合あり)
SMBIOS system 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:
RAMモジュールのシリアルDIMMのSPDチップGet-CimInstance Win32_PhysicalMemory | Select-Object DeviceLocator, SerialNumberwmic memorychip get devicelocator,serialnumber
CPU ProcessorIdCPUID命令(Get-CimInstance Win32_Processor).ProcessorIdwmic cpu get processorid
MACアドレスネットワークアダプターのファームウェア/ドライバーGet-NetAdapter | Select-Object Name, MacAddress, Statusgetmac /v
モニターシリアル(EDID)ディスプレイのファームウェアモニターのセクションを参照なし
MachineGuidレジストリ(Windowsインストール時に設定)(Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Cryptography').MachineGuidreg query HKLM\SOFTWARE\Microsoft\Cryptography /v MachineGuid
Windows Product IDレジストリ/ライセンス(Get-CimInstance Win32_OperatingSystem).SerialNumberwmic os get serialnumber
ComputerHardwareIdsレジストリ(SMBIOSから派生)(Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\SystemInformation').ComputerHardwareIdsreg query "HKLM\SYSTEM\CurrentControlSet\Control\SystemInformation" /v ComputerHardwareIds

以降では、各行について値の意味、正常な結果と問題のある結果の見え方、値が変わる操作を順に説明します。1セクションだけ読むなら、実際に「HWID」を構成するシリアルはどれかをお読みください。

CMDかPowerShellか? 同じ黒い画面に2つの言語がある理由

cmd.exeとPowerShellはいずれもテキストコンソールです。Windows 11では通常、どちらも同じWindows Terminalアプリ内で開くため、コマンドを相互に使えると思いがちですが、実際には使えません。

  • **cmd.exe**では、dir、reg、vol、getmac、systeminfo、そして従来はwmicといったバッチ形式のコマンドを実行します。オブジェクトパイプラインはなく、出力はプレーンテキストです。
  • PowerShell(WindowsにはWindows PowerShell 5.1が付属し、PowerShell 7は別途インストール)では、Get-CimInstanceやGet-PhysicalDiskなどのコマンドレットを実行します。出力はオブジェクトであり、Select-Objectで絞り込めます。

HWIDの照会でこの違いが重要になる理由はwmic.exeです。2024年以前に書かれた「CMDでHWIDを確認する」チュートリアルのほぼすべてが、wmic csproduct get uuid、wmic bios get serialnumberなどを使っています。WMICは2016年に非推奨となり、Windows 11 24H2では標準で無効なオプションの「オンデマンド機能」になり、現在は完全な削除が進められています。新規セットアップしたWindows 11では、通常次のように表示されます。

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

内部のWMIクラス(Win32_BIOS、Win32_BaseBoardなど)は今も存在します。なくなったのは古いコマンドラインクライアントだけです。そのため、本記事のPowerShellコマンドはすべてGet-CimInstanceを使用しています。サポート対象のCIMインターフェイスを通して、同じクラスを読み取るためです。既存スクリプトでwmicを使わざるを得ない場合は、WMICのトラブルシューティングガイドで移行方法を詳しく解説しています。

PowerShellコマンドを使うためにCMDを終了する必要はありません。 本記事のPowerShellワンライナーは、次のようにラップすればコマンドプロンプトや.batファイルから実行できます。

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

ダウンロード可能なBATスクリプトも、まさにこの方法で動作します。識別子ごとにPowerShellを1回呼び出すプレーンテキストのバッチファイルなので、実行前に全行を確認できます。

管理者権限は必要ですか? 本記事の操作には一切必要ありません。SMBIOSテーブル、ディスクシリアル、メモリのSPDデータ、CPUID、関連するレジストリキーは、すべて標準ユーザーのセッションで読み取れます。コマンドがAccess deniedを返した場合、通常の権限の壁に当たったのではなく、ほぼ確実にリモートマシンに対して実行しているか、制限された企業ポリシーの環境内で実行しています。

SMBIOS system UUID

概要。 マザーボードメーカーがSMBIOS System Informationテーブル(type 1)に保存する128ビットの識別子です。ファームウェアレベルの値で、OSを再インストールしても残り、簡単に読み取れるため、単に「HWID」と言った場合に最もよく指される値です。

(Get-CimInstance Win32_ComputerSystemProduct).UUID

一般的な出力:

4C4C4544-0034-5A10-8047-B8C04F4E3232

読み方。 上の例のように、Dell製マシンではUUIDの一部がサービスタグから生成されるため、2台のDellが同じUUIDを持つことはありません。多くのコンシューマー向けマザーボードでは、工場で書き込まれたランダム値です。どちらの場合も秘密情報ではなく、ローカルアクセスできる人なら誰でも読み取れ、暗号化もされていません。

問題のある結果とその意味。

  • 00000000-0000-0000-0000-000000000000またはFFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF — ファームウェアがフィールドに値を設定していません。一部の低価格マザーボード、BIOSチップ交換後のマシン、最小限のSMBIOS構成を使用する一部の仮想マシンでよく見られます。
  • 03000200-0400-0500-0006-000700080009 — リファレンスBIOSでよく知られたデフォルトのプレースホルダーです。一意ではなく、数千台ものマザーボードがこの値を返します。
  • 空欄 — 通常はUUIDを公開しない仮想化プラットフォームです。

値が変わる条件。 マザーボードの交換です。通常のBIOS再書き込みでは保持されますが、一部のマザーボードでCMOS/NVRAMを完全にリセットした場合や、サービスセンターでマザーボードを交換した場合は新しい値になることがあります。Windowsの再インストールでは変わりません。VMではハイパーバイザーが設定し、VMのクローン時に再生成されるかどうかはプラットフォームによって異なります。

同じクラスのIdentifyingNumberはOEMのシステムシリアルで、ノートPC底面のステッカーに印刷されている文字列と同じものです。

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

BIOSシリアル番号

概要。 SMBIOS System InformationテーブルからWin32_BIOSクラス経由で報告されるシリアルです。完成品PCやノートPCでは、ほぼ必ず前述の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

最後の3つはエラーではありません。市販のマザーボードは別の誰かが組み立てる前提で販売されるため、マザーボードベンダーは「システム」シリアルをシステムインテグレーターが入力できるよう空けておきますが、実際には誰も入力しません。BIOSシリアルを一意のキーとして利用するソフトウェアは、これらのマシンをすべて同一コンピューターとして扱ってしまいます。これは「ハードウェアの重複」という誤検知が生じる実際の原因です。

値が変わる条件。 UUIDと同様、マザーボードの交換です。通常、BIOSアップデートでは変わりません。

マザーボード(ベースボード)のシリアル

概要。 SMBIOS Baseboardテーブル(type 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と表示される一部のGigabyte製品などで発生します。

値が変わる条件。 マザーボードを交換した場合だけです。このため、マザーボードシリアルはSMBIOS UUIDと並び、アンチチートやライセンスシステムが最も重視する識別子です。

シャーシ(システムエンクロージャー)のシリアル

概要。 SMBIOS Chassisテーブル(type 3)のシリアルです。ノートPCやOEMデスクトップでは通常システムシリアルと一致します。自作PCではほぼ必ずプレースホルダーです。PCケースにはファームウェアがなく、マザーボードベンダーには購入したケースが分からないためです。

(Get-CimInstance Win32_SystemEnclosure).SerialNumber

これは補助的な値として扱って問題ありません。一部のHWIDツールが読み取るため掲載していますが、Default stringと表示されても驚く必要はありません。

物理ディスクのシリアル — volがそれに該当しない理由

ここは最も混乱が多い部分です。Windowsには、どちらも「ディスクシリアル」と呼ばれがちな、まったく異なる2つの値が存在します。

ハードウェアシリアル(通常はこちらが必要)

すべての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

従来のwmic diskdriveコマンドが使用していた標準的なWMIクラスでも読み取れます。

Get-CimInstance Win32_DiskDrive | Select-Object Model, SerialNumber

遭遇しやすい注意点。

  • 先頭または末尾の空白。 一部のドライバーは、固定幅に合わせてシリアルを空白で埋めます。値を比較するときは.Trim()を使用しないと、誤った不一致が発生します。
  • 古いシステムでの16進数のバイト入れ替え。 Windows 7以前では、Win32_PhysicalMediaが2文字ごとに順序を入れ替えた16進数としてシリアルを返していました。現在の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桁の16進数値は、ボリュームをフォーマットしたときにファイルシステムヘッダーへ書き込まれます。ドライブのファームウェアには保存されず、ハードウェアとは無関係です。パーティションを再フォーマットすると新しい値になります。ディスクをセクター単位でクローンした場合、クローンには元と同じボリュームシリアルが引き継がれます。

1990年代から2000年代のものを含む古いライセンス方式には、C:のボリュームシリアルをキーに使用するものがありました。そのため現在もHWIDの議論に登場します。簡単に変更できるため、現在のアンチチートやDRMは通常これを無視します。ツールが「ディスクシリアル」として8A3F-1C2Bのような値を報告する場合、読み取っているのはドライブではなくボリュームのシリアルです。

スクリプトで必要な場合のPowerShell版:

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

このコマンドはハイフンなしの8A3F1C2Bを返します。

RAMモジュールのシリアル

概要。 各メモリモジュールには、型番、メーカー、および大半のモジュールではシリアル番号を格納した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、空欄、または全モジュールで同じ値になることが非常によくあります。シリアルを書き込まないメーカーもあれば、SPDのシリアルフィールドをSMBIOSへ渡さないマザーボードもあります。サーバー/ワークステーション向けメモリでは、実際の一意なシリアルが報告される可能性がはるかに高くなります。

値が変わる条件。 モジュールの追加、取り外し、交換です。XMP/EXPOプロファイルを変更しても変わりません。また、DeviceLocator(スロット名)はマザーボード固有です。同じモジュールを別のスロットへ移すと、シリアル自体は変わらなくてもスロットとシリアルの対応関係が変わります。単純なHWID実装が誤判定しやすいポイントです。

CPU ProcessorId — シリアル番号ではない値

概要。 WindowsがCPUID命令から組み立てる16桁の16進数値で、プロセッサシグネチャ(ファミリー、モデル、ステッピング)と機能フラグで構成されます。

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

ほぼすべてのHWID解説が誤っている重要な点があります。ProcessorIdは個々のCPUに固有ではありません。 同じステッピングと、マイクロコードから見える同じ機能セットを持つRyzen 7 7800X3Dは、すべて同じ178BFBFF00A60F12を返します。Intelはプライバシーへの反発を受け、2000年にPentium IIIを最後にCPU個体ごとのプロセッサシリアル番号(PSN)をCPUIDから削除しました。AMDはそもそも導入していません。現在Windowsが報告するのはモデルの識別子であり、個体の識別子ではありません。

だからといって役に立たないわけではありません。複合ハッシュの安定した構成要素であり、CPUを異なるモデルに交換しない限り変わらず、マシン全体の構成を区別する助けになります。ただし、同じプロセッサを搭載する全コンピューターの中から、これだけで1台を特定することはできません。

値が変わる条件。 CPUを異なるモデルまたはステッピングのものに交換した場合です。報告される機能フラグが変化するマイクロコード更新により、理論上は下位ビットが変わる可能性がありますが、実際にはまれです。

MACアドレス

概要。 各ネットワークアダプターに書き込まれた48ビットのアドレスで、6組の16進数として表示されます。有線Ethernet、Wi-Fi、Bluetoothの各アダプターがそれぞれ固有のアドレスを持ちます。

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をランダム化できます(設定 → ネットワークとインターネット → Wi-Fi → ランダムなハードウェア アドレス)。有効にすると、Wi-Fiネットワークごとに異なるMACが表示されます。有線アダプターはこの設定の影響を受けません。
  • 管理者が変更可能。 多くのドライバーでは、デバイスマネージャー → 詳細設定 → Network AddressからMACを上書きできます。これはハッキングではなく、正規の文書化された機能です。MAC単体が弱い識別子である最大の理由でもあります。

値が変わる条件。 アダプターの交換、Wi-Fiランダム化の有効化、ドライバーでの上書き設定、仮想化ソフトウェアの追加/削除(仮想アダプターの場合)です。

EDIDから取得するモニターシリアル

多くのHWIDガイドでは省略されていますが、一部のアンチチートシステムが読み取るため、完全な一覧には欠かせません。各モニターは自身の情報を記述したEDIDブロックをグラフィックカードに送信し、そのブロックにはメーカーコードと、通常はシリアル番号が含まれます。

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です。ハードウェア情報ではありません。コンポーネントを何に交換しても値が維持され、簡単に読み取れるため、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 Product ID

概要。 設定 → システム → バージョン情報に表示されるxxxxx-xxxxx-xxxxx-AAOEM形式の文字列です。ハードウェアではなく、Windowsのライセンスチャネルとインストールを識別します。

(Get-CimInstance Win32_OperatingSystem).SerialNumber

多くの「HWIDを確認する」バッチファイルにwmic os get serialnumberが登場し、ハードウェアシリアルと誤解されるため掲載しています。これはハードウェアシリアルではなく、再インストール時のほか、エディション変更や再アクティベーションで変わる場合があります。

ComputerHardwareIds — Microsoft独自のハードウェアID

ドライバー開発者以外にはほとんど知られていませんが、Windowsにおける公式の「HWID」に最も近いものです。

Windows Updateは、Computer Hardware IDsと呼ばれる一連のGUIDを使用して、特定のシステムを対象にファームウェアやドライバーパッケージを配信します。メーカー、製品名、SKU、ファミリー、BIOSベンダーとバージョン、ベースボード情報など、SMBIOSフィールドのさまざまな組み合わせをハッシュして算出され、レジストリに保存されます。

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バージョンを搭載した同一モデルのノートPCは、同じセットを生成します。ただし、他の値がプレースホルダーらしく見える場合の整合性確認には役立ちます。HWIDツールも読み取るファームウェア文字列から派生しているためです。複数のマシンがすべてのComputerHardwareIdを共有している場合、ほぼ間違いなくSMBIOS UUIDの問題、または前述のTo Be Filled By O.E.M.問題も共通しています。

Windows Driver KitにはComputerHardwareIds.exeが付属しています。これは同じ一覧に加え、各ハッシュへ使われた正確なSMBIOSフィールドも表示します。システムがどのファームウェア文字列を公開しているかを詳しく把握するのに便利です。

実際に「HWID」を構成するシリアルはどれか?

ここまで十数種類の値を見てきました。では、そのうちどれが本当のHWIDなのでしょうか。

単体では、どれも該当しません。アンチチートシステム、ライセンスサーバー、デバイス管理ツールが使うHWIDは、上記の複数の値を組み合わせたハッシュです。どの値を使い、どうハッシュするかはベンダーごとに異なります。HWID形式ガイドが必要になるのも、あるプログラムの値を別のプログラムの値と比較できないのも、このためです。

公開ドキュメントやリバースエンジニアリングの解説から、各値のおおよその重み付けは次のように整理できます。

識別子一般的な重み理由
マザーボードシリアル、SMBIOS UUID高OSを再インストールしても残り、マザーボード交換時のみ変わる
物理ディスクシリアル(システムドライブ)高安定かつ一意で、容易に読み取れる
MachineGuid中~高再インストールを検出できるが、クローンイメージでは共有される
CPU ProcessorId中安定しているが、同一モデルのCPUすべてで共有される
物理MACアドレス低~中簡単に上書きでき、Wi-Fiではランダム化される
RAMシリアル低コンシューマー向けメモリではゼロや重複が多い
モニターのEDIDシリアル低一部のアンチチートが読み取るが、周辺機器は頻繁に変わる
ボリュームシリアル非常に低いフォーマットのたびに変わる
BIOS/シャーシシリアル環境次第OEMマシンでは優秀だが、市販マザーボードではプレースホルダー

実用上、次の2点が重要です。

  1. 適切に設計されたシステムでは、コンポーネントを1つ交換しただけでHWIDが変わることはほとんどありません。 多くの実装では、マシンを新規と判定するまでに一定数のフィールド変更を許容します。GPUはWMI経由でシリアルを公開しないため、そもそも本記事のどこにも登場しません。通常、GPUを交換しても何も変わりません。
  2. Windowsの再インストールで変わるのはMachineGuidとボリュームシリアルで、ファームウェアレベルの値は一切変わりません。 再インストール後もBANやライセンスロックが残る理由を知りたいなら、答えはこれです。マザーボード、ディスク、UUIDが変わっていないためです。HWID BANガイドで、実際にそれが何を意味するのかを詳しく解説しています。

すべての値を一度に読み取る

14個のコマンドを手作業で実行するのも、一度だけなら問題ありません。保存して後から比較できる単一のレポートが必要なら、読み取り専用の方法が3つあります。

貼り付けて使える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クエリを1つ実行し、最後に一時停止するプレーンテキストのバッチファイルです。wmicは使わず、ハッシュを計算せず、ディスクへの書き込みも行いません。

EXE。 Windows用HWID Checkerは、同じ識別子に加えてRAMとボリュームシリアルを読み取って表示し、さらに安定したフィールドからSHA-256を計算します。これにより、時期の異なる結果を1つの文字列で比較できます。ダブルクリックして読み、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 Product IDは表示されますが、ハードウェアのシリアル番号は表示されません。周辺情報の確認には役立ちますが、シリアルの照会には使えません。

このうち変更できるものはどれですか? 本記事では識別子の変更を扱っておらず、HWID Checkerも何も変更しません。MACとボリュームシリアルは仕様上ユーザーが変更できます。ファームウェア値は変更を想定しておらず、自分が所有するマザーボードで変更する場合は、Windowsではなくファームウェアベンダーに確認すべき問題です。

コマンドを実行すると、これらの情報がアップロードされますか? いいえ。すべてのコマンドはローカルのファームウェアテーブル、ローカルデバイスのドライバー、またはローカルレジストリを読み取ります。本ガイドにネットワークへ接続する処理はありません。ダウンロード可能なEXEとBATにも、ネットワークコードは一切含まれていません。


プログラムから取得した識別子が上記のどれに最も近いかを調べたい場合は、オンラインHWID形式チェッカーをご利用ください。UUID、MACアドレス、16進数ハッシュ、一般的なシリアルパターンを認識し、その構造を説明します。値を外部へ送信せず、すべてブラウザ内で処理します。