如何在c ++中获取有关可执行文件所在驱动器的信息

时间:2012-05-10 13:27:02

标签: c++ usb libusb

我的应用程序将从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访问权限,而且在我看来有点不可靠。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

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

对于Windows:

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

对于Unix:

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

希望它有所帮助。