Как получить id процессора c

Обновлено: 07.07.2024

Я хотел получить процессор ID, используя код C++, а не используя WMI или какую-либо стороннюю библиотеку lib.

OR все на компьютере, что оказывается уникальным. Одна вещь-это Ethernet ID, но она снова снимается на некоторых машинах. Это я хочу использовать в основном для целей лицензирования.

Является ли процессор ID уникальным и доступным на всех основных процессорах?

3 ответа

В последнее время у меня была похожая проблема, и я сделал следующее. Сначала я получил некоторые уникальные значения идентификации системы:

GetComputerName (это, конечно, не уникально, но наша система использовала имена компьютеров для идентификации клиентов на LAN, так что это было хорошо для меня)

Я взял эти значения и объединил их произвольным, но детерминированным способом (читайте обновление ниже! ) (добавление, исправление, деление и сохранение остатка и т. д.). повторяйте значения, как если бы они были строками, и будьте творческими. В конце концов, вы получите байтовый литерал, который вы можете преобразовать в диапазон букв и цифр ASCII, чтобы получить уникальный код "readable", который не выглядит как шум.

Другой подход может быть просто конкатенацией этих значений, а затем "cover them up" с фиксацией чего-то над ними (и, возможно, снова преобразованием в буквы).

Я говорю, что он уникален, потому что по крайней мере один из входных данных должен быть уникальным (адрес MAC). Конечно, вам нужно некоторое понимание теории чисел, Чтобы не сдуть эту уникальность, но в любом случае этого должно быть достаточно.

Важное обновление: после этого поста я узнал несколько вещей о криптографии, и я придерживаюсь мнения, что составление произвольной комбинации (по сути, вашей собственной hash) почти наверняка является плохой идеей. Hash функции, используемые на практике, строятся так, чтобы быть хорошо управляемыми (как при низкой вероятности столкновений) и быть трудноразрушимыми (способность построить значение, которое имеет то же значение hash, что и другое). Построение такой функции-очень сложная задача информатики,и если вы не квалифицированы, вы не должны пытаться. Правильный подход для этого состоит в том, чтобы объединить любую информацию, которую вы можете собрать об оборудовании (то есть те, которые я перечислил в посте), и использовать криптографическую hash или цифровую подпись, чтобы получить проверяемый и безопасный вывод. Не внедряйте криптографические алгоритмы самостоятельно; есть много ловушек уязвимости, которые требуют много знаний, чтобы избежать. Используйте хорошо известную и надежную библиотеку для реализации алгоритмов.

Если вы используете Visual Studio корпорация Майкрософт предоставляет __cpuid instrinsic в заголовке <intrin.h> . Пример на связанном сайте msdn.

Существуют специальные библиотеки для генерации уникальных ID на основе установленного оборудования (так что для указанного компьютера этот ID всегда будет одним и тем же). Большинство из них берет материнскую плату ID + HDD ID + CPU ID и смешивает эти значения.

Зачем изобретать велосипед? Почему бы не воспользоваться этими библиотеками? Какая-нибудь серьезная причина?

На Microsoft Windows вы можете получить процессор ID (не процесс ID) через WMI, который в этом случае (только при приобретении процессора ID) основан на инструкции CPUID Существует ли подобный метод получения этого ID на Linux ?

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

Мне было интересно, смогу ли я получить веб-текстовый процессор, такой же, как здесь, на stack overflow, который показывает представление о том, что вы печатаете.

Я выучил C Sharp с одной целью-написать текстовый процессор, который включает в себя мои потребности. Например, что вы можете играть с пробелами между словами и пробелами между строками, поднимать.

На Microsoft Windows вы можете получить процессор ID (не процесс ID) через WMI, который в этом случае (только при приобретении процессора ID) основан на инструкции CPUID Существует ли подобный метод.

Я пытаюсь написать пользовательский процессор Аннтоации. Процессор аннотаций будет обрабатывать каждый файл класса во время компиляции для проверки аннотаций, Но как я могу получить класс, который.

Я хочу написать НИФИ процессор, который может читать xml файл от hdfs каталоге, а затем извлечение данных в flowfile атрибутами , также, если есть случай, когда два НИФИ процессор может получить.

Мне нужно в моей программе привязать лицензию к идентификатору оборудования. Я попытался использовать WMI, но он все еще медленный.

Мне нужна, например, информация о CPU, HDD и материнской плате.

для получения более подробной информации см. этой ссылке

следующий код даст вам идентификатор процессора:

требуемое пространство имен System.Management

для жесткого диска ID и материнской платы ID подробности см. это ссылка

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

Я вот ищу то же самое, и я нашел другое решение. Если вы, ребята, заинтересованы, я разделяю этот класс:

Я не возьму на себя ответственность за это, потому что я нашел его здесь Это сработало быстрее, чем я ожидал. Без графической карты, Mac и drive id я получил уникальный идентификатор примерно за 2-3 секунды. С теми, кто включен выше, я получил его примерно за 4-5 секунд.

следующий подход был вдохновлен ответ к связанному (более общему) вопросу.

подход состоит в том, чтобы прочитать MachineGuid значение в ключ реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography . Это значение создается во время установки ОС.

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

однако никакой подход не является хакерским, и это, безусловно, будет достаточно хорошо для обычных пользователей. С положительной стороны, этот подход является быстрым с точки зрения производительности и простым в реализации.

здесь - это DLL, которая показывает:
* Идентификатор жесткого диска (уникальный серийный номер оборудования, записанный в IDE-электронном чипе диска)
* Идентификатор раздела (серийный номер тома)
* CPU ID (уникальный идентификатор оборудования)
* CPU vendor
* Скорость работы процессора
* Теоретическая скорость процессора
* Загрузка памяти (общая память используется в процентах ( % ))
* Общая физическая (общая физическая память в байтах)
* Avail Physical (физическая память, оставленная в байтах )
* Общий файл подкачки (общий файл страницы в байтах )
* Доступный файл подкачки (файл страницы, оставленный в байтах )
* Total Virtual (общая виртуальная память в байтах )
* Доступна виртуальная (Виртуальная память в байтах)
* Bios уникальный идентификатор numberBiosDate
* Bios уникальная идентификация numberBiosVersion
* Bios уникальная идентификация numberBiosProductID
* Bios уникальный идентификатор numberBiosVideo


уникальный идентификатор
Помогите с задачей. Есть форма стандартная форма входа. При входе перекидывает на страницу -форму.

Уникальный идентификатор созданного объекта класса
Задание. Составить описание класса для объектов-векторов, задаваемых одномерным массивом.

Уникальный идентификатор компа(на основе железа)
Не хочется изобретать велосипед, может есть у кого или где видели ? Ну или хотя бы на языке.

Нужно, что бы программа при запуске с USB-флешки создавала папку с уникальным именем для каждого компа, на котором она запускается. Прога на флэшке никогда не узнает на каких компах она установлена. Единственный способ это привязываться к железу, поэтому я и обратился к ID процессора.
Оказалось, что он - не уникален. В частности на прцоессорах Core 2 Duo этот ID совпадает. спасибо за информацию
Т.к. он не всегда уникален, нужно попробовать параметры других устройств. Сейчас некогда, но позже обязательно подумаю на эту тему.
ЗЫ Была мысль про лицензионный ключ винды, но сами понимаете - на территории бывшего СССР это даже не вариант Я не знаю, как это делается, ID процессора я получал, прост оскопировав код Nio.
Прога на флэшке никогда не узнает на каких компах она установлена. Единственный способ это привязываться к железу, поэтому я и обратился к ID процессора. Да, вот и хотелось бы узнать, какие бы ещё идентификаторы можно получить.
Т.к. он не всегда уникален, нужно попробовать параметры других устройств. Сейчас некогда, но позже обязательно подумаю на эту тему. Был бы рад чему-нибудь вроде "ID видеокарты" или какому-нибудь номеру материнки
ЗЫ Была мысль про лицензионный ключ винды, но сами понимаете - на территории бывшего СССР это даже не вариант

Ход моих мыслей в этом направлении был аналогичен.

Посмотрите у меня в темах когда-то был топик и там было много кода. Сейчас просто нет времени поискать. m0nax, спасибо, ваш код отлично работает.
Если я правильно понял, на учётной записи с уменьшенными правами может вылететь исключение из-за отсутствия прав на такое действие?

Решение

Что самое интересное так и не удалось выяснить ID винта, памяти и видеокарты, по ним можно пулучить только ID Plug and Play (но это немного не то).

Была мысль привязаться к MAC адресу, но как удалось выяснить он легко меняется без ведома юзера (провайдером например). Также во время тестирования мой комп выдал около 10 различных MACов (всякие виртуальные адаптеры), так что не катит.

Очень интересный вариант с UUID. Потестил, вроде нормально, только не понятно не изменится ли он со временем на одном компе или нет.

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

ЗЫ Id мышки и клавиатуры наверное лучше не использовать (это для общего развития)

Создает cpuid инструкцию, доступную на платформах x86 и x64. Эта инструкция запрашивает у процессора информацию о поддерживаемых возможностях и типе ЦП.

Синтаксис

Параметры

кпуинфо
заполняет Массив из четырех целых чисел, содержащих данные, возвращаемые в EAX, EBX, ECX и EDX о поддерживаемых возможностях ЦП.

function_id
окне Код, указывающий сведения для извлечения, переданные в EAX.

subfunction_id
окне Дополнительный код, указывающий сведения для извлечения, передаваемые в ECX.

Требования

Intrinsic Architecture
__cpuid x86, x64
__cpuidex x86, x64

Файл заголовка <intrin.h>

Remarks

Эта встроенная функция хранит поддерживаемые функции и сведения о ЦП, возвращаемые cpuid инструкцией в кпуинфо, массив 4 32-разрядных целых чисел, который заполняется ЗНАЧЕНИЯМИ регистров EAX, EBX, ECX и EDX (в этом порядке). Возвращаемые сведения имеют разные значения в зависимости от значения, переданного в качестве параметра function_id . Сведения, возвращаемые с различными значениями function_id , зависят от процессора.

Встроенная функция __cpuid очищает регистр ECX перед вызовом инструкции cpuid . __cpuidex Встроенная функция задает для регистра ecx значение subfunction_id перед созданием cpuid инструкции. Он позволяет собирать дополнительные сведения о процессоре.

Дополнительные сведения о конкретных параметрах, которые необходимо использовать, и значения, возвращаемые этими встроенными функциями процессоров Intel, см. в документации по cpuid инструкциям в руководстве по архитектуре Intel 64 и IA-32 Руководство по программированию для разработчиков программного обеспечения том 2: Справочник по набору инструкций и Справочные сведения о расширении набора инструкций по архитектуре Intel. В документации Intel используются условия "конечный" и "конечный лист" для function_id и subfunction_id параметров, передаваемых в EAX и ECX.

Дополнительные сведения о конкретных параметрах, которые необходимо использовать, и значения, возвращаемые этими встроенными функциями процессоров AMD, см. в документации по инструкциям cpuid в руководстве по архитектуре AMD64, том 3: General-Purpose и системные инструкции, а также в руководствах по редакциям для конкретных семейств процессоров. Ссылки на эти документы и другие сведения см. в руководствах для разработчиков AMD, руководства & ISA-документы . В документации по AMD используются термины "номер функции" и "номер подфункции" для параметров function_id и subfunction_id , передаваемых в EAX и ECX.

Если аргумент function_id равен 0, кпуинфо[0] возвращает наибольшее доступное значение нерасширенного function_id , поддерживаемое процессором. Производитель процессора кодируется в кпуинфо[1], кпуинфо[2] и кпуинфо[3].

Поддержка конкретных расширений набора инструкций и функций ЦП кодируется в результатах кпуинфо , возвращаемых для более высоких значений function_id . Дополнительные сведения содержатся в разделе вышеописанные руководства и в следующем примере кода.

Некоторые процессоры поддерживают информацию о расширенной функции CPUID. Если он поддерживается, для возврата информации могут использоваться function_id значения от 0x80000000. Чтобы определить максимально допустимое значение, задайте для function_id значение 0x80000000. Максимальное значение function_id , поддерживаемое для расширенных функций, записывается в кпуинфо[0].

Пример

В этом примере показаны некоторые сведения, доступные через __cpuid и __cpuidex встроенных функций. Приложение выводит список расширений набора инструкций, поддерживаемых текущим процессором. Вывод показывает возможные результаты для конкретного процессора.

Завершение блока, относящегося только к системам Майкрософт

Читайте также: