Самый безопасный способ получить идентификатор процессора или некоторую информацию об оборудовании - PullRequest
4 голосов
/ 03 января 2011

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

    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 ]

6 голосов
/ 03 января 2011

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

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

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

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

3 голосов
/ 03 января 2011

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

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

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

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