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

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

20.04.2012, 22:21. Показов 23054. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД 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. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru