Как генерировать уникальный порядковый номер машины в Delphi?

У меня есть вопрос, как генерировать уникальный порядковый номер машины в Delphi? Я пытался сделать это использование идентификатора материнская плата или процессор, но к сожалению это, к сожалению, поддерживается. Порядковые номера раздела, и т.д. уменьшитесь, потому что это изменяется после отформатированного. Я ищу что-то, что не изменяется после отформатированного. У кого-либо есть какая-либо идея?

6
задан dsolimano 5 October 2013 в 18:46
поделиться

7 ответов

Часто используется MAC-адрес (а) сетевой карты, есть несколько способов запросить MAC-адрес (в Delphi), но самый простой / чистый способ - это, вероятно, использовать GetAdaptersInfo API.

1
ответ дан 8 December 2019 в 14:40
поделиться

Вот простое решение

  • Сгенерируйте GUID
  • Сохраните значение Guid в реестре
  • Используйте значение Guid как серийный номер

Если вы беспокоясь о безопасности использовать хэш по (Guid + некоторые секретные данные)

1
ответ дан 8 December 2019 в 14:40
поделиться

У меня была похожая проблема в старые добрые времена DOS. Я обнаружил, что ПЗУ установленного оборудования, т.е. видеокарта, серийные порты контроллеров дисков и т. д. были доступны напрямую, так как они отображены в памяти. Это означает, что я смог создать список установленного оборудования и использовать его для создания «серийного номера», который однозначно идентифицировал каждый компьютер (до тех пор, пока не были изменены настройки оборудования). Я уверен, что нечто подобное возможно и сегодня.

Посмотрите http://duartes.org/gustavo/blog/post/motherboard-chipsets-memory-map , если вы хотите использовать этот подход.

С уважением

  • Фрэнк
1
ответ дан 8 December 2019 в 14:40
поделиться

В библиотеке JCL есть несколько функций, очень полезных для этой темы:

function CPUID: TCpuInfo;
function GetMacAddresses(const Machine: string; const Addresses: TStrings): Integer;
function GetVolumeSerialNumber(const Drive: string): string;
function GetBIOSName: string;
6
ответ дан 8 December 2019 в 14:40
поделиться

Вы можете протестировать GLibWMI , который извлекает информацию о нескольких компонентах в Windows.
Это бесплатно, и исходный код включен. Вы можете найти его в моем Интернете или в Sourceforge .

alt text http://img175.imageshack.us/img175/1250/imagen344.png

Включить компоненты для BIOSInfo, DiskInfo, ProcessorInfo, ...

С помощью этих трех компонентов вы можете получить такую ​​информацию :

alt text http://img690.imageshack.us/img690/6006/imagen349.png

Вы можете найти BIN / EXE GenericDemo (все компоненты) здесь ; Вы можете проверить всю информацию, которую вы можете получить с помощью этих компонентов.

3
ответ дан 8 December 2019 в 14:40
поделиться

Я склонен согласиться с лагерем «это невозможно». По крайней мере, не на 100%, но, вероятно, это можно сделать «достаточно хорошо», чтобы держать в подчинении рядового пользователя.

И если это можно сделать, то, вероятно, это было сделано. Вы проверяли Torry's Delpi300 и т. Д. (Возможно, даже sourceforge, хотя вам, возможно, придется перевести на Delphi).

http://www.google.com.sg/search?hl=ru&source=hp&q=How+to+generate+unique+serial+number+of+machine+in+Delphi действительно выглядит многообещающим

0
ответ дан 8 December 2019 в 14:40
поделиться

То, что вам нужно, на самом деле является своего рода "аппаратным отпечатком пальца", а не "серийным номером". Проблема этого подхода в том, что он не является на 100% надежным. Доказательство: Microsoft не удалось найти способ правильно ограничить OEM-программы одним компьютером, вы можете переустановить OEM-лицензию на новый компьютер через некоторое время! Как только вы согласитесь, что идеального решения быть не может, вы можете посмотреть на свои возможности и попробовать найти что-то достаточно хорошее.

Для своих приложений я создаю отпечаток пальца на основе информации, возвращаемой GetSystemInfo, GetVolumeInformation и (для раздела 'C:') и выбора ключей реестра из HKLM\HARDWARE (на самом деле много ключей реестра, все, кроме usb, клавиатуры и мыши). Я читаю информацию об оборудовании из реестра, потому что приложение Windows не может получить прямой доступ к оборудованию (подходы в стиле DOS не могут работать), и потому что у меня нет времени на поиск способов определения информации об оборудовании для многих различных устройств.

Мой подход имеет следующие недостатки:

  • Используется серийный номер раздела, установленный Format. Формат явно изменит отпечаток.
  • Используется информация об установленных драйверах. Обновление драйвера может действительно изменить отпечаток! Перемещение карты из одного PCI-порта в другой может изменить отпечаток.

Тем не менее, даже с учетом всей этой изменяющейся информации, я получаю столкновения: Что-то около 1/1000 компьютеров! Здесь действует несколько факторов:

  • Крупные OEM-производители собирают множество компьютеров, используя одно и то же оборудование. Они также клонируют жесткие диски, чтобы ускорить установку программного обеспечения, поэтому разные компьютеры могут получить одинаковый серийный номер раздела.
  • Я создаю очень короткий хэш из всей этой информации, достаточно короткий, чтобы люди могли прочитать его мне по телефону без особых ошибок.

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

4
ответ дан 8 December 2019 в 14:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: