С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.96/47: Рейтинг темы: голосов - 47, средняя оценка - 4.96
2 / 2 / 0
Регистрация: 19.04.2014
Сообщений: 36

Модель и серийник жёсткого диска (WMI)

04.05.2014, 16:05. Показов 9372. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.
Помогите пожалуйста . Нужно "как-то" получить модель и серийник(но он не обязателен) харда. Как я понял единственный способ это WMI. Есть у кого рабочий код для C++ Builder ? (на компе будет ВСЕГДА 1 жесткий диск)
Заранее спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.05.2014, 16:05
Ответы с готовыми решениями:

Как правильно использовать WMI (получить сериный номер жесткого диска)
Здравствуйте! Пишу программу в VB 2010, Windows 7, 64 bit. Для нахождения серийника винта пробовал код: Public Function GetHDDIDWMI()...

Какая модель жесткого диска в ноуте Acer Aspire 1696WLMi?
Здравствуйте! Собственно в теме весь вопрос. Поиск в интернете ничего не дал (ну может я плохо искал?). Все что нашел - это что объем...

Нужно найти подходящую модель жесткого диска для ноутбука !
Совсем недавно на ноуте защелкал жесткий диск и решил купить вместо него ssd ,где то прочитал,что проблем с заменой быть не должно,мне его...

20
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,145
Записей в блоге: 3
05.05.2014, 18:14
В шапочку кидай
#include <Winioctl.h>

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
DWORD dwBytesReturned;
STORAGE_PROPERTY_QUERY query;
STORAGE_DEVICE_DESCRIPTOR *buffer;
 
buffer = new STORAGE_DEVICE_DESCRIPTOR[5];
 
HANDLE hDrive = CreateFile(L"\\\\.\\PhysicalDrive0", 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
 OPEN_EXISTING, 0, NULL);
 
memset ((void *)&query,  0, sizeof (query));
memset ((void *)buffer, 0, sizeof (buffer));
 
query.PropertyId = StorageDeviceProperty;
query.QueryType = PropertyExistsQuery;
 
//if( DeviceIoControl(hDrive, IOCTL_STORAGE_QUERY_PROPERTY, &query, sizeof(query),
//0, 0, &dwBytesReturned, NULL) != 0);
//Memo1->Lines->Add(L"Exist");
 
query.PropertyId = StorageDeviceProperty;
query.QueryType = PropertyStandardQuery;
// 1-й раз вызываем чтобы получить размер возвращаемых данных
// 500 в поле nOutBufferSize указано не верно, но размер возвращаемых данных не ясен.
DeviceIoControl(hDrive, IOCTL_STORAGE_QUERY_PROPERTY, &query, sizeof(query),
buffer, 500, &dwBytesReturned, NULL);
 
 
//DeviceIoControl(hDrive, IOCTL_STORAGE_QUERY_PROPERTY, &query, sizeof(query),
//buffer, dwBytesReturned, &dwBytesReturned, NULL);
/*
Memo1->Lines->Add("Version: " + IntToStr ((int)buffer.Version));
Memo1->Lines->Add("Size: " + IntToStr ((int)buffer.Size));
Memo1->Lines->Add("DeviceType: " + IntToStr ((int)buffer.DeviceType));
Memo1->Lines->Add("DeviceTypeModifier: " + IntToStr ((int)buffer.DeviceTypeModifier));
Memo1->Lines->Add("RemovableMedia: " + IntToStr ((int)buffer.RemovableMedia));
Memo1->Lines->Add("CommandQueueing: " + IntToStr ((int)buffer.CommandQueueing));
Memo1->Lines->Add("VendorIdOffset: " + IntToStr ((int)buffer.VendorIdOffset));
Memo1->Lines->Add("ProductIdOffset: " + IntToStr ((int)buffer.ProductIdOffset));
Memo1->Lines->Add("ProductRevisionOffset: " + IntToStr ((int)buffer.ProductRevisionOffset));
Memo1->Lines->Add("SerialNumberOffset: " + IntToStr((int)buffer.SerialNumberOffset));
Memo1->Lines->Add("BusType: " + IntToStr ((int)buffer.BusType));
*/
 
if (buffer->VendorIdOffset != 0) {
char *str = (char*) ((char*)buffer + buffer->VendorIdOffset);
Memo1->Lines->Add("VendorId: " + String(str));
}
if (buffer->ProductIdOffset != 0) {
char *str = (char*) ((char*)buffer + buffer->ProductIdOffset);
Memo1->Lines->Add("ProductId: " + String(str));
}
if (buffer->ProductRevisionOffset != 0) {
char *str = (char*) ((char*)buffer + buffer->ProductRevisionOffset);
Memo1->Lines->Add("ProductRevision: " + String(str));
}
if (buffer->SerialNumberOffset != 0) {
char *str = (char*) ((char*)buffer + buffer->SerialNumberOffset);
Memo1->Lines->Add("SerialNumber: " + String(str));
}
 
CloseHandle ( hDrive );
delete [] buffer;
1
2 / 2 / 0
Регистрация: 19.04.2014
Сообщений: 36
05.05.2014, 19:54  [ТС]
Спасибо большое!
Добавил в шапку #include <Winioctl.h> но что-то как-то...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[C++ Error] Unit1.cpp(29): E2451 Undefined symbol 'STORAGE_PROPERTY_QUERY'
[C++ Error] Unit1.cpp(29): E2379 Statement missing ;
[C++ Error] Unit1.cpp(30): E2451 Undefined symbol 'STORAGE_DEVICE_DESCRIPTOR'
[C++ Error] Unit1.cpp(30): E2451 Undefined symbol 'buffer'
[C++ Error] Unit1.cpp(32): E2303 Type name expected
[C++ Error] Unit1.cpp(32): E2379 Statement missing ;
[C++ Error] Unit1.cpp(35): E2034 Cannot convert 'wchar_t *' to 'const char *'
[C++ Error] Unit1.cpp(35): E2342 Type mismatch in parameter 'lpFileName' (wanted 'const char *', got 'wchar_t *')
[C++ Error] Unit1.cpp(37): E2451 Undefined symbol 'query'
[C++ Error] Unit1.cpp(37): E2109 Not an allowed type
[C++ Error] Unit1.cpp(38): E2109 Not an allowed type
[C++ Error] Unit1.cpp(40): E2451 Undefined symbol 'StorageDeviceProperty'
[C++ Error] Unit1.cpp(41): E2451 Undefined symbol 'PropertyExistsQuery'
[C++ Error] Unit1.cpp(48): E2451 Undefined symbol 'PropertyStandardQuery'
[C++ Error] Unit1.cpp(51): E2451 Undefined symbol 'IOCTL_STORAGE_QUERY_PROPERTY'
[C++ Error] Unit1.cpp(51): E2109 Not an allowed type
[C++ Error] Unit1.cpp(89): E2158 Operand of 'delete' must be non-const pointer
Так же добавил #include <windows.h>
Может нужно ещё что-то? Параллельно ищу в инете ответ,но,пока не нашёл
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,145
Записей в блоге: 3
05.05.2014, 20:54
код Ваш пришлите сюда
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
06.05.2014, 09:24
Цитата Сообщение от Dinkin Посмотреть сообщение
DeviceIoControl(hDrive, IOCTL_STORAGE_QUERY_PROPERTY, &query, sizeof(query),
раньше пробовал этот способ, под winxp и win7 выдавались разные значения серийников.
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,145
Записей в блоге: 3
06.05.2014, 13:21
на счет что сирийники разные слышал что это бывает когда с HHD что то ни так....а так этот способ юзаю как привязка к железу..только раз подвел, какраз когда с HHD у пользователя была проблема
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
06.05.2014, 14:17
Цитата Сообщение от Dinkin Посмотреть сообщение
какраз когда с HHD у пользователя была проблема
и какая же у него была проблема? у меня нету никаких проблем с винчестером.
есть, кстати, библиотека одна из всех мной найденных и проверенных, но платная, (не помню названия, вроде GetSerialHDD называется), которая в обеих версиях винды показала одно и то же значение.
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,145
Записей в блоге: 3
06.05.2014, 14:49
Парень сказал, что ему сказали в сервисе,это проблема со считывающей иглой было (на сколько это правда не знаю)...но при каждой перезагрузке показывало новый serial, но в итоге исправили ему
К сожалению тоже в свое время перерыл готовые компоненты и не нашел достойных бесплатных)
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
06.05.2014, 14:54
Цитата Сообщение от Dinkin Посмотреть сообщение
но при каждой перезагрузке показывало новый serial
ну у меня всё время показывало в winxp одно значение, а в win7 другое значение, при этом не много отличающегося от xp-ого значения (где-то 2 символа в середине серийника не совпадали)
0
2 / 2 / 0
Регистрация: 19.04.2014
Сообщений: 36
08.05.2014, 11:53  [ТС]
Цитата Сообщение от Dinkin Посмотреть сообщение
код Ваш пришлите сюда
Я взял Ваш код и скопировал в чистый проект. Добавил вверх #include <Winioctl.h> и #include <windows.h> и запустил.

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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
#include <winbase.h>
 
#include "Unit1.h"
#include <winioctl.h>
#include <Iptypes.h>
#include <assert.h>
 
#include <windows.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
 
 
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 DWORD dwBytesReturned;
STORAGE_PROPERTY_QUERY query;
STORAGE_DEVICE_DESCRIPTOR *buffer;
 
buffer = new STORAGE_DEVICE_DESCRIPTOR[5];
 
HANDLE hDrive = CreateFile(L"\\\\.\\PhysicalDrive0", 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
 OPEN_EXISTING, 0, NULL);
 
memset ((void *)&query,  0, sizeof (query));
memset ((void *)buffer, 0, sizeof (buffer));
 
query.PropertyId = StorageDeviceProperty;
query.QueryType = PropertyExistsQuery;
 
//if( DeviceIoControl(hDrive, IOCTL_STORAGE_QUERY_PROPERTY, &query, sizeof(query),
//0, 0, &dwBytesReturned, NULL) != 0);
//Memo1->Lines->Add(L"Exist");
 
query.PropertyId = StorageDeviceProperty;
query.QueryType = PropertyStandardQuery;
// 1-й раз вызываем чтобы получить размер возвращаемых данных
// 500 в поле nOutBufferSize указано не верно, но размер возвращаемых данных не ясен.
DeviceIoControl(hDrive, IOCTL_STORAGE_QUERY_PROPERTY, &query, sizeof(query),
buffer, 500, &dwBytesReturned, NULL);
 
 
//DeviceIoControl(hDrive, IOCTL_STORAGE_QUERY_PROPERTY, &query, sizeof(query),
//buffer, dwBytesReturned, &dwBytesReturned, NULL);
/*
Memo1->Lines->Add("Version: " + IntToStr ((int)buffer.Version));
Memo1->Lines->Add("Size: " + IntToStr ((int)buffer.Size));
Memo1->Lines->Add("DeviceType: " + IntToStr ((int)buffer.DeviceType));
Memo1->Lines->Add("DeviceTypeModifier: " + IntToStr ((int)buffer.DeviceTypeModifier));
Memo1->Lines->Add("RemovableMedia: " + IntToStr ((int)buffer.RemovableMedia));
Memo1->Lines->Add("CommandQueueing: " + IntToStr ((int)buffer.CommandQueueing));
Memo1->Lines->Add("VendorIdOffset: " + IntToStr ((int)buffer.VendorIdOffset));
Memo1->Lines->Add("ProductIdOffset: " + IntToStr ((int)buffer.ProductIdOffset));
Memo1->Lines->Add("ProductRevisionOffset: " + IntToStr ((int)buffer.ProductRevisionOffset));
Memo1->Lines->Add("SerialNumberOffset: " + IntToStr((int)buffer.SerialNumberOffset));
Memo1->Lines->Add("BusType: " + IntToStr ((int)buffer.BusType));
*/
 
if (buffer->VendorIdOffset != 0) {
char *str = (char*) ((char*)buffer + buffer->VendorIdOffset);
Memo1->Lines->Add("VendorId: " + String(str));
}
if (buffer->ProductIdOffset != 0) {
char *str = (char*) ((char*)buffer + buffer->ProductIdOffset);
Memo1->Lines->Add("ProductId: " + String(str));
}
if (buffer->ProductRevisionOffset != 0) {
char *str = (char*) ((char*)buffer + buffer->ProductRevisionOffset);
Memo1->Lines->Add("ProductRevision: " + String(str));
}
if (buffer->SerialNumberOffset != 0) {
char *str = (char*) ((char*)buffer + buffer->SerialNumberOffset);
Memo1->Lines->Add("SerialNumber: " + String(str));
}
 
CloseHandle ( hDrive );
delete [] buffer;
 
}
//---------------------------------------------------------------------------
Правильно ли я понял,что этот способ вытащит Модель харда? Или только серийник?
0
2 / 2 / 0
Регистрация: 19.04.2014
Сообщений: 36
11.05.2014, 21:45  [ТС]
Проблема всё ещё актуальна. Уже не нужен серийник. Лишь бы каким угодно способом получить Модель жёсткого диска. (Желательно рабочий код)
Заранее спасибо.
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,145
Записей в блоге: 3
11.05.2014, 21:54
То что выше слал код рабочий и отображает и как модель , так серийник..давайте разбираться почему такие ошибки у Вас.

Если оставить только этот момент..ошибки есть?

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
DWORD dwBytesReturned;
STORAGE_PROPERTY_QUERY query;
STORAGE_DEVICE_DESCRIPTOR *buffer;
 
buffer = new STORAGE_DEVICE_DESCRIPTOR[5];
 
HANDLE hDrive = CreateFile(L"\\\\.\\PhysicalDrive0", 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
 OPEN_EXISTING, 0, NULL);
 
memset ((void *)&query,  0, sizeof (query));
memset ((void *)buffer, 0, sizeof (buffer));
 
query.PropertyId = StorageDeviceProperty;
query.QueryType = PropertyExistsQuery;
 
//if( DeviceIoControl(hDrive, IOCTL_STORAGE_QUERY_PROPERTY, &query, sizeof(query),
//0, 0, &dwBytesReturned, NULL) != 0);
//Memo1->Lines->Add(L"Exist");
 
query.PropertyId = StorageDeviceProperty;
query.QueryType = PropertyStandardQuery;
// 1-й раз вызываем чтобы получить размер возвращаемых данных
// 500 в поле nOutBufferSize указано не верно, но размер возвращаемых данных не ясен.
DeviceIoControl(hDrive, IOCTL_STORAGE_QUERY_PROPERTY, &query, sizeof(query),
buffer, 500, &dwBytesReturned, NULL);
0
2 / 2 / 0
Регистрация: 19.04.2014
Сообщений: 36
11.05.2014, 22:02  [ТС]
Да
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[C++ Error] Unit1.cpp(29): E2451 Undefined symbol 'STORAGE_PROPERTY_QUERY'
[C++ Error] Unit1.cpp(29): E2379 Statement missing ;
[C++ Error] Unit1.cpp(30): E2451 Undefined symbol 'STORAGE_DEVICE_DESCRIPTOR'
[C++ Error] Unit1.cpp(30): E2451 Undefined symbol 'buffer'
[C++ Error] Unit1.cpp(32): E2303 Type name expected
[C++ Error] Unit1.cpp(32): E2379 Statement missing ;
[C++ Error] Unit1.cpp(35): E2034 Cannot convert 'wchar_t *' to 'const char *'
[C++ Error] Unit1.cpp(35): E2342 Type mismatch in parameter 'lpFileName' (wanted 'const char *', got 'wchar_t *')
[C++ Error] Unit1.cpp(37): E2451 Undefined symbol 'query'
[C++ Error] Unit1.cpp(37): E2109 Not an allowed type
[C++ Error] Unit1.cpp(38): E2109 Not an allowed type
[C++ Error] Unit1.cpp(40): E2451 Undefined symbol 'StorageDeviceProperty'
[C++ Error] Unit1.cpp(41): E2451 Undefined symbol 'PropertyExistsQuery'
[C++ Error] Unit1.cpp(48): E2451 Undefined symbol 'PropertyStandardQuery'
[C++ Error] Unit1.cpp(51): E2451 Undefined symbol 'IOCTL_STORAGE_QUERY_PROPERTY'
[C++ Error] Unit1.cpp(51): E2109 Not an allowed type
Вот "Шапка" (может тут что-то не так)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
#include <winbase.h>
 
#include "Unit1.h"
#include <winioctl.h>
#include <Iptypes.h>
#include <assert.h>
 
#include <windows.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,145
Записей в блоге: 3
11.05.2014, 22:08
Забыл сказать и код .h
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
11.05.2014, 22:48
Вот короче, надеюсь разберетесь:
https://www.cyberforum.ru/post3515298.html
1
2 / 2 / 0
Регистрация: 19.04.2014
Сообщений: 36
11.05.2014, 23:02  [ТС]
Цитата Сообщение от Dinkin Посмотреть сообщение
Забыл сказать и код .h
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
//---------------------------------------------------------------------------
 
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
 
 
 
#include <Winsock2.h>
#include <Iptypes.h>
#include <Iphlpapi.h>
#include <Windows.h>
#include <SysUtils.hpp>
#include <Dialogs.hpp>
#include <Menus.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
        TEdit *Edit1;
        TButton *Button1;
        TEdit *Edit2;
        TEdit *Edit3;
        TEdit *Edit4;
        TMemo *Memo1;
        void __fastcall Button1Click(TObject *Sender);
private:    // User declarations
public:     // User declarations
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
Цитата Сообщение от kzru_hunter Посмотреть сообщение
Вот короче, надеюсь разберетесь:
Уникальный ID компьютера
Спасибо. Завтра постараюсь разобраться.
UPD. Выдаёт ошибку "Ошибка при открытии физического диска : отказано в доступе"
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
11.05.2014, 23:07
Цитата Сообщение от Akless Посмотреть сообщение
Выдаёт ошибку "Ошибка при открытии физического диска : отказано в доступе"
Под админом запускали?
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,145
Записей в блоге: 3
11.05.2014, 23:36
Все понял в чем проблема...начиная от BCB6 ниже это не входит в стандартные библиотеки...вам необходим


вот что Вам нужно

Основная часть:
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
#include <Winioctl.h>
#define IOCTL_STORAGE_QUERY_PROPERTY   CTL_CODE(IOCTL_STORAGE_BASE, 0x0500, METHOD_BUFFERED, FILE_ANY_ACCESS)
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
 
 
typedef struct _STORAGE_DEVICE_DESCRIPTOR {
    ULONG Version;
    ULONG Size;
    UCHAR DeviceType;
    UCHAR DeviceTypeModifier;
    BOOLEAN RemovableMedia;
    BOOLEAN CommandQueueing;
    ULONG VendorIdOffset;
    ULONG ProductIdOffset;
    ULONG ProductRevisionOffset;
    ULONG SerialNumberOffset;
    STORAGE_BUS_TYPE BusType;
    ULONG RawPropertiesLength;
    UCHAR RawDeviceProperties[1];
} STORAGE_DEVICE_DESCRIPTOR, *PSTORAGE_DEVICE_DESCRIPTOR;
 
 
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  HANDLE hDevice;
  BOOL                                status;
  UCHAR                               outBuf[512];
  ULONG                               returnedLength;
  PSTORAGE_DEVICE_DESCRIPTOR          devDesc;
  UCHAR query[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00};
 
 
  hDevice = CreateFile("\\\\.\\PHYSICALDRIVE0", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL );
 
  status = DeviceIoControl( hDevice, IOCTL_STORAGE_QUERY_PROPERTY, &query, sizeof(query), &outBuf, 512, &returnedLength, NULL );
 
  if ( status )
  {
    devDesc = (PSTORAGE_DEVICE_DESCRIPTOR) outBuf;
    if (devDesc->RemovableMedia) Form1->Memo1->Lines->Add("Removable Media");
    PrintProp(outBuf, returnedLength, "Vendor ID",        devDesc->VendorIdOffset);
    PrintProp(outBuf, returnedLength, "Product ID",       devDesc->ProductIdOffset);
    PrintProp(outBuf, returnedLength, "Product Revision", devDesc->ProductRevisionOffset);
    PrintProp(outBuf, returnedLength, "Serial Number",    devDesc->SerialNumberOffset);
  }         
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::PrintProp(PUCHAR p, ULONG Length, AnsiString Name, ULONG Offset)
{
  if ( Offset && p[Offset] )
  {
    AnsiString line = Name + ": ";
    for (ULONG  i = Offset; p[i] != (UCHAR) NULL && i < Length; i++ ) line.cat_printf("%c", p[i]);
    Form1->Memo1->Lines->Add(line);
  }
}
//---------------------------------------------------------------------------
в h.

Пропишите доп фуннкцию

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
//---------------------------------------------------------------------------
 
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
        TButton *Button1;
        TMemo *Memo1;
        void __fastcall Button1Click(TObject *Sender);
private:    // User declarations
public:     // User declarations
        __fastcall TForm1(TComponent* Owner);
void __fastcall TForm1::PrintProp(PUCHAR p, ULONG Length, AnsiString Name, ULONG Offset);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
1
2 / 2 / 0
Регистрация: 19.04.2014
Сообщений: 36
11.05.2014, 23:54  [ТС]
Цитата Сообщение от kzru_hunter Посмотреть сообщение
Под админом запускали?
Запустил,заработало. Большое спасибо!
Цитата Сообщение от Dinkin Посмотреть сообщение
Все понял в чем проблема...начиная от BCB6 ниже это не входит в стандартные библиотеки...вам необходим
Большое Вам спасибо! Завтра буду разбираться
0
2 / 2 / 0
Регистрация: 19.04.2014
Сообщений: 36
13.05.2014, 16:06  [ТС]
Цитата Сообщение от kzru_hunter Посмотреть сообщение
Вот короче, надеюсь разберетесь:
Итак, попытался сделать класс для всего кода (ну что-то вроде класс "hardDrive" ). Ведь моя конечная цель снимать не только серийник и модель харда. Так вот. Вроде всё сделал,сделал под себя. Запустил,заработало. Как только перенёс код в свою программу, возникли затруднения. Отказывается работать. Никаких ошибок не пишет, но и результат не выводит. Напоминаю,что отдельно от моей проги, в отдельном проекте, код рабочий и выводит всё как следует.
Прилагаю 2 rar архива:
Get_hard.rar - Изначально Ваш код, убрал предупреждения об ошибках,и изменил вывод в edit. Ну и класс создал.
program.rar - мой проект, который ещё измениться.

Весь проект смотреть не нужно. Для удобства всё,что связано с Вашим кодом, я добавил в начало каждого файла.
Надеюсь на помощь. Заранее спасибо
Вложения
Тип файла: rar Get_hard.rar (299.7 Кб, 70 просмотров)
Тип файла: rar program.rar (786.7 Кб, 56 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.05.2014, 16:06
Помогаю со студенческими работами здесь

Количество секторов, кластеров и серийник диска
необходимо определить кол-во секторов, кластеров, байт в кластере и серийник диска перерыл функции из серии &quot; DriveInfo HardDisk =...

СМА Ardo модель и серийник затерты, страный глюк
Привезли в ремонт машинку, данные затерты, прилагаю фото. При выборе отжима все нормально работает насос, двигатель крутится. При выборе...

Функции DeviceIoControl: вытащить серийник с флешки, диска
Здравствуйте! Помогите пожалуйста с помощью функции DeviceIoControl и CreateFile вытащить серийник с флэшки, диска и тд. Не понимаю как...

СМА Siemens модель и серийник неизвестны, Нужно фото модуля
Добрый день, коллеги! Привезли модуль вертикалки Siemens изделека, но модель записать забыли. Выгорание произошло из-за сырости, и...

Acer 5551G не запускается (ноутбук больше не видит свою модель и серийник)
При старте ноут начинает загружаться как положено, после картинки биоса экран тухнет секунды на 3, а затем появляется черный экран с...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru