![]() |
Уникальные номера для определенного "компа"
Как можно попроще получить любое произвольное число?Но что бы оно было уникальным для каждого компьютера на котором будет выполнятся такой код.
|
1) получить бренд-индекс процессора (cpuid функции с 0x80000002 по 0x80000004)
2) получить серийный номер винта (http://forum.codenet.ru/archive/index.php/t-9911.html) сложить 2 строки, взять от них хеш и получите уникальное число |
Цитата:
Вот нашол код получения мака сетевой Код:
//---------------------- |
Цитата:
|
а (cpuid функции с 0x80000002 по 0x80000004) что значат? и как их заюзать? лучше на дельфи
|
Ищите в варезниках вот такую штуку и будет вам щастье.
|
Цитата:
Чтобы получить строку бренд-индекс, надо последовательно вызывать команду cpuid со значениями в eax = 0x80000002 , 0x80000003,0x80000004 . В результате в регистрах eax, ebx, ecx, edx именно в таком порядке вы будете получать по 16 байт [4x4] строки. И того, для хранения самого индекса вам потребуется строка длиной 48 ascii символов и завершающий 0 и того 49 символов (как видно это как раз максимально возможное значение). В сорцах моего amd-cpu-info эта функция есть Код:
VOID WINAPI GetBrandStr(PCHAR szBrand)Код:
"AMDAthlon(tm) 64 X Dual Core Processr 5200+" 2ТС как мне кажется, это довольно простой способ - все, что связано с cpuid. У этой команды еще имеется большое количество различных функций с помощью которых можно узнать возможности конкретного процессора. Правда, если не использовать с другими параметрами оборорудования, то не особо случайно получиться, да вы и сами понимаете желаю удачи |
по мне проще сгенерить ID через rdtsc и сохранить в реестре.
Хотя способ с номером тома системного диска - тож очень хорош. |
Цитата:
|
>>Я читал что такое способ не работает на старых процессорах типа пентиум 3 или атлон ХР
Нет проблемы добавить небольшую проверку. Если функция cpuid 80000000h вернет в eax значение <80000004h, то вывод строки бренд-индекса не поддерживается. И тогда можно сделать по старинке - вывод идентификатора с помощью функции 0. |
Я выбрал серийник тома раздела с виндой.
|
если юзать cpuid, то правилом хорошего тона предпологается или обернуть вызов в сех иди проверить поддержку рпоцессором такой инструкции:
Код:
function IsCPUID(): Boolean; register; |
я вот сейчас у интелов глянула в мане, там до 486 cpuid не поддерживается, как и у амд (там у них кажись тоже с 486 появилось). И у себя не проверяла в кодесе, температуру-то с amd64 можно мерить через Thermtrip Status Register... В общем случае, конечно же, проверка не помешает.
ЗЫ Хотя что тут говорить, тс уже выбрал удобный для себя способ |
|
А узнать серийник или индификатор Материнской платы?
|
Цитата:
|
КАПЕЦ %) РАНДОМ + РАНДОМ + РАНДОМ
|
| Время: 06:41 |