Самый безопасный способ получить идентификатор процессора или некоторую информацию об оборудовании

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

    internal static string GetProcessorId()
    {
        try
        {
            StringBuilder sb = new StringBuilder();
            using (System.Management.ManagementClass theClass = new System.Management.ManagementClass("Win32_Processor"))
            {
                using (System.Management.ManagementObjectCollection theCollectionOfResults = theClass.GetInstances())
                {
                    foreach (System.Management.ManagementObject currentResult in theCollectionOfResults)
                    {
                        sb.Append(currentResult["ProcessorID"].ToString());
                    }
                }
            }
            return sb.ToString();
        }
        catch (Exception exception)
        {
            Console.WriteLine(exception.Message);
            return "";
        }
    }

Но когда я запускаю это в Windows XP (с виртуальной машины), мой currentResult["ProcessorID"] является null, Я не уверен, что это потому, что я использую виртуальную машину, но это может быть потому, что это XP. Во всяком случае, я не очень доверяю этому коду. Это достаточно безопасно? Должен ли я получить идентификатор компьютера другим способом? Это все часть системы лицензирования, которую я разрабатываю.

2 ответа

Решение

Для небольшого инструмента, который я написал (Windows Forms .NET 2.0), мне нужно что-то подобное.

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

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

(Если вам интересно, это инструмент, если мне разрешено ссылаться на него)

Даже если бы это сработало, оно не сделало бы то, что вы хотите. ProcessorID дает вам идентификацию продукта процесса (Pentium X с функциями Y и Z), а не о конкретном экземпляре ЦП. Это описано так:

Информация о процессоре, которая описывает функции процессора. Для CPU класса x86 формат поля зависит от поддержки процессором инструкции CPUID. Если инструкция поддерживается, свойство содержит 2 (два) значения в формате DWORD. Первым является смещение 08h-0Bh, которое является значением EAX, которое инструкция CPUID возвращает с входом EAX, установленным на 1. Второе, является смещением 0Ch-0Fh, которое является значением EDX, которое возвращает инструкция. Только первые два байта свойства являются значимыми и содержат содержимое регистра DX при перезагрузке ЦП - все остальные установлены в 0 (ноль), а содержимое в формате DWORD.

Аппаратное обеспечение IBM PC не имеет какой-либо фальшивой идентификации оборудования.

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