我的应用程序将从USB密钥运行,该密钥具有我需要的vendor-id,device-id等特定信息。
我尝试使用libusb,但尽管我仍然无法使其正常工作,但我怎样才能找到合适的USB驱动器来获取信息?
请注意,我希望代码是跨平台的,这就是我首先选择libusb的原因。
编辑:
我找到了一个程序(usbviewer),它可以枚举所有usb端口以及连接时驱动器上的特定信息。
我已经阅读了linux的源代码,infos是直接从/ 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文件系统的驱动器的序列号,我在相应的/ dev / *文件中读取4个字节,从0x27或0x43开始,具体取决于FAT版本
但是这个阅读需要一个程序不具备的root访问权限,而且在我看来有点不可靠。
有什么想法吗?
答案 0 :(得分:0)
对于那些有兴趣的人,我找到了适合我的解决方案。
对于Windows:
我从知道驱动器号的注册表中提取设备的序列号:HKEY_LOCAL_MACHINE \ SYSTEM \ MountedDevices \ DosDevices \ X:
对于Unix:
我使用/dev
命令获取df
文件,然后我读取了与/sys/block
文件对应的/dev
中的链接(例如:驱动器是/ dev / sdb,我读了/sys/block/sdb
的链接。然后我读了文件serial
,它位于链接所指向的目录中,向后是6x目录。
希望它有所帮助。