【问题标题】:Get USB serial number c++获取USB序列号c++
【发布时间】:2013-01-19 22:31:01
【问题描述】:

我希望在 c++ 中从 Windows 上的 USB 记忆棒中检索序列号。

我找到了很多 C# 示例,以及适用于 linux 的 c++,但没有找到适用于 c++ 和 windows 的示例。

编辑

  • 很遗憾,C++/CLI 不是一个选项。
  • 我正在查找设备的序列号而不是文件系统。或“设备实例路径”又名“InstanceID”

【问题讨论】:

  • 如果 C++/CLI 是一个选项,您可以使用与现有 C# 示例相同的方法。或者,您可以发布指向其中一个 .NET (C#) 示例的链接,有人可能知道如何为您将其转换为 Win32 (C)。
  • C# 示例可以翻译。你说的是设备序列号还是文件系统?
  • 本题展示.net解决方案stackoverflow.com/questions/450009/…
  • @danatel:在同一页面上有一个 Win32 示例的链接。
  • @Steven,它可能在 VB 中,但它使用 Win32 API 或 WMI API。可从 C++ 获得。只需使用 msdn.com 并搜索示例中使用的函数即可。

标签: c++ windows usb


【解决方案1】:

我有一篇关于如何在不使用 WMI 的情况下在 C++ 中获取卷的 USB 序列号的文章

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

这样做有一个技巧,您必须将 USB 设备与磁盘卷相匹配。如果可以,您希望避免 WMI,因为它不可靠。

【讨论】:

    【解决方案2】:

    如果需要 C++,那么您必须编写 COM 代码。对比VB.NET代码有点不爽,不过MSDN library有很好的例子,你只需要修改查询即可。

    请注意,您链接到的示例确实返回设备本身的序列号,只是设备上的文件系统。 USB 设备没有序列号。

    文件系统序列号很容易复制,以防您打算编写某种许可实施方案。如果这很重要,那么您应该使用专为此目的设计的 USB 设备。一个加密狗。不可能破解。制造商将提供用于验证许可证的 C++ 代码。

    【讨论】:

    • 是的,这正是我要使用此序列号的目的。许可制度。您将如何更改“文件系统序列号”?
    • 您在谈论 GetVolumeInformation(),我知道如果每次驱动器格式化时信息都会发生变化,则此位。即时更改它的实用程序:codeproject.com/kb/system/change_drive_sn.aspx 但我还没有听说有任何更改会更改设备的“设备实例路径”或“Ins​​tanceID”。
    • 大多数 USB 设备都有序列号。如果您想要实际的设备序列号,则必须将 USB 设备与磁盘卷相匹配。请参阅我的答案以及下面有关如何操作的文章的链接。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2010-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 2021-03-02
      相关资源
      最近更新 更多