多くの USB デバイスには一意のシリアル番号 (実際には Unicode 文字列) が含まれており、ホストはこれを 16 ビットのベンダーおよび製品 ID 番号と組み合わせて使用して、デバイスを一意に識別できます。
システムに接続されているすべての USB ヒューマン インターフェイス デバイスのリストを表示できる Windows アプリケーションを作成する方法を見つけようとしています。リストには、システム キーボードを含む HID ごとに 1 つの行があります。リストには、ベンダー ID、製品 ID、およびシリアル番号の列があります。
SetupDiGetClassDevsから返された GUIDを使用して呼び出しHidD_GetHidGuid、 を繰り返し呼び出して結果をループすることで、USB HID のリストを取得できますSetupDiEnumDeviceInterfaces。その後、 を呼び出しSetupDiGetDeviceInterfaceDetailて各デバイスへのパスを取得できます。パスは で開くことができますがCreateFile、システム キーボードでは拒否される読み取り権限も書き込み権限も要求しないように注意する必要があります。そこから を呼び出して、ベンダーと製品の ID 番号を取得できますHidD_GetAttributes。
シリアル番号の文字列を取得する方法がわかりません。この問題の解決策を検索すると、USB 大容量記憶装置デバイスのシリアル番号を取得する方法に関する多くの情報が見つかりますが、他のタイプの USB デバイスに適用できると思われるものは何もありません。シリアル番号文字列を取得するための一般的な方法または HID 固有の方法を発見できれば幸いです。
の Win32 ポートlibusbならそれほど問題なくこれを管理できると思いますが、残念ながら、上記の関数を含むsetupapiやDLL など、Windows に付属のライブラリのみに依存するソリューションが必要です。hid
どんな提案でも大歓迎です!