このページの本文へ

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
【整備済み品】中古 ノートパソコン NEC VersaPro VKT16/15.6型・第8世代Core i5-8250U(最大動作3.4GHz)/快適メモリ8GB/ 高速SSD 256GB/Win11 Pro/MS Office 2019付属/テンキー付, Webカメラ, USB3.0, HDMI, VGA, 有線LAN, WIFI内蔵, Bluetooth/ACアダプター付属/180日間保証
【整備済み品】中古 ノートパソコン NEC VersaPro VKT16/15.6型・第8世代Core i5-8250U(最大動作3.4GHz)/快適メモリ8GB/ 高速SSD 256GB/Win11 Pro/MS Office 2019付属/テンキー付, Webカメラ, USB3.0, HDMI, VGA, 有線LAN, WIFI内蔵, Bluetooth/ACアダプター付属/180日間保証
¥26,880
2
【整備済み品】富士通 ノートパソコン 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,979
3
HP ノートパソコン 15-fd 15.6インチ インテル Core Ultra 5 125H メモリ16GB SSD512GB Windows 11 Microsoft Office 2024搭載 WPS Office搭載 カメラシャッター 指紋認証 薄型 Copilotキー搭載 ナチュラルシルバー (BJ0M7PA-AAAF)
HP ノートパソコン 15-fd 15.6インチ インテル Core Ultra 5 125H メモリ16GB SSD512GB Windows 11 Microsoft Office 2024搭載 WPS Office搭載 カメラシャッター 指紋認証 薄型 Copilotキー搭載 ナチュラルシルバー (BJ0M7PA-AAAF)
¥134,377
4
Apple 2025 MacBook Pro 10 コアCPU、10 コアGPU のM5 チップ搭載ノートパソコン:Apple Intelligence のために設計、14.2 インチLiquid Retina XDR ディスプレイ、16GB ユニファイドメモリ、512GBのSSD ストレージ - スペースブラック
Apple 2025 MacBook Pro 10 コアCPU、10 コアGPU のM5 チップ搭載ノートパソコン:Apple Intelligence のために設計、14.2 インチLiquid Retina XDR ディスプレイ、16GB ユニファイドメモリ、512GBのSSD ストレージ - スペースブラック
¥238,747
5
Lenovo Chromebook クロームブック IdeaPad Flex 3i Gen8 12.2インチ インテル® プロセッサー N100搭載 メモリ4GB eMMC 64GB バッテリー駆動12.0時間 重量1.25kg アビスブルー 82XH001KJP
Lenovo Chromebook クロームブック IdeaPad Flex 3i Gen8 12.2インチ インテル® プロセッサー N100搭載 メモリ4GB eMMC 64GB バッテリー駆動12.0時間 重量1.25kg アビスブルー 82XH001KJP
¥39,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
¥1,880
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
【Amazon.co.jp限定】バッファロー microSD 32GB 100MB/s UHS-1 U1 microSDHC【 Nintendo Switch 対応 】V10 A1 IPX7 Full HD RMSD-032U11HA/N
【Amazon.co.jp限定】バッファロー microSD 32GB 100MB/s UHS-1 U1 microSDHC【 Nintendo Switch 対応 】V10 A1 IPX7 Full HD RMSD-032U11HA/N
¥980
4
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
5
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
6
【Amazon.co.jp限定】 ロジクール 静音 ワイヤレス トラックボール マウス M575SPd Bluetooth Logibolt 無線 windows mac iPad OS Chrome トラックボールマウス ブラック M575 M575SP 国内正規品 ※Amazon.co.jp限定 壁紙ダウンロード付き
【Amazon.co.jp限定】 ロジクール 静音 ワイヤレス トラックボール マウス M575SPd Bluetooth Logibolt 無線 windows mac iPad OS Chrome トラックボールマウス ブラック M575 M575SP 国内正規品 ※Amazon.co.jp限定 壁紙ダウンロード付き
¥5,280
7
KIOXIA(キオクシア)【日本製】USBフラッシュメモリ 32GB USB2.0 国内サポート正規品 KLU202A032GL
KIOXIA(キオクシア)【日本製】USBフラッシュメモリ 32GB USB2.0 国内サポート正規品 KLU202A032GL
¥980
8
キヤノン Canon 純正 インクカートリッジ BCI-381(BK/C/M/Y)+380 5色マルチパック BCI-381+380/5MP 長さ:5.3cm 幅:13.9cm 高さ:10.75cm
キヤノン Canon 純正 インクカートリッジ BCI-381(BK/C/M/Y)+380 5色マルチパック BCI-381+380/5MP 長さ:5.3cm 幅:13.9cm 高さ:10.75cm
¥5,545
9
バッファロー SDカード 128GB 100MB/s UHS-1 スピードクラス1 VideoSpeedClass10 IPX7 Full HD データ復旧サービス対応 RSDC-128U11HA/N
バッファロー SDカード 128GB 100MB/s UHS-1 スピードクラス1 VideoSpeedClass10 IPX7 Full HD データ復旧サービス対応 RSDC-128U11HA/N
¥1,980
10
バッファロー USBメモリ 32GB USB3.2(Gen1)/3.1(Gen 1)/3.0/2.0 充実サポート RUF3-K32GA-BK/N
バッファロー USBメモリ 32GB USB3.2(Gen1)/3.1(Gen 1)/3.0/2.0 充実サポート RUF3-K32GA-BK/N
¥880

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

デジタル用語辞典

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