2012-05-10 36 views
0

我的應用程序將從USB密鑰中運行,其中包含供應商ID,設備ID ...等我需要的特定信息。如何獲取可執行文件位於C++中的驅動器的信息

我試過使用libusb,但儘管我仍然無法使它正常工作,我怎麼能找到正確的USB驅動器來獲取信息?

請注意,我希望代碼是跨平臺的,這就是爲什麼我首先選擇libusb。

編輯:

我發現了一個程序(usbviewer)時,它的連接,列舉所有的USB接口和驅動器上的特定信息。

我已經閱讀了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,我使用Linux上的函數GetVolumeInformation()來讀取帶有FAT文件系統的驅動器的序列號,根據FAT版本,我從對應的/ dev/*文件中讀取4個字節,從0x27或0x43開始。

但是這樣的閱讀需要程序沒有的根訪問權限,在我看來這有點不可靠。

任何想法?

+2

跨平臺的含義是哪個平臺?我想你不關心MVS,所以它可能包含一些Windows版本,Linux,OS X? Android的? iOS版? –

+1

如果您將argc和argv的main()參數指定爲第一個參數,那麼第一個參數始終指向(用於執行的命令)您的可執行文件,並提供完整路徑信息。從那裏,你可以使用像Windows,Linux和OS X的libusb –

+0

,它不會被移動設備使用。 路徑如何連接到libusb數據結構設備? – perelo

回答

0

我發現適合我的解決方案適合那些有興趣的人。

對於Windows:

我提取從註冊表中設備的知道驅動器盤符的序列號:HKEY_LOCAL_MACHINE \ SYSTEM \加載設備\的DosDevices \ X:

對於Unix:

我得到使用df命令的/dev文件,然後我讀/sys/block對應的/dev文件對應的鏈接(例如:驅動器是/ dev/sdb,我讀取的鏈接爲/sys/block/sdb,然後我讀取文件serial這是l位於鏈接指向的目錄中,6x目錄向後。

希望它有幫助。

相關問題