Получение серийного номера USB-flash

AIS
Дата: 15.07.2018 00:42:08
Есть, например, варианты, как получить серийный номер USB-flash:
1. прочитать значение используя функции WinAPI для работы с реестром, т.е. взять раздел
"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Disk\Enum"

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

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

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

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

выделенное не серийный номер физического устройства и не логического диска, но тогда что?
mayton
Дата: 15.07.2018 10:24:22
Не уверен что реестр будет представлять актульную информацию на данный момент времени. Я-бы проверил этот факт.

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

По сабжу... в линуксе есть
lsusb -v 
Eolt
Дата: 15.07.2018 11:50:01
AIS,

серийный номер не хранится в реестре, я считывал его прямо из устройства. Кстати зачем тебе серийник если не секрет?
AIS
Дата: 16.07.2018 00:18:49
mayton
Не уверен что реестр будет представлять актульную информацию на данный момент времени. Я-бы проверил этот факт.

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

По сабжу... в линуксе есть
lsusb -v 

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

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

Какой именно серийник не хранится? Как Вы считываете его прямо из устройства? Поделитесь опытом. (напоминаю, что речь идет в частности о USB-flash)
Eolt
Дата: 16.07.2018 10:24:37
Eolt
AIS,
Какой именно серийник не хранится? Как Вы считываете его прямо из устройства?


VendorID я считывал из устройства функцией DeviceIoControl
AIS
Дата: 16.07.2018 11:36:47
Eolt
Eolt
AIS,
Какой именно серийник не хранится? Как Вы считываете его прямо из устройства?


VendorID я считывал из устройства функцией DeviceIoControl

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

Это странно, я тестировал на большом количестве флешек и серийник всегда возвращался.
Хотя возможно, на китайских флешках просто нет этой информации.
AIS
Дата: 16.07.2018 15:21:47
Eolt
AIS,

Это странно, я тестировал на большом количестве флешек и серийник всегда возвращался.
Хотя возможно, на китайских флешках просто нет этой информации.

Уточните как Вы его получали для начала через DeviceIoControl, т.е. скрипт одинаковый и для HDD, и USB-flash, а только в начале указали у кого нужен серийный номер? Так что ли? И все работает? Или все же для USB-flash в части для получения SerialNumberOffset что то другое?
AIS
Дата: 16.07.2018 15:24:31
d7i
Гугл вроде бы ещё живой...
http://www.cyberforum.ru/cpp-builder/thread553816.html

На мой взгляд, получить это значение из реестра проще 21571443 и быстрее, чем через гугл... ))