powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Получение серийного номера USB-flash
12 сообщений из 12, страница 1 из 1
Получение серийного номера USB-flash
    #39674083
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть, например, варианты, как получить серийный номер USB-flash:
1. прочитать значение используя функции WinAPI для работы с реестром, т.е. взять раздел
Код: sql
1.
"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Disk\Enum"


и получить к примеру:
Код: sql
1.
"USBSTOR\Disk&Ven_CANYON&Prod_CN-USB20EFD0512A&Rev_1.0\d183b6e00603dd&0"


2. получить тоже используя другие функции WinAPI такие как:
SetupDiGetClassDev, SetupDiEnumDeviceInterfaces, SetupDiGetDeviceInterfaceDetail и др.

Оба варианта работают с реестром и берут от туда данные, т.е. не с физическим устройством на низком уровне (например, через DeviceIoControl), или я ошибаюсь?
Если да, то в чем разница вариантов?

И попутно ещё вопрос:
- по тому же разделу в реестре значение для HDD:
Код: sql
1.
"IDE\DiskST1000DM003-1CH162______________________CC46____\5&3b037a04&0&5.0.0"


выделенное не серийный номер физического устройства и не логического диска, но тогда что?
...
Рейтинг: 0 / 0
Получение серийного номера USB-flash
    #39674104
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не уверен что реестр будет представлять актульную информацию на данный момент времени. Я-бы проверил этот факт.

А что будешь дальше делать с этим номером?

По сабжу... в линуксе есть
Код: sql
1.
lsusb -v 
...
Рейтинг: 0 / 0
Получение серийного номера USB-flash
    #39674116
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AIS,

серийный номер не хранится в реестре, я считывал его прямо из устройства. Кстати зачем тебе серийник если не секрет?
...
Рейтинг: 0 / 0
Получение серийного номера USB-flash
    #39674275
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНе уверен что реестр будет представлять актульную информацию на данный момент времени. Я-бы проверил этот факт.

А что будешь дальше делать с этим номером?

По сабжу... в линуксе есть
Код: sql
1.
lsusb -v 


Как я понимаю, сервис визуализации реестра осуществляет regedit, и эта программа берет данные от туда же где и функции из setupapi.h.
Насчет актуальности, согласен, есть варианты...
Где буду использовать? Планы великие...)) Например, отслеживать кто, когда, что и куда втыкал (в хорошем смысле этого слова, т.е. говорим о USB-flash)
EoltAIS,

серийный номер не хранится в реестре, я считывал его прямо из устройства. Кстати зачем тебе серийник если не секрет?

Какой именно серийник не хранится? Как Вы считываете его прямо из устройства? Поделитесь опытом. (напоминаю, что речь идет в частности о USB-flash)
...
Рейтинг: 0 / 0
Получение серийного номера USB-flash
    #39674394
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EoltAIS,
Какой именно серийник не хранится? Как Вы считываете его прямо из устройства?

VendorID я считывал из устройства функцией DeviceIoControl
...
Рейтинг: 0 / 0
Получение серийного номера USB-flash
    #39674419
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EoltEoltAIS,
Какой именно серийник не хранится? Как Вы считываете его прямо из устройства?

VendorID я считывал из устройства функцией DeviceIoControl
На самом деле, на С++ используя DeviceIoControl я тоже могу получить все что нужно напрямую от устройства, включая серийник HDD, но серийник USB-flash не получается, поэтому пробую взять через реестр.
...
Рейтинг: 0 / 0
Получение серийного номера USB-flash
    #39674445
d7i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гугл вроде бы ещё живой...
http://www.cyberforum.ru/cpp-builder/thread553816.html
...
Рейтинг: 0 / 0
Получение серийного номера USB-flash
    #39674451
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AIS,

Это странно, я тестировал на большом количестве флешек и серийник всегда возвращался.
Хотя возможно, на китайских флешках просто нет этой информации.
...
Рейтинг: 0 / 0
Получение серийного номера USB-flash
    #39674542
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EoltAIS,

Это странно, я тестировал на большом количестве флешек и серийник всегда возвращался.
Хотя возможно, на китайских флешках просто нет этой информации.
Уточните как Вы его получали для начала через DeviceIoControl, т.е. скрипт одинаковый и для HDD, и USB-flash, а только в начале указали у кого нужен серийный номер? Так что ли? И все работает? Или все же для USB-flash в части для получения SerialNumberOffset что то другое?
...
Рейтинг: 0 / 0
Получение серийного номера USB-flash
    #39674546
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d7iГугл вроде бы ещё живой...
http://www.cyberforum.ru/cpp-builder/thread553816.html
На мой взгляд, получить это значение из реестра проще 21571443 и быстрее, чем через гугл... ))
...
Рейтинг: 0 / 0
Получение серийного номера USB-flash
    #39674626
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот нашел код чтения на бейсике, писал его 10 лет назад, в функцию передается имя диска

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Function GetUSB_Name(ByVal Disk As String) As String
  Local   inquiry As TInquiryData
          inquiry.SoftReset = 1
          inquiry.CommandQueue = 1
          inquiry.Reserved2 = 1
          inquiry.LinkedCommands = 1
          inquiry.Synchronous = 1
          inquiry.Wide16Bit = 1
          inquiry.Wide32Bit = 1
          inquiry.RelativeAddressing = 1

  Local hDSC As Long
  hDSC = CreateFile("\\.\" & Disk & ":",%GENERIC_READ Or %GENERIC_WRITE,%FILE_SHARE_READ Or %FILE_SHARE_WRITE,ByVal %NULL,%OPEN_EXISTING,0,ByVal %NULL)
  If hDSC = %INVALID_HANDLE_VALUE Then
       Function = $Nul
  Else
       GetDeviceName(hDSC,inquiry)
       Function = inquiry.VendorId  & " : " & _
                  inquiry.ProductId & " : " & _
                  inquiry.ProductRevisionLevel
  End If

  CloseHandle(hDSC)
End Function



На моей флешке этот код выдает такое
...
Рейтинг: 0 / 0
Получение серийного номера USB-flash
    #39674628
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин не скопипастил весь код, вот продолжение

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
Function SendCmd_to_DSC(ByVal hDSC As Long, ByVal i_command As Dword, ByVal buf As Dword, ByVal sizex As Dword) As Long
 Local Command As TScsiCommand
     Select Case i_command
               Case &h12: Type Set Command  = Chr$(&h12, 1) & MkWrd$(12)
               Case &hE0: Type Set Command  = Chr$(&hE0, 0) & MkWrd$(2)
               Case &hE1: Type Set Command  = Chr$(&hE1, 0) & MkWrd$(2)
               Case &hE2: Type Set Command  = Chr$(&hE2, 1) & MkWrd$(50)
               Case &hE3: Type Set Command  = Chr$(&hE3, 1) & MkWrd$(2)
               Case &hE4: Type Set Command  = Chr$(&hE4, 1) & MkWrd$(50)
               Case &hE5: Type Set Command  = Chr$(&hE5, 0) & MkWrd$(2)
      End Select

 Local datax As TScsiPassThrough

   datax.Length             = 44
   datax.ScsiStatus         = 0
   datax.PathId             = 0
   datax.TargetId           = 1
   datax.Lun                = 0
   datax.CdbLength          = 16
   datax.SenseInfoLength    = 24
   datax.DataIn             = command.data_in
   datax.DataTransferLength = sizex
   datax.TimeOutValue       = IIf(timeoutx, timeoutx ,command.timeoutx)
   datax.DataBuffer         = buf
   datax.SenseInfoOffset    = 48

   If(datax.DataIn) Then Poke$ buf, String$ (sizex,0)

   If command.command = &h12 Then
      datax.CdbLength = 12
      datax.Cmd.command = command.command
      datax.Cmd.sizex = sizex
   Else
      datax.USB.command = command.command
      datax.USB.size_lo = CByt(sizex)
      datax.USB.size_hi = CByt(sizex / &hFF)
   End If

   Local BytesReturned As Dword
   Local i             As Long

   Function = DeviceIoControl(hDSC,_
                              ByVal %IOCTL_SCSI_PASS_THROUGH_DIRECT,_
                              ByVal VarPtr(datax),_
                              SizeOf(datax),_
                              ByVal VarPtr(datax),_
                              SizeOf(datax),_
                              ByVal VarPtr(BytesReturned),_
                              ByVal %NULL )

End Function

Function GetDeviceName(ByVal hDSC As Long, inquiryx As TInquiryData) As Long
   Function = SendCmd_to_DSC(hDSC, %READ_DEVICE_NAME, VarPtr(inquiryx), ByVal SizeOf(TInquiryData))
End Function  
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Получение серийного номера USB-flash
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]