Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/112: Рейтинг темы: голосов - 112, средняя оценка - 4.75
18 / 34 / 2
Регистрация: 28.01.2012
Сообщений: 181

Аппаратный серийный номер флешки (как долго я искал)

20.04.2012, 22:21. Показов 23029. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
нашел пример, которая вытаскивает аппаратный серийный номер флешки (наконец-то) не постесняюсь выложить код. Честно говоря у меня было такое ощущение, что люди постеснялись выложить код
но одна проблема встала: как мне серийный номер привязать к букве флешки?
C++
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
57
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <stdio.h>
#include <windows.h>
#include <Setupapi.h>
#include <devguid.h>
#include "conio.h"
#include "tchar.h"
//#include <devguid.h>
DEFINE_GUID( GUID_DEVCLASS_USB,0x36FC9E60, 0xC465, 0x11CF, 0x80, 0x56, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 );
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
HDEVINFO deviceInfoSet;
GUID *guidDev = (GUID*) &GUID_DEVCLASS_USB;
deviceInfoSet = SetupDiGetClassDevs(guidDev, NULL, NULL, DIGCF_PRESENT | DIGCF_PROFILE);
TCHAR buffer [4000];
int memberIndex = 0;
while (true)
        {
        SP_DEVINFO_DATA deviceInfoData;
        ZeroMemory(&deviceInfoData, sizeof(SP_DEVINFO_DATA));
        deviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
        if (SetupDiEnumDeviceInfo(deviceInfoSet, memberIndex, &deviceInfoData) == FALSE)
                {
                if (GetLastError() == ERROR_NO_MORE_ITEMS)
                        {
                        break;
                        }
                }
        DWORD nSize=0 ;
        SetupDiGetDeviceInstanceId (deviceInfoSet, &deviceInfoData, buffer, sizeof(buffer), &nSize);
        buffer [nSize] ='\0';
        _tprintf (_T("%s\n"), buffer);
        memberIndex++;
        //Label1->Caption=String(buffer);
        if (String(buffer).SubString(1,8)=="USB\\VID_")
        ShowMessage(String(buffer));  // AnsiString dsa; dsa=dsa.SubString(dsa.Pos("USB\\"),)
        }
if (deviceInfoSet)
        {
        SetupDiDestroyDeviceInfoList(deviceInfoSet);
        }
        
}
//---------------------------------------------------------------------------
программа возвращает VID, PID и серийный номер в виде USB\VID_XXXX_PID_YYYY\ZZZZ, где XXXX-VID, YYYY-PID, ZZZZ-Серийный номер (Аппаратный!!!!!! который я так долго искал)
Программный серийный номер можно легко достать функцией GetVolumeInformation
11
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.04.2012, 22:21
Ответы с готовыми решениями:

Определить аппаратный серийный номер флешки
Как определить аппаратный серийный номер флешки, именно НЕ серийный номер тома. В интернете масса вариантов но все они именно на...

Аппаратный серийный номер флэш накопителя
Здравствуйте! Как можно считать аппаратный серийный номер с флэшки? Функция Getvolumeinformation не подходит так как это серийник тома ии...

Как считывать серийный номер флешки
Здраствуйте, как считывать серийный номер флешок?

9
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
21.04.2012, 00:16
Dondok, а можно комментарий к вашему коду?
0
18 / 34 / 2
Регистрация: 28.01.2012
Сообщений: 181
21.04.2012, 00:30  [ТС]
EdarGp, это не мой код. Где-то в интернете нашел, уже не помню. Как я понял перечисляет все устройства и выдает информацию. Но я там в конце еще поставил условие чтобы отображать только USB-устройства
C++
1
if (String(buffer).SubString(1,8)=="USB\\VID_") ShowMessage(String(buffer));
в buffer перечисляет все устройства. я как бы фильтр поставил.

Добавлено через 5 минут
теперь появилась другая проблема!!!
Надо как то информацию об USB-устройствах как-то привязать к буквам флешек. Например, допустим что подключено 2 USB и можно же перепутать серийные номера, так что надо как-то установить жесткую связь. Кто знает помогите... мне кажется функциями серии SetupDI***** как-то можно сделать, только какими???
0
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
23.04.2012, 00:31
а вы уверены что номер получаете правильно?
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
23.04.2012, 01:32
Сходится

Странно что у мыши находит серийник, а специальная программка нет
1
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
23.04.2012, 09:28
Лучший ответ Сообщение было отмечено как решение

Решение

нашел пример, которая вытаскивает аппаратный серийный номер флешки (наконец-то) не постесняюсь выложить код. Честно говоря у меня было такое ощущение, что люди постеснялись выложить код
...................
Вложения
Тип файла: pdf Мини HASP ключ из любого устройства USB (Минск).pdf (155.9 Кб, 1428 просмотров)
5
0 / 0 / 0
Регистрация: 11.03.2014
Сообщений: 22
19.06.2014, 13:16
Dondok,
вы нашли ответ на вопрос "как мне серийный номер привязать к букве флешки?" - тоже очень интересуюсь
0
18 / 34 / 2
Регистрация: 28.01.2012
Сообщений: 181
21.06.2014, 13:56  [ТС]
Нет к сожалению. Надо копать в сторону исходника винды. Допустим для безопасного извлечения флешки винда же как то связывает букву с серийником.
Если хорошо искать то можно найти в интернете исходник винды, но это будет нарушением прав компании майкрософт. Так что думайте сами
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
21.06.2014, 16:04
LaVie, посмотрите здесь (и плюсик ISergey обязательно поставьте)
Получить пути к USB накопителям

Возможно, существует еще лучшее решение (через какой-нибудь IOCTL),
но я такого не знаю. Кстати, Windows ведь умеет это делать (свойства диска - тома),
но как именно - неизвестно. Можно в отладчике посмотреть или через
какой-нибудь API Hook...

Цитата Сообщение от Dondok Посмотреть сообщение
Если хорошо искать то можно найти в интернете исходник винды, но это будет нарушением прав компании майкрософт.
Можно вполне легально скачать WRK по какой-нибудь программе.
Только вряд ли вы там найдете искомое, как и в старых сорцах NT4/Win2k...
1
188 / 120 / 4
Регистрация: 23.01.2010
Сообщений: 1,320
24.09.2016, 23:07
C#
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
 public partial class РегНовКлюча : Form
    {
        public РегНовКлюча()
        {
            InitializeComponent();
        }
 
 
        private string parseSerialFromDeviceID(string deviceId)
        {
            string[] splitDeviceId = deviceId.Split('\\');
            string[] serialArray;
            string serial;
            int arrayLen = splitDeviceId.Length - 1;
 
            serialArray = splitDeviceId[arrayLen].Split('&');
            serial = serialArray[0];
 
            return serial;
        }
 
        private string parseVenFromDeviceID(string deviceId)
        {
            string[] splitDeviceId = deviceId.Split('\\');
            string Ven;
            //Разбиваем строку на несколько частей. 
            //Каждая чаcть отделяется по символу &
            string[] splitVen = splitDeviceId[1].Split('&');
 
            Ven = splitVen[1].Replace("VEN_", "");
            Ven = Ven.Replace("_", " ");
            return Ven;
        }
 
        private string parseProdFromDeviceID(string deviceId)
        {
            string[] splitDeviceId = deviceId.Split('\\');
            string Prod;
            //Разбиваем строку на несколько частей. 
            //Каждая чаcть отделяется по символу &
            string[] splitProd = splitDeviceId[1].Split('&');
 
            Prod = splitProd[2].Replace("PROD_", ""); ;
            Prod = Prod.Replace("_", " ");
            return Prod;
        }
 
        private string parseRevFromDeviceID(string deviceId)
        {
            string[] splitDeviceId = deviceId.Split('\\');
            string Rev;
            //Разбиваем строку на несколько частей. 
            //Каждая чаcть отделяется по символу &
            string[] splitRev = splitDeviceId[1].Split('&');
 
            Rev = splitRev[3].Replace("REV_", ""); ;
            Rev = Rev.Replace("_", " ");
            return Rev;
        }
 
 
 
private void button1_Click(object sender, EventArgs e)
        {
 
 
 
            string diskName = string.Empty;
 
 //Получение списка накопителей подключенных через интерфейс USB
            foreach (System.Management.ManagementObject drive in
                      new System.Management.ManagementObjectSearcher(
                       "select * from Win32_DiskDrive where InterfaceType='USB'").Get())
            {
                //Получаем букву накопителя
                foreach (System.Management.ManagementObject partition in
                new System.Management.ManagementObjectSearcher(
                    "ASSOCIATORS OF {Win32_DiskDrive.DeviceID='" + drive["DeviceID"]
                      + "'} WHERE AssocClass = Win32_DiskDriveToDiskPartition").Get())
                {
                    foreach (System.Management.ManagementObject disk in
                 new System.Management.ManagementObjectSearcher(
                        "ASSOCIATORS OF {Win32_DiskPartition.DeviceID='"
                          + partition["DeviceID"]
                          + "'} WHERE AssocClass = Win32_LogicalDiskToPartition").Get())
                    {
                        //Получение буквы устройства
                        diskName = disk["Name"].ToString().Trim();
                        // listBox1.Items.Add("Буква накопителя=" + diskName);
                    }
                }
 
 textBox1.Text = drive["Model"].ToString();
 
 
 textBox2.Text = parseVenFromDeviceID(drive["PNPDeviceID"].ToString().Trim());
 
 textBox3.Text = parseProdFromDeviceID(drive["PNPDeviceID"].ToString().Trim());
 
 
 textBox7.Text = parseRevFromDeviceID(drive["PNPDeviceID"].ToString().Trim());
 
textBox5.Text = parseSerialFromDeviceID(drive["PNPDeviceID"].ToString().Trim());
 
 
 }
 
        }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.09.2016, 23:07
Помогаю со студенческими работами здесь

серийный номер флешки
Подскажите, можно ли вообще узнать програмным путем (C#) серийный номер флешки? И если можно, то как?

Серийный номер флешки
ManagementObjectSearcher theSearcher = new ManagementObjectSearcher(&quot;SELECT * FROM Win32_DiskDrive WHERE InterfaceType='USB'&quot;); ...

Серийный номер флешки
Нужно узнать физический серийник флэшки. GetVolumeInformation - возвращает серийный номер тома, который меняется при форматировании. ...

Узнать серийный номер флешки
Всем привет, нужна помощь. Как узнать серийный номер флешки средствами VB, так же как запретить запуск приложения если серийный номер не...

Серийный номер USB флешки
Доброе время суток помогите исходничком, необходимо при нажатии на кнопку в эдите выдовало Серийный номер USB флешки.Заранее спасибо


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru