WIN32_Processor :: Is ProcessorId Уникальный для всех компьютеров - PullRequest
15 голосов
/ 09 июля 2009

Я хочу использовать нечто уникальное для системы лицензирования. я решил использовать ProcessorID из класса управления Win32_Processor.

Я пробовал на двух разных системах с одинаковым типом процессора ..

Показывает один и тот же идентификатор процессора для обеих систем. я использую этот код

public static String GetCPUId()
{
    String processorID = "";

    ManagementObjectSearcher searcher = new ManagementObjectSearcher(
        "Select * FROM WIN32_Processor");

    ManagementObjectCollection mObject = searcher.Get();

    foreach (ManagementObject obj in mObject)
    {
        processorID = obj["ProcessorId"].ToString();
    }

    return processorID;
}

Ответы [ 4 ]

17 голосов
/ 09 июля 2009

Нет, нельзя гарантировать, что он будет уникальным, поскольку процессор может даже не поддерживать инструкцию CPUID, и в этом случае вызов не может быть гарантированно успешным.

Кроме того, вы пренебрегаете тем, что на машине может быть несколько процессоров, поэтому получение идентификатора одного процессора не помогает.


Как указали другие, если вы хотите получить уникальный идентификатор для системы, вам лучше всего создать идентификатор, который представляет собой смесь различных идентификаторов компонентов в системе.

Хэш (и не просто любой, а тот, который имеет очень несколько коллизий) различных значений аппаратного обеспечения может быть достаточным. Возможно, вы захотите использовать вещи, которые достаточно встроены в систему, такие как процессор, информация о материнской плате, но не такие вещи, которые легко отсоединяются / изменяются, такие как USB-накопители / концентраторы / и т. Д.

10 голосов
/ 09 июля 2009

Большинство систем лицензирования используют несколько аппаратных компонентов для создания отпечатка пальца. Ни один компонент не используется в качестве единственного уникального ключа. Таким образом, вы можете принять во внимание следующее:

  • MAC-адреса всех сетевых адаптеров (может быть сложно, если у них есть док-станция или включить / отключить беспроводную связь на ноутбуке)
  • CPUID
  • Номера компонентов материнской платы (например, контроллеров IDE или SCSI)
  • Серийный номер системного диска (НЕ идентификатор тома, который легко изменить)
  • и т.д.

При объединении в целом вы получите уникальное представление о машине. Опасность, конечно, возникает, когда пользователь что-то меняет на своем компьютере. Они теряют свою лицензию? Они должны связаться с вами?

Также обратите внимание, что классам WMI часто требуются права администратора для чтения той информации, которую вы ищете, что будет настоящей проблемой для пользователей Vista и Windows 7.

Аппаратная блокировка очень трудно понять правильно. Поэтому я бы порекомендовал либо 1. не делать этого, либо 2. приобрести коммерческую библиотеку, которая уже делает это.

6 голосов
/ 12 марта 2013

ProcessorID или CPUID предназначены для идентификации модели и набора функций процессора ( ARM , x86 / x64 ).

Pentium III поддерживает серийный номер процессора (PSN). Помимо поддержки только на процессорах Pentium III (и процессорах Transmeta Efficeon и Crusoe) , в BIOS должна быть включена функция , что ставит под сомнение конфиденциальность .

Так что нет, ProcessorID не уникален для всех компьютеров. Кроме того, весьма вероятно, что он не будет уникальным для компьютеров вашей компании (поскольку многие организации покупают несколько компьютеров одной модели).

1 голос
/ 09 июля 2009

Для уникальной строки, которую вы ищете, мы используем MAC-адрес. Если у пользователя нет MAC-адреса , мы просто разрешаем несколько установок. Он охватывает большинство случаев, и это все, чего мы хотели достичь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...