1

二进制文件位于用作加密狗的 USB 密钥上。

我需要从密钥中获取唯一标识符。VendorID + DeviceID 是不可能的,因为如果 USB 密钥的型号相同,它们可能是相同的。

使用 Windows,我使用了一个功能GetVolumeInformation(),它给我一个序列号,每次格式化设备时都会更改(不是问题)。

使用Unix,要得到相同的序列号,需要读取目录下对应的挂载文件/dev/。但是这个操作需要root 访问权限,或者至少我需要成为特定组的一部分。

唯一标识符可能与 Win32 系统上的序列号不同。但是对于我将用于交付的每个 USB 密钥,它必须是不同的。

有任何想法吗 ?

4

3 回答 3

1

您可以在/dev/disk/by-uuid/目录中查找。设备节点有符号链接,符号链接名称是分区的 ID。

于 2012-05-15T08:30:40.413 回答
0

这里有一些想法:

  • 设备是否自动安装在系统上?如果是这样,它可能会通过自动挂载程序使用其设备名称进行挂载,并且该mount命令会告诉您设备名称。例如,安装到的东西是分区表中提供的设备名称/media/ABCD-1234ABCD-1234
  • /sys文件系统中存在一些关于设备的信息。一个是每个分区的大小。您可以在设备上放置多个分区,并使用一个具有特定大小的未格式化分区(不会被挂载)。然后该分区的大小将是您的序列号,例如通过 可用/sys/block/sdb/sdb1/size,这是世界可读的。
于 2012-05-15T08:39:24.870 回答
0

我已经设法通过使用df命令获取 /dev 文件来检索序列号

然后使用此代码并对其进行了一些修改:

linux C++下的U盘序列号

第三个答案(Orwellophile 的)

我不确定这是否适用于每个 Unix 系统,但现在还可以。

于 2012-05-23T09:33:49.027 回答