2010-06-22 118 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,因爲它不可靠。