2010-06-22 116 views
4

我正在寻找从USB存储棒中检索C++的窗口中的序列号。获取USB序列号C++

我发现很多C#的例子,C++ for linux但没有用于C++和windows。

编辑

  • C++/CLI不不幸的选项。
  • 我正在寻找设备的序列号而不是文件系统。或“设备实例路径”AKA“InstanceID”
+1

如果C++/CLI是一个选项,您可以使用与现有C#示例相同的方法。或者,您可以发布一个指向.NET(C#)示例的链接,并且有人可能会知道将其转换为Win32(C)的方法。 – 2010-06-22 20:23:53

+0

C#示例将是可翻译的。你在谈论设备或文件系统的序列号吗? – 2010-06-22 20:25:20

+0

这个问题显示.net解决方案http://stackoverflow.com/questions/450009/how-to-get-serial-number-of-usb-stick-in-c – danatel 2010-06-22 20:34:46

回答

3

如果C++是需求,那么您将不得不编写COM代码。与VB.NET代码相比,有点不高兴,但在MSDN library中有很好的例子,你只需要调整查询。

请注意,您链接的示例不是而是返回设备本身的序列号,只是设备上的文件系统。 USB设备没有序列号,这与它要达到的一样好。

如果您正在考虑编写某种授权执行方案,则文件系统序列号很容易重复。如果这很重要,那么您应该使用专为此目的而设计的USB设备。一个加密狗。不可能破解。验证许可证的C++代码将从制造商处获得。

+0

是的,这就是我准备使用此序列号的原因。一个许可证制度。你将如何去改变“文件系统序列号”? – 2010-06-22 21:24:41

+0

您是否在谈论GetVolumeInformation(),我知道这个位如果信息每次变化都是格式化的。实用程序可以即时更改它:http://www.codeproject.com/kb/system/change_drive_sn.aspx 但我没有听说任何改变改变“设备实例路径”或“Ins​​tanceID”的一个设备。 – 2010-06-22 21:35:17

+3

大多数USB设备都有序列号。如果您需要实际的设备序列号,则必须将USB设备与磁盘卷匹配。看到我的答案和一篇关于如何在下面做文章的链接。 – 2012-08-05 19:18:53

1

序列号是下HKLM\SYSTEM\CCS\Enum\USB\Vid_xxxx&Pid_yyyy

6

我对如何获得在C卷++ USB序列号的一篇文章的子项,而无需使用WMI

http://oroboro.com/usb-serial-number/

有一招,做它必须将USB设备与磁盘卷进行匹配。如果可以,您希望避免WMI,因为它不可靠。