Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Получение серийного номера USB-flash / 12 сообщений из 12, страница 1 из 1
15.07.2018, 00:42
    #39674083
AIS
AIS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение серийного номера USB-flash
Есть, например, варианты, как получить серийный номер 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
15.07.2018, 10:24
    #39674104
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение серийного номера USB-flash
Не уверен что реестр будет представлять актульную информацию на данный момент времени. Я-бы проверил этот факт.

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

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

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

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

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


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

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

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

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

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

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

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

Код: 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
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Получение серийного номера USB-flash / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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