0

我的应用程序将从具有特定信息的 USB 密钥运行,例如我需要的供应商 ID、设备 ID 等。

我尝试使用 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,我GetVolumeInformation()在 Linux 上使用函数来读取具有 FAT 文件系统的驱动器的序列号,我在相应的 /dev/* 文件中读取 4 个字节,从 0x27 或 0x43 开始,具体取决于 FAT 版本。

但是这种阅读需要程序没有的root访问权限,在我看来有点不可靠。

有任何想法吗 ?

4

1 回答 1

0

对于那些有兴趣的人,我找到了适合我的解决方案。

对于 Windows:

我从注册表中提取设备的序列号,知道驱动器号:HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices\DosDevices\X:

对于 Unix:

/dev用命令获取文件df,然后读取与文件/sys/block对应的链接/dev(例如:驱动器是/dev/sdb,我读取了.的链接/sys/block/sdb。然后我读取了serial位于链接指向的目录中的文件, 6x 目录向后。

希望能帮助到你。

于 2012-05-23T08:22:31.370 回答