То, что вы ищете, на самом деле является своего рода «аппаратным отпечатком», а не «серийным номером». Проблема этого подхода в том, что он не на 100% надежен. Доказательство: Microsoft не удалось найти способ правильно ограничить OEM-программное обеспечение для любого отдельного компьютера, вы можете переустановить OEM-лицензию на новый компьютер через некоторое время! Как только вы согласитесь, что не может быть идеального решения, вы можете посмотреть на свои варианты и попытаться получить что-то достаточно хорошее.
Для своих приложений я создаю отпечаток на основе информации, возвращаемой GetSystemInfo, GetVolumeInformation и (для раздела 'C:'), и выбора ключей реестра из HKLM \ HARDWARE (на самом деле, много ключей реестра, все, кроме usb , клавиатура и мышь). Я читаю информацию об оборудовании из реестра, потому что приложение Windows не может напрямую получить доступ к оборудованию (подходы в стиле DOS не могут работать), и потому что у меня нет времени, чтобы выяснить способы определения информации, связанной с оборудованием, для много разных устройств.
Мой подход имеет следующие недостатки:
- Используется серийный номер раздела, установленный в Format. Формат явно изменит отпечаток пальца.
- Использует информацию об установленных драйверах. Обновление драйвера может фактически изменить отпечаток пальца! Перемещение карты с одного порта PCI на другой может привести к изменению отпечатка пальца.
Тем не менее, даже с учетом всей этой изменяющейся информации, я получаю коллизии: что-то вроде 1/1000 компьютеров! Здесь работают несколько факторов:
- Большой OEM собирает много компьютеров, используя одно и то же оборудование. Они также клонируют жесткие диски, чтобы ускорить установку программного обеспечения, чтобы разные ПК могли получить один и тот же серийный номер раздела.
- Я создаю очень короткий хеш из всей этой информации, достаточно короткий, чтобы люди могли читать его мне по телефону без особых ошибок.
Эта система работает для меня, но она не будет работать для вас, если вы собираетесь повторно идентифицировать компьютеры после их переустановки.