Проанализируйте SMBIOS сами и хешируйте его к произвольной длине. Посмотрите спецификация PDF для всех доступных структур SMBIOS.
Для запросов информации SMBIOS из Windows Вы могли использовать EnumSystemFirmwareEntries
, EnumSystemFirmwareTables
и GetSystemFirmwareTable
.
IIRC, "уникальный идентификатор" из инструкции CPUID удерживается от использования от P3 и более новый.
Ищите CPUID для одной опции. Могли бы быть некоторые проблемы с системами мульти-ЦП.
Можно ли вытянуть некоторый порядковый номер производителя или метку?
Наш магазин является магазином Dell, таким образом, мы используем метку, которая уникальна для каждой машины для идентификации их. Я знаю, что это может быть запрошено от BIOS, по крайней мере, в Linux, но я не знаю бесцеремонно, как сделать это в Windows.
Возможно, обман немного, но MAC-адрес адаптера Ethernet машин редко изменяется без материнской платы, изменяющейся в эти дни.
Почему бы не использовать MAC-адрес Вашей сетевой платы?
Необходимо изучить использование MAC-адреса на сетевой плате (если это существует). Те обычно уникальны, но могут быть изготовлены. Я использовал программное обеспечение, которое генерирует его файл лицензии на основе Вашего MAC-адреса сетевого адаптера, таким образом, это рассмотрело довольно надежный способ различать компьютеры.
Что относительно того, чтобы просто использовать UniqueID процессора?
Я очень не хочу быть парнем, который говорит, "Вы просто делаете его неправильно" (я всегда ненавижу того парня;), но...
это должно быть повторяемо сгенерировано для уникальной машины? Вы могли просто присвоить идентификатор или сделать общественность/закрытый ключ? Возможно, если Вы могли бы генерировать и сохранить значение, Вы могли бы получить доступ к нему от обеих установок ОС на том же диске?
Вы, вероятно, исследовали эти опции, и они не работают на Вас, но в противном случае это - что-то для рассмотрения.
, Если это не вопрос пользовательского доверия, Вы могли бы просто использовать MAC-адреса.
В моей программе я сначала проверяю на Терминальный сервер и использую WTSClientHardwareId. Еще MAC-адрес локального ПК должен соответствовать.
, Если Вы действительно хотите использовать список свойств, Вы обеспечили, не учитывают вещи как Name
и DriverVersion
, Clockspeed
, и т.д. так как это возможно зависимо от операционной системы. Попытайтесь произвести ту же информацию об обеих операционных системах и не учтите это, которое отличается между.
У меня была та же проблема, и после небольшого исследования я решил, что лучше всего прочитать MachineGuid
в разделе реестра HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Cryptography
, как предложил @Agnus. Он генерируется во время установки ОС и не изменится, если вы не сделаете другую свежую установку ОС. В зависимости от версии ОС он может содержать встроенный MAC-адрес сетевого адаптера (плюс некоторые другие числа, в том числе случайный) или псевдослучайное число, позднее для более новых версий ОС (я полагаю, что после XP SP2, но не уверен). Если это теоретически псевдослучайный, его можно подделать - если две машины имеют одинаковое начальное состояние, включая часы реального времени. На практике это будет редко, но имейте в виду, если вы ожидаете, что это будет основой для безопасности, которая может быть атакована хардкорными хакерами.