このページの本文へ

Windows Info 第409回

WindowsでのDeviceIDの仕組み

2023年12月10日 10時00分更新

文● 塩田紳二 編集● ASCII

  • この記事をはてなブックマークに追加
  • 本文印刷

 システムに接続されているUSBデバイスをWindows上で列挙する方法は、本連載でも以前の回(「WindowsのコマンドラインからUSBデバイスについて調べる方法」)で解説した。

 しかし、この方法はUSBデバイスを列挙するだけで、その接続関係などを表示するわけてはない。レジストリには、デバイスの親子関係や接続位置に関する情報がある。これを利用することで、USBデバイスに限らず、Windowsが管理しているデバイスの親子関係を得ることが可能だ。しかし、レジストリの情報もデバイスの情報の一部のみで、WMI(Windows Management Instrumentation)/CIM(Common Information Model)で得られたデバイスの情報と組み合わせる必要がある。

 そのためには、デバイスを列挙するWin32_PNPEntryなどで扱う「DeviceID」の構造を理解する必要がある。

WindowsにおけるDeviceIDとは?

 上記の記事でも解説したようにデバイス関連の情報はPowerShellのGet-CIMInstanceコマンドで得ることができる。このとき、個々のデバイスは「DeviceID」を持つ。DeviceIDは、逆スラッシュと「&」を区切りとして複数の情報をまとめた文字列である。たとえば、USBデバイスの場合、

USB\VID_05E3&PID_0608\5&3A692CE1&0&9

のような形式になっている。

 このうち、最初の「\」の前にある「USB」は、USBデバイスであることを示す。「\」の後の「VID_05E3&」は、デバイスのメーカー(ベンダー)IDが「05E3」であり、「PID_0608」は、ベンダーが決めたプロダクトIDは「0608」であることを示す。

 2つ目の「\」の後ろにある「5&3A692CE1&0&9」は、特定のUSBデバイス同士を区別するためのものだ。USBなどWindowsのデバイスには、同一メーカーの同一種のデバイスが同時に複数使われることがある。デバイスIDの前半部分は、デバイスのメーカーや製品を区別するための情報で、後半は実在のデバイスを区別するための情報だ。ここでは、この部分を借りに「インスタンスID」と呼ぶことにしておく。

 インスタンスIDには、親デバイスが持つIDと、個々のデバイスが持つ値(USBならアドレスやエンドポイント番号など)を組み合わせた値が使われる。このようにUSBのデバイスIDは、「\」で3つの部分に分かれる。

レジストリのデバイス情報

 デバイスに関する情報は、以下のレジストリキーの下にある。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum

 この直下は、「USB」や「PCI」など種別を表すキーがある。USBデバイスは、USBやHID、USBSTORキーの下に登録されている。さらに下を見ると「VID_XXXX&PID_XXXX」というキーがあり、さらに、その下に16進数と「&」を組み合わせたキーがある。ここまでのキーの並びは、前記のデバイスIDに一致する。

 レジストリでは、キーのパスをファイル同様に「\」で区切る。デバイスIDは、前記のキーのサブキーと一致するようになっている。簡易には、前記のレジストリキーの後に「\」を置いてデバイスIDをつなげると、該当のデバイスを示すレジストリキーと同じになる。この仕組みが理解できれば、デバイスIDを使って、レジストリから該当のデバイスに関する情報を得ることができる。

 多くの情報は、前記のインスタンスIDに相当するキーの部分にある。重要な情報としては、デバイスの親子関係(USBハブとそこに装着されたデバイスのような関係)を示す「ParentIDPrefix」と、デバイスの接続位置を示す「LocationInfomation」がある。

 ParentIDPrefixは、親デバイスが持つ情報で、この親デバイスに接続している子デバイスのインスタンスID前半部分と一致する(だからPrefixと呼ばれる)。逆にいうとParentIDPrefixを持つデバイスは、子デバイスを持つことができる(親デバイスになる可能性がある)デバイスである。たとえば、通常のマウスやUSBメモリなどは、親デバイスになる可能性はないが、USBハブやUSBコントローラーなどは、子デバイスを接続することができる。

 デバイスの親子関係は、このParentIDPrefixとインスタンスIDから推測することが可能だ。子デバイスを列挙するには、ParentIDPrefixをインスタンスIDの一部に持つデバイスを探せばよい。

 これに対して、LocationInfomationは、デバイスの論理的な接続位置などを示す情報だ。USBハブなどに複数のポート(ダウンストリームポート)があれば、それぞれを区別する情報などがこのLocationInfomationに記録される。ただし、必ずしも情報が提供されるとは限らないこと、USB複合デバイス内のエンドポイントの接続位置を示す場合もあることなどから、必ずしも使いやすい情報ではない。

デバイスIDとレジストリ情報を対応させる

 まずは、USBデバイスを全部列挙してみる。それには「Win32_USBControllerDevice」クラスを使い、以下のようなPowerShellコマンドを実行する。なお、結果を利用するため、変数$USBに保存する。以下、コマンドラインをコピーしてPowerShellのコンソールに貼り付けて実行できる。

$USB=(Get-CimInstance Win32_USBControllerDevice).Dependent.DeviceID

 このリストには、DeviceIDしか記録されていない。というのもWin32_USBControllerDeviceクラスは、親であるUSBコントローラーのDeviceIDを持つAntecedentプロパティと、そこに接続するデバイスのDeviceIDを記録したDependentプロパティにしか有効な値がないからである。

 なお、BluetoothコントローラーがUSB接続の場合、ペアリングしたBluetoothデバイスなどもこのコマンドの出力に含まれるが、この段階ではそのままにしておく。結果を見たい場合には、

$USB | Out-GridView

とする。

 個々のデバイスの情報は、Win32_PnPEntityクラスでしか得られない。そこで、この結果($USB)を使って、Win32_PnPEntityクラスの実行結果からUSBデバイスだけを抜き出す。

$PNPUSB=Get-CimInstance Win32_PnPEntity | ? DeviceID -in $USB

 ここでも同じく結果を$PNPUSBという変数に記憶させている。結果を見たいなら、$USBと同じくOut-GridViewを使う。

 この$PNPUSBの結果と前述のレジストリの結果を組み合わせる。まずは、HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enumキー以下にあるレジストリキーから、ParentIDPrefixとLocationInfomationプロパティを全部探してDeviceIDと対にしたオブジェクトを作る。

$x=Get-ChildItem HKLM:\SYSTEM\CurrentControlSet\Enum -Recurse -ErrorAction SilentlyContinue -Depth 2 | %{ [pscustomobject]@{ ID=($_.Name -replace "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Enum\\",""); Parent=(Get-ItemProperty -Path $_.PSPath).ParentIDprefix; Location=(Get-ItemProperty -Path $_.PSPath).LocationInformation; } } | ? {$_.Parent -ne $null -or $_.Location -ne $null }

 レジストリの値をインスタンスID相当のキーがある2階層目まですべて列挙し、それぞれに対してParentIDprefix、LocationInformationをプロパティに入れている。Childプロパティはあとで利用するためのもの。全部終わったら、ParentIDprefix、LocationInformationがともに、ヌル値であるものをWhere-Objecr(“?”がエイリアス)で除外して変数$xに入れている。

 最後に全部を合わせたオブジェクトを作る。

$r=$USB | %{ [pscustomobject]@{ Id=$_; Parent=$(($x | ? ID -eq $_).Parent);Location=$(($x | ? ID -eq $_).Location); child=@(); Entry=($PNPUSB | ? DeviceID -eq $_)}}

 これは、USBデバイスのリスト($USB)を元に新規にオブジェクトを作成するもの。すべてのUSBデバイスに対して、DeviceID、ParentIDPrefix、LocationInfomationおよびPNPEntryの内容を持つオブジェクト(PSCustomObject)を作成している。

 親子関係を判定するには、デバイスIDである$r.IdのインスタンスID部分が、$r.Parentと先頭一致するものを探せばよい。

WindowsでのDeviceIDの仕組み

ParentIDPrefixを持つデバイスに対して、子デバイスを列挙している。これは簡易なコマンドなので、孫デバイス以下を表示できていない

$r | ? Parent -ne $null | %{ $temp=($PNPUSB | ? DeviceId -like "*$($_.Parent)*"); Write-Output "$($_.id) ----- ParentID: $($_.Parent)`n`t$($temp.DeviceID -join "`n`t")" } | Out-GridView

 これで親子関係はわかるが、このコマンドでは孫デバイスがあることは考慮されていない。親子関係をたどってツリー構造を表示させるには、再帰的な処理が必要で、PowerShellのコマンドラインではちょっと難しそうだ。なのでプログラム(関数)を書く必要がある。次回はこのあたりを考えることにする。

カテゴリートップへ

本記事はアフィリエイトプログラムによる収益を得ている場合があります

この連載の記事
1
【整備済み品】富士通 ノートパソコン LIFEBOOK U9310 13.3型FHD(1920x1080) 超軽薄 ノートPC/第10世代 Core i5-10310U@1.7GHz/ 8GB メモリ/高速ストレージ SSD/Webカメラ/WIFI/Type-C/HDMI/win11&MS Office 2019 搭載 ビジネス 在宅勤務向け パソコン (メモリ:8GB/SSD:256GB)
【整備済み品】富士通 ノートパソコン LIFEBOOK U9310 13.3型FHD(1920x1080) 超軽薄 ノートPC/第10世代 Core i5-10310U@1.7GHz/ 8GB メモリ/高速ストレージ SSD/Webカメラ/WIFI/Type-C/HDMI/win11&MS Office 2019 搭載 ビジネス 在宅勤務向け パソコン (メモリ:8GB/SSD:256GB)
¥36,970
2
Apple 2026 MacBook Air M5チップ搭載13インチノートブック:AIとApple Intelligence、13.6インチLiquid Retinaディスプレイ、16GBユニファイドメモリ、512GB SSDストレージ、12MPセンターフレームカメラ、日本語キーボード、Touch ID - ミッドナイト
Apple 2026 MacBook Air M5チップ搭載13インチノートブック:AIとApple Intelligence、13.6インチLiquid Retinaディスプレイ、16GBユニファイドメモリ、512GB SSDストレージ、12MPセンターフレームカメラ、日本語キーボード、Touch ID - ミッドナイト
¥177,333
3
Apple 2026 MacBook Neo A18 Proチップ搭載13インチノートブック:AIとApple Intelligenceのために設計、Liquid Retinaディスプレイ、8GBユニファイドメモリ、256GB SSDストレージ、1080p FaceTime HDカメラ - シトラス
Apple 2026 MacBook Neo A18 Proチップ搭載13インチノートブック:AIとApple Intelligenceのために設計、Liquid Retinaディスプレイ、8GBユニファイドメモリ、256GB SSDストレージ、1080p FaceTime HDカメラ - シトラス
¥95,768
4
ESBOOKノートパソコン 【MS Office 2024搭載&Windows 11 Pro】14インチIPS液晶/1920×1080FHDディスプレイ カメラ付き/薄型PCノート高性能CPU/初期設定不要/8Gメモリ/無線LAN/大容量SSD/初心者向け・パソコンノート/日本語キーボードフィルム付き/ワイヤレスマウス付き(256G SSD, ローズゴールド)
ESBOOKノートパソコン 【MS Office 2024搭載&Windows 11 Pro】14インチIPS液晶/1920×1080FHDディスプレイ カメラ付き/薄型PCノート高性能CPU/初期設定不要/8Gメモリ/無線LAN/大容量SSD/初心者向け・パソコンノート/日本語キーボードフィルム付き/ワイヤレスマウス付き(256G SSD, ローズゴールド)
¥38,999
5
【整備済み品】 富士通 タブレット ノートパソコン ARROWS Tab V727 12.3インチ 中古 タブレット【Windows 11 】【MS Office2019 H&B 搭載 】第7世代 Core M3/ メモリ 4GB / SSD 128GB /無線LAN/HDMI/LTE/タッチペン 付属(整備済み品)
【整備済み品】 富士通 タブレット ノートパソコン ARROWS Tab V727 12.3インチ 中古 タブレット【Windows 11 】【MS Office2019 H&B 搭載 】第7世代 Core M3/ メモリ 4GB / SSD 128GB /無線LAN/HDMI/LTE/タッチペン 付属(整備済み品)
¥11,800

Amazonのアソシエイトとして、ASCII.jpは適格販売により収入を得ています。

ASCII倶楽部

注目ニュース

  • 角川アスキー総合研究所

プレミアム実機レビュー

ピックアップ
1
KIOXIA(キオクシア) 旧東芝メモリ microSD 128GB UHS-I Class10 (最大読出速度100MB/s) Nintendo Switch動作確認済 国内サポート正規品 メーカー保証5年 KLMEA128G
KIOXIA(キオクシア) 旧東芝メモリ microSD 128GB UHS-I Class10 (最大読出速度100MB/s) Nintendo Switch動作確認済 国内サポート正規品 メーカー保証5年 KLMEA128G
¥2,386
2
Anker PowerLine III Flow USB-C & USB-C ケーブル Anker絡まないケーブル 240W 結束バンド付き USB PD対応 シリコン素材採用 iPhone 17 / 16 / 15 / Galaxy iPad Pro MacBook Pro/Air 各種対応 (1.8m ミッドナイトブラック)
Anker PowerLine III Flow USB-C & USB-C ケーブル Anker絡まないケーブル 240W 結束バンド付き USB PD対応 シリコン素材採用 iPhone 17 / 16 / 15 / Galaxy iPad Pro MacBook Pro/Air 各種対応 (1.8m ミッドナイトブラック)
¥1,890
3
KIOXIA(キオクシア)【日本製】USBフラッシュメモリ 32GB USB2.0 国内サポート正規品 KLU202A032GL
KIOXIA(キオクシア)【日本製】USBフラッシュメモリ 32GB USB2.0 国内サポート正規品 KLU202A032GL
¥1,080
4
Anker iPhone充電ケーブル PowerLine II ライトニングケーブル MFi認証 超高耐久 iPhone 14 / 14 Pro Max / 14 Plus / 13 / 13 Pro / 12 / 11 / X/XS/XR / 8 Plus 各種対応 (0.9m ホワイト)
Anker iPhone充電ケーブル PowerLine II ライトニングケーブル MFi認証 超高耐久 iPhone 14 / 14 Pro Max / 14 Plus / 13 / 13 Pro / 12 / 11 / X/XS/XR / 8 Plus 各種対応 (0.9m ホワイト)
¥990
5
Anker USB Type C ケーブル PowerLine USB-C & USB-A 3.0 ケーブル iPhone 17 / 16 / 15 /Xperia/Galaxy/LG/iPad Pro/MacBook その他 Android 等 USB-C機器対応 テレワーク リモート 在宅勤務 0.9m ホワイト
Anker USB Type C ケーブル PowerLine USB-C & USB-A 3.0 ケーブル iPhone 17 / 16 / 15 /Xperia/Galaxy/LG/iPad Pro/MacBook その他 Android 等 USB-C機器対応 テレワーク リモート 在宅勤務 0.9m ホワイト
¥740
6
UGREEN USB Type Cケーブル PD対応 100W/5A 超急速充電 USB C ナイロン編み 断線防止 iphone17/16/15シリーズ/iPad/MacBook Pro/Galaxy S24/Matebook/iPad/Xperia等USB-C各種対応(1m, ブラック)
UGREEN USB Type Cケーブル PD対応 100W/5A 超急速充電 USB C ナイロン編み 断線防止 iphone17/16/15シリーズ/iPad/MacBook Pro/Galaxy S24/Matebook/iPad/Xperia等USB-C各種対応(1m, ブラック)
¥743
7
NIMASO ガラスフィルム iPad 第11世代(A16) 2025用/iPad 10.9インチ 第10世代 2022用 衝撃吸収 強化 ガラス 保護フィルム 指紋防止 ガイド枠付き NTB22I574
NIMASO ガラスフィルム iPad 第11世代(A16) 2025用/iPad 10.9インチ 第10世代 2022用 衝撃吸収 強化 ガラス 保護フィルム 指紋防止 ガイド枠付き NTB22I574
¥1,359
8
KIOXIA(キオクシア)【日本製】SDカード 128GB SDXC UHS-I Class10 読出速度100MB/s 国内正規品 メーカー保証5年 KLNEA128G
KIOXIA(キオクシア)【日本製】SDカード 128GB SDXC UHS-I Class10 読出速度100MB/s 国内正規品 メーカー保証5年 KLNEA128G
¥2,364
9
対応 iPad 11世代 / 10世代 ガラスフィルム (2025/2022モデル) ガイド枠付き 【2枚セット-日本旭硝子素材】対応 iPad第10世代 2022 第11世代A16 10.9インチ 保護フィルム フィルム 強化ガラス スマートタブレット 第11世代2025 第10世代2022 液晶保護フィルム ガイド枠 全面保護 2.5D 硬度9 H 耐衝撃 飛散防止 貼り付け簡単 自動吸着 気泡ゼロ 指紋防止 ラウンドエッジ加工 超薄0.26mm 超高質感 スマートタブレット SENTM-2IP10D-1
対応 iPad 11世代 / 10世代 ガラスフィルム (2025/2022モデル) ガイド枠付き 【2枚セット-日本旭硝子素材】対応 iPad第10世代 2022 第11世代A16 10.9インチ 保護フィルム フィルム 強化ガラス スマートタブレット 第11世代2025 第10世代2022 液晶保護フィルム ガイド枠 全面保護 2.5D 硬度9 H 耐衝撃 飛散防止 貼り付け簡単 自動吸着 気泡ゼロ 指紋防止 ラウンドエッジ加工 超薄0.26mm 超高質感 スマートタブレット SENTM-2IP10D-1
¥999
10
JAMJAKE iPad用ペンシル アップルペンシル代用ペン 2018年~2026年 iPad対応 タッチペン 超高感度 極細 スタイラスペン Type-C急速充電 傾き感知/磁気吸着/誤作動防止機能対応 軽量 耐摩 学生 子供 筆記 絵を描く デザイン用 ドローイング用
JAMJAKE iPad用ペンシル アップルペンシル代用ペン 2018年~2026年 iPad対応 タッチペン 超高感度 極細 スタイラスペン Type-C急速充電 傾き感知/磁気吸着/誤作動防止機能対応 軽量 耐摩 学生 子供 筆記 絵を描く デザイン用 ドローイング用
¥1,880

Amazonのアソシエイトとして、ASCII.jpは適格販売により収入を得ています。

デジタル用語辞典

ASCII.jpメール デジタルMac/iPodマガジン