Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];

Вниз

Генерация 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 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.044 c
3-1115362448
Scorpio
2005-05-06 10:54
2005.06.14
Копирование БД и переименовка полей.


6-1111229954
Виталик
2005-03-19 13:59
2005.06.14
Передать файл по сети между двух программ


14-1116963284
Agent[007]
2005-05-24 23:34
2005.06.14
WinXP и OpenGL


9-1110870243
DeadMeat
2005-03-15 10:04
2005.06.14
Software Emulation


14-1116935766
Alexander Panov
2005-05-24 15:56
2005.06.14
хм... теперь будем платить за пересечение границы?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский