WIN32_Processor::Is ProcessorId Уникальный для всех компьютеров

Я хочу использовать что-то уникальное для системы лицензирования. я решил использовать 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 ответа

Решение

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

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


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

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам