Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.06.14;
Скачать: CL | DM;

Вниз

Генерация Hardware ID   Найти похожие ветки 

 
volser   (2005-04-17 15:31) [0]

Как можно сгенерировать Hardware ID?


 
Просто Джо ©   (2005-04-17 19:43) [1]

function GetHardwareID: Integer;
begin
 Result := Random (MaxInt)
end;


 
Gero ©   (2005-04-17 19:45) [2]

Ctrl+Shift+G


 
volser   (2005-04-18 20:21) [3]

Мне надо что бы для одной и той же кофигурации железа (мамка, жесткий, сетевуха т.д.) выдавало идин и тот же ID.

 Random (MaxInt)
 Ctrl+Shift+G
Это не подходит


 
VMcL ©   (2005-04-18 20:58) [4]

Ну, например, так:

type
 THID = packed array [0 .. 3] of LongWord;

procedure GetHardwareID(out AHid: THID);
asm
 push    esi
 mov     esi, eax
 xor     eax, eax
 cpuid
 mov     [esi], eax
 mov     [esi + 4], ebx
 mov     [esi + 8], ecx
 mov     [esi + 12], edx
 pop     esi
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 H: THID;
begin
 FillChar(H, SizeOf(H), 0);
 GetHardwareID(H);
 ShowMessageFmt("Hardware ID: %.4x%.4x%.4x%.4x", [H[0], H[1], H[2], H[3]]);
end;


P.S. Совместимость: в соответствии с описанием команды CPUID.


 
VMcL ©   (2005-04-18 21:00) [5]

Sorry, EBX тоже нужно сохранять:

procedure GetHardwareID(out AHid: THID);
asm
 push    esi
 push    ebx
 mov     esi, eax
 xor     eax, eax
 cpuid
 mov     [esi], eax
 mov     [esi + 4], ebx
 mov     [esi + 8], ecx
 mov     [esi + 12], edx
 pop     ebx
 pop     esi
end;


 
volser   (2005-04-18 22:59) [6]

>VMcL
У меня с асмом не сильно сложилось :-)
Я так понял это зависит только от CPUID
Только на счет совместимости я не совсем понял, на каких машинах будет работать, а на каких нет.

И можно ли узнать так же MotherboardID, HDD ID (всех),  Video Card ID?


 
Alex Konshin ©   (2005-04-19 02:04) [7]

Поищи по форуму. Уже достало каждую неделю на один и тот же вопрос отвечать. Кратко: из того, что ты хочешь, только HDD имеет S/N, остальное - либо не имеет, либо нет API.


 
volser   (2005-04-19 09:37) [8]

Спасибо, понял!


 
Чапаев ©   (2005-04-19 10:41) [9]

> только HDD имеет S/N, остальное - либо не имеет, либо нет API.
У сетевухи MAC-адрес можно условно приравнять к SN...


 
Alex Konshin ©   (2005-04-19 11:13) [10]

Про нее не спрашивали ;)


 
Чапаев ©   (2005-04-19 12:21) [11]

> Про нее не спрашивали ;)
Дык вот же:
>> Мне надо что бы для одной и той же кофигурации железа (мамка, >> жесткий, сетевуха т.д.)


 
volser   (2005-04-19 16:20) [12]

Но МАК то поменять можно


 
VMcL ©   (2005-04-19 19:33) [13]

>>volser   (18.04.05 22:59) [6]

>Только на счет совместимости я не совсем понял, на каких машинах будет работать, а на каких нет.

В соответствии с мануалом от Интела это можно узнать с помощью следующей функции (если я не ошибся в алгоритме):

function ExistsCpuId: Boolean;
asm
               pushfd
               push    ebx

               pushfd                  // Save EFLAGS to stack
               pop     eax             // Store EFLAGS in EAX
               mov     ebx, eax        // Save in EBX for testing later
               xor     eax, 00200000h  // Switch bit 21
               push    eax             // Copy changed value to stack
               popfd                   // Save changed EAX to EFLAGS
               pushfd                  // Push EFLAGS to top of stack
               pop     ecx             // Store EFLAGS in ECX
               xor     eax, eax        // Result := False
               cmp     ecx, ebx        // See if bit 21 has changed
               jz      @@Exit          // If no change, no CPUID
               inc     eax             // Result := True

 @@Exit:       pop     ebx
               popfd
end;


P.S.
The ID flag (bit 21) in the EFLAGS register indicates support for the CPUID instruction. If a software procedure can set and clear this flag, the processor executing the procedure supports the CPUID instruction.


 
dmitry501 ©   (2005-04-20 09:49) [14]

volser   (19.04.05 16:20) [12]
И CPUID отключается во многих биосах :) Так что это тоже не гарантия.


 
VMcL ©   (2005-04-20 13:37) [15]

>>dmitry501 ©   (20.04.05 09:49) [14]

Да что Вы говорите? А ну бегом читать мануалы от Intel"а, чтобы узнать, что же именно можно отключить в BIOS"е.


 
dmitry501 ©   (2005-04-21 05:26) [16]

VMcL ©   (20.04.05 13:37) [15]
Специально посмотрел мануалы от Intel по cpuid
ftp://download.intel.com/support/processors/procid/24161815.pdf
Да, я был неправ по поводу блокировки в БИОС CPUID. Блокируется serial number, т.е. 3 функция CPUID.
p.s. Ваш пример использует 0 режим функции, которая позволяет определить только производителя процессора и число других поддерживаемых режимов CPUID. Т.е. для любого процессора от Интел она будет возвращать "GenuineIntel" в EBX, EDX, ECX, а в EAX максимальный номер поддерживаемой функции CPUID. Лучше заменить команду
xor     eax, eax
cpuid

на
mov     eax, 01H
cpuid

тогда будет использована 1 функция, и значение будет разным для разных ядер процессора.


 
VMcL ©   (2005-04-21 10:46) [17]

>>dmitry501 ©   (21.04.05 05:26) [16]

>Специально посмотрел мануалы от Intel по cpuid

Вот это другой разговор.

>Лучше заменить команду ... тогда будет использована 1 функция, и значение будет разным для разных ядер процессора.

Более корректно было бы вызвать функцию 80000000H, чтобы выяснить максимальный номер поддерживаемой функции. А потом можно, например, пробежаться по всем функциям и вычислить контрольную сумму всех возвращаемых ими значений. Тогда получится что-то относительно уникальное для разных процессоров. Я привёл простейший пример в [4], [5].



Страницы: 1 вся ветка

Текущий архив: 2005.06.14;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.058 c
1-1117281103
dmitry_t
2005-05-28 15:51
2005.06.14
RxLib и анимированный gif


4-1113995312
anjey
2005-04-20 15:08
2005.06.14
Как спрятать програму от Alt+Tab


4-1114230724
Andrewk88
2005-04-23 08:32
2005.06.14
System directory


1-1116926464
Pavelkq
2005-05-24 13:21
2005.06.14
Передача имени массива в качестве параметра


3-1115320990
Karburator
2005-05-05 23:23
2005.06.14
"Призрачная" ошибка при попытке создания ХП