私のアプリは、必要なベンダー ID、デバイス ID などの特定の情報を持つ USB キーから実行されます。
libusb を使用してみましたが、まだ適切に動作させることはできませんが、情報を取得する適切な USB ドライブを見つけるにはどうすればよいでしょうか?
コードをクロスプラットフォームにしたいことに注意してください。そのため、最初に libusb を選択します。
編集 :
ドライブが接続されているときに、すべての USB ポートとドライブに関する特定の情報を列挙するプログラム (usbviewer) を見つけました。
Linux のソースを読んだことがあります。情報は /proc/bus/usb/devices から直接抽出されます。非常に簡単です。
しかし、Windows では、USB ノード接続情報を取得するには、データ構造 (ハブ コントローラー、ルート ハブ、ポートの列挙など) で実際の情報を取得する前に約 1000 行かかります。
反対側のlibusbは、情報に到達する前に、INFファイルを生成し、各デバイスのinf-wizard.exeを介してドライバーをインストールするように強制します(ただし、Linuxでは試しませんでした)。
編集2:
Windows、Linux、および Mac OS X でデバイスのシリアル番号を取得する方法を見つけました (MAC OS X は試していませんが、Linux と同じように動作するはずです)。Windows では関数を使用し、GetVolumeInformation()
Linux では FAT ファイル システムのドライブのシリアル番号を読み取ります。FAT のバージョンに応じて、対応する /dev/* ファイルの 0x27 または 0x43 から始まる 4 バイトを読み取ります。
しかし、この読み取りには、プログラムにはないルートアクセスが必要であり、少し信頼性がないように思えます。
何か案は ?