Я использовал код из http://www.rgagnon.com/javadetails/java-0580.html для получения идентификатора материнской платы, но в результате получился «ноль».
Как это может быть?
Также я немного изменил код, чтобы он выглядел так, чтобы получить ProcessorId:
"Set objWMIService = GetObject(\"winmgmts:\\\\.\\root\\cimv2\")\n"+ "Set colItems = objWMIService.ExecQuery _ \n"+ " (\"Select * from Win32_Processor\") \n"+ "For Each objItem in colItems \n"+ " Wscript.Echo objItem.ProcessorId \n"+ " exit for ' do the first cpu only! \n"+ "Next \n";
Результат примерно такой: ProcessorId = BFEBFBFF00010676
ProcessorId = BFEBFBFF00010676
На http://msdn.microsoft.com/en-us/library/aa389273%28VS.85%29.aspx написано:
ProcessorId: Информация о процессоре, которая описывает функции процессора. Для CPU класса x86 формат поля зависит от поддержки процессором инструкции CPUID. Если инструкция поддерживается, свойство содержит 2 (два) значения в формате DWORD. Первым является смещение 08h-0Bh, которое является значением EAX, которое инструкция CPUID возвращает с входом EAX, установленным на 1. Второе, является смещением 0Ch-0Fh, которое является значением EDX, которое возвращает инструкция. Только первые два байта свойства являются значимыми и содержат содержимое регистра DX при перезагрузке ЦП - все остальные установлены в 0 (ноль), а содержимое в формате DWORD.
Я не совсем понимаю это; на простом английском языке, это уникальный номер или просто число для этого класса процессоров, например, у всех Intel Core2 Duo P8400 будет этот номер?
Если для eax задано значение 1, код операции cpuid вернет тип процессора, фамилии и т. Д. В eax, а функции процессора в edx. Так что то, что вы получите, не является чем-то уникальным, например, серийный номер процессора.