Форум: "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.033 c