QA@IT

レジストリのUSBデバイスのVENとVID、PRODとPIDの相互変換はできますでしょうか?

6843 PV

レジストリのUSBデバイスのVENとVID、PRODとPIDの相互変換はできますでしょうか?

Windows7です。

レジストリのUSBデバイス情報を調べると、
VENとVID、PRODとPIDが混在しています。

VBやCでそれらを相互変換する方法はないでしょうか?

VENはベンダーの略称、VIDはベンダーのコード
PRODはプロダクト名の略称、PIDはプロダクトのコードのようです。

回答

flied_onion さま
ご回答ありがとうございます。

ひとつのレジストリ項目では混在していません。

レジストリ項目により異なっているということです。

たとえば下記のようになっています。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR\CdRom&Ven_Optiarc&Prod_DVD_RW_AD-7560A&Rev_DX09

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\VID_0411&PID_00F9\DEF110C88466

これが同じデバイスであることは、デバイスマネジャーで確認しました。

最終的に取得したい項目は下記です。
今まで接続したUSBデバイスについて
1.FriendlyName
2.VID
3.PID
4.シリアルNO
5.初回接続日時
6.最終接続日時
を列挙することです。

FriendlyNameは
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR\CdRom&Ven_Optiarc&Prod_DVD_RW_AD-7560A&Rev_DX09
にあるのですが、VIDなどを知るのはどうすればいいのかがわかりません。

デバイスマネジャーで確認する作業を、プログラムでやりたいということです。

よろしくお願いします。

編集 履歴 (0)

レジストリのUSBデバイス情報を調べると、
VENとVID、PRODとPIDが混在しています。

どこのレジストリキーで混在していますか?

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB ではそんなことも無いように思いますが機器によってはそうなるんでしょうか。


調べてみましたが
ベンダーIDはusb implementers forumから発行されるものなので、
http://www.usb.org/developers/tools/
のCompanyListとInvalid VIDs(古いVID、会社名変わったりした場合など?)を組み合わせればVIDからベンダ名を導くことはできるんじゃないかと思います。
(100%網羅できるかは保証できませんが)

ただしWindowsがベンダ名をどのように取得しているかはわかりませんので、VENからVIDにできるかはわかりません。


接続中のデバイスに関しては
DeviceIoControlの
IOCTL_USB_GET_NODE_CONNECTION_INFORMATIONとIOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTIONを
IDと名前を両方取得できるかもしれません。取得できれば相互変換できるんじゃないでしょうか。
(概ね取れると思うんですが中には取得できないものもありました。)

Cですと以下が参考になりそうです。

http://blogs.msdn.com/b/jpwdkblog/archive/2009/04/20/usbview-inside.aspx


また、ライセンスに従える場合は以下の情報を利用するという手もあると思います。
http://www.linux-usb.org/usb-ids.html


目的が見えなかったのでいろいろ上げさせてもらいましたが、
VIDは日々変わるものであり、PIDに関してはベンダが自由に決められるものであることも留意してください。

マルチポストしているようですが、いずれかのサイトで解決した場合はすべてのサイトに結果を書くようにしてくださいね。

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。