2012-05-10 9 views
0

私のアプリはvendor-id、device-idなどの特定の情報を持つUSBキーから実行されます。実行ファイルがどこにあるかについての情報を入手する方法C++

私は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の場合、私はFATファイルシステムを持つドライブのシリアル番号を読むために、Linuxの関数GetVolumeInformation()を使用します.FATバージョンに応じて、0x27または0x43から始まる対応する/ dev/*ファイルの4バイトを読み込みます。

しかし、この読書は、プログラムにはないルートアクセスを必要とし、それは私には少し信頼できないようです。

アイデア?

+2

クロスプラットフォームの意味はどのプラットフォームですか?私はあなたがMVSを気にしないと思うので、おそらくいくつかのWindowsのバージョン、Linux、OS Xが含まれていますか?アンドロイド? iOS? –

+1

argcとargvのmain()の引数を取る場合、最初の引数は、実行可能ファイルのコマンド(実行に使用されたコマンド)を常にフルパス情報で示します。そこからlibusb –

+0

Windows、Linux、OS Xのようなものを使うことができます。それはモバイルデバイスでは使用されません。 パスは私をlibusbデータ構造デバイスにリンクできますか? – perelo

答えて

0

私は興味をそそられている方々のために私に合った解決策を見つけました。 Windowsの場合

は、私は、ドライブ文字を知って、レジストリからデバイスのシリアル番号を抽出します。HKEY_LOCAL_MACHINE \ SYSTEM \ MOUNTEDDEVICES \ DosDevices \ X:

のUnix用

私が手/devファイルにdfコマンドを入力した場合、/devファイルに対応する/sys/blockのリンクを読み込みます(例:ドライブは/ dev/sdbです)、/sys/block/sdbのリンクを読み取ります。次にファイルserialがlリンクが指すディレクトリには、6xディレクトリが後方にあります。

希望します。

関連する問題