|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
03.05.2011, 23:53 | #1 |
Пользователь
Регистрация: 09.03.2010
Сообщений: 48
|
Получение серийника USB
Всем привет!
Задача- прочитать серийник флешки ( а вместе с тем и вендора и пр лабуду). Делаю так: Код:
Вообще результата было 2: 1- первые пол часа проверки с 10 флешками- номера выдавалаись полностью уникальными, и начинались на 0370 и т.д. 2-вторые пол часа проверки (повторный запуск ТОГО ЖЕ кода) стали давать другие номера, и начинались с 0136 и т.д. И третье-не результат, а просто пустота. Вопрос-что я не так делаю? По коду-открытие файла происходит без проблем (о чем свидетельствуетвывод инфы о действии). А номера вот никакие не приходят ко мне в dg (именно в него и должно приходить все ето безобразие). Помогите люди добрые-ткните пальцем где косяк Последний раз редактировалось rpy3uH; 04.05.2011 в 10:10. |
04.05.2011, 10:23 | #2 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
я тоже занимался этой проблемой, но так и не добился результатов. получал серийные номера и ID через SetupAPI. Я смог получить почти все значения и выпадающего списка но "Код экземпляра устройства никак не получается"
Вот функция которая их получает. Выделенные строки на скриншотах уникальны для каждой флешки. Они разные даже для двух одинаковых флешек. Сравнивай значения полученные твоей программой с этими если они совпадают, значит твоя программа работает нормально. Каждая флешка в системе представлена как несколько устройств: как дисковый накопитель и как устройство USB. Их коды немного отличаются он цифры в них идентичные, просто добавляются некоторые буковки. Последний раз редактировалось rpy3uH; 04.05.2011 в 10:27. |
04.05.2011, 10:42 | #3 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
Максимум что у меня получалось : это получить уникальные коды флешек во время из вставки и выдёргивания. В воткнутом состоянии никак, в основном ерунду получаю.
В своей статье я писал как узнать когда вставляют новое устройство В прицепе программа-пример к этой статье. На скришоте показано где выводятся уникальные коды флешек. Они составляются из кода экземпляра плюс какой-то GUID. в общем смысл понятен, если что-то получиться сделать отпишись пожалуйста |
04.05.2011, 16:57 | #5 |
Пользователь
Регистрация: 09.03.2010
Сообщений: 48
|
грузин, СПАСИБО!
Подкинул идеи. Буду ковырять дальше вопрос. Конечно исходники твои еще править и править, но в целом очень помогло. |
06.05.2011, 11:54 | #6 |
C/C++, Asm
Участник клуба
Регистрация: 02.03.2010
Сообщений: 1,323
|
В целом, согласно спецификаций заложенных в USB, серийник не является обязательным для USB устройств, и реализация серийника в прошивке оставленна на усмотрение производителя. В случае если производитель решает использовать серийные номера он должен обеспечить их уникальность. Это я к тому, что в большинстве никто не утруждает себя написанием мега прошивок с поддержкой опциональных USB фичей.
Винда в свою очередь для собственного удобства генерит уникальные идентификаторы, которые являются именами ключей в реестре (HKLM\System\CurrentControlSet\Enum \USB\Vid&Pid\имя). В целом эти ключи единсвенные к которым может получить доступ драйвер устройства, для сохрания кофигурации или данных. Если у устройства и есть некий уникальный ID, то он скорее всего всего нацарапан лазером на корпусе. Ну а для чтения USB дескрипторов можно пользоваться DeviceIoControl с IOCTL_GET_USB_DESCRIPTOR. |
07.05.2011, 16:11 | #7 |
C/C++, Asm
Участник клуба
Регистрация: 02.03.2010
Сообщений: 1,323
|
Просмотрел свой код, IOCTL_GET_USB_DESCRIPTOR работате только для imaging device.
Немного покурил, получилась вот такая фигня: Код:
Последний раз редактировалось f.hump; 07.05.2011 в 18:42. Причина: покурил еще немного |
08.05.2011, 13:24 | #8 |
C/C++, Asm
Участник клуба
Регистрация: 02.03.2010
Сообщений: 1,323
|
Прочитал наконец-то код из первого поста.
Для того чтобы получить CHANGER_PRODUCT_DATA нужно спрашивать IOCTL_CHANGER_GET_PRODUCT_DATA. Результат - ASCII строки, конвертировать их inttostr не нужно (кроме DeviceType котрый всегда должен быть равен MEDIUM_CHANGER). |
25.05.2011, 11:48 | #9 |
Пользователь
Регистрация: 09.03.2010
Сообщений: 48
|
f.hump, спасибо за участие.
2 all решил проще-через wmi запрос. Винда все выдает в виде строки. А дальше парсим ее и выдераем что нужно. |
03.04.2012, 17:55 | #10 |
Новичок
Джуниор
Регистрация: 03.04.2012
Сообщений: 1
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
3G usb-модем и получение смс | belarusfight | C/C++ Сетевое программирование | 4 | 22.01.2012 21:53 |
USB | BNTU | Помощь студентам | 4 | 22.04.2011 01:31 |
QT4 - Определение серийника жёсткого диска | xwicked | Qt и кроссплатформенное программирование С/С++ | 2 | 06.08.2010 23:35 |
mini USB на USB | viks1 | Компьютерное железо | 5 | 07.12.2009 23:31 |
C pc\2 на USB | RockForr | Компьютерное железо | 12 | 22.09.2009 19:43 |