2 / 2 / 0
Регистрация: 19.04.2014
Сообщений: 36
1

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

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

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

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

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

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

Количество секторов, кластеров и серийник диска
необходимо определить кол-во секторов, кластеров, байт в кластере и серийник диска перерыл...

20
737 / 527 / 130
Регистрация: 31.05.2013
Сообщений: 2,975
Записей в блоге: 3
05.05.2014, 18:14 2
В шапочку кидай
#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  [ТС] 3
Спасибо большое!
Добавил в шапку #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
737 / 527 / 130
Регистрация: 31.05.2013
Сообщений: 2,975
Записей в блоге: 3
05.05.2014, 20:54 4
код Ваш пришлите сюда
0
1123 / 794 / 101
Регистрация: 01.02.2011
Сообщений: 1,878
Записей в блоге: 1
06.05.2014, 09:24 5
Цитата Сообщение от Dinkin Посмотреть сообщение
DeviceIoControl(hDrive, IOCTL_STORAGE_QUERY_PROPERTY, &query, sizeof(query),
раньше пробовал этот способ, под winxp и win7 выдавались разные значения серийников.
0
737 / 527 / 130
Регистрация: 31.05.2013
Сообщений: 2,975
Записей в блоге: 3
06.05.2014, 13:21 6
на счет что сирийники разные слышал что это бывает когда с HHD что то ни так....а так этот способ юзаю как привязка к железу..только раз подвел, какраз когда с HHD у пользователя была проблема
0
1123 / 794 / 101
Регистрация: 01.02.2011
Сообщений: 1,878
Записей в блоге: 1
06.05.2014, 14:17 7
Цитата Сообщение от Dinkin Посмотреть сообщение
какраз когда с HHD у пользователя была проблема
и какая же у него была проблема? у меня нету никаких проблем с винчестером.
есть, кстати, библиотека одна из всех мной найденных и проверенных, но платная, (не помню названия, вроде GetSerialHDD называется), которая в обеих версиях винды показала одно и то же значение.
0
737 / 527 / 130
Регистрация: 31.05.2013
Сообщений: 2,975
Записей в блоге: 3
06.05.2014, 14:49 8
Парень сказал, что ему сказали в сервисе,это проблема со считывающей иглой было (на сколько это правда не знаю)...но при каждой перезагрузке показывало новый serial, но в итоге исправили ему
К сожалению тоже в свое время перерыл готовые компоненты и не нашел достойных бесплатных)
0
1123 / 794 / 101
Регистрация: 01.02.2011
Сообщений: 1,878
Записей в блоге: 1
06.05.2014, 14:54 9
Цитата Сообщение от Dinkin Посмотреть сообщение
но при каждой перезагрузке показывало новый serial
ну у меня всё время показывало в winxp одно значение, а в win7 другое значение, при этом не много отличающегося от xp-ого значения (где-то 2 символа в середине серийника не совпадали)
0
2 / 2 / 0
Регистрация: 19.04.2014
Сообщений: 36
08.05.2014, 11:53  [ТС] 10
Цитата Сообщение от 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  [ТС] 11
Проблема всё ещё актуальна. Уже не нужен серийник. Лишь бы каким угодно способом получить Модель жёсткого диска. (Желательно рабочий код)
Заранее спасибо.
0
737 / 527 / 130
Регистрация: 31.05.2013
Сообщений: 2,975
Записей в блоге: 3
11.05.2014, 21:54 12
То что выше слал код рабочий и отображает и как модель , так серийник..давайте разбираться почему такие ошибки у Вас.

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

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  [ТС] 13
Да
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
737 / 527 / 130
Регистрация: 31.05.2013
Сообщений: 2,975
Записей в блоге: 3
11.05.2014, 22:08 14
Забыл сказать и код .h
0
1123 / 794 / 101
Регистрация: 01.02.2011
Сообщений: 1,878
Записей в блоге: 1
11.05.2014, 22:48 15
Вот короче, надеюсь разберетесь:
https://www.cyberforum.ru/post3515298.html
1
2 / 2 / 0
Регистрация: 19.04.2014
Сообщений: 36
11.05.2014, 23:02  [ТС] 16
Цитата Сообщение от 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
1123 / 794 / 101
Регистрация: 01.02.2011
Сообщений: 1,878
Записей в блоге: 1
11.05.2014, 23:07 17
Цитата Сообщение от Akless Посмотреть сообщение
Выдаёт ошибку "Ошибка при открытии физического диска : отказано в доступе"
Под админом запускали?
0
737 / 527 / 130
Регистрация: 31.05.2013
Сообщений: 2,975
Записей в блоге: 3
11.05.2014, 23:36 18
Все понял в чем проблема...начиная от 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  [ТС] 19
Цитата Сообщение от kzru_hunter Посмотреть сообщение
Под админом запускали?
Запустил,заработало. Большое спасибо!
Цитата Сообщение от Dinkin Посмотреть сообщение
Все понял в чем проблема...начиная от BCB6 ниже это не входит в стандартные библиотеки...вам необходим
Большое Вам спасибо! Завтра буду разбираться
0
2 / 2 / 0
Регистрация: 19.04.2014
Сообщений: 36
13.05.2014, 16:06  [ТС] 20
Цитата Сообщение от 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
13.05.2014, 16:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.05.2014, 16:06
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru