Какой формат Win32_Processor.ProcessorId?
Я пытаюсь сгенерировать случайный ProcessorId, для этого мне нужно выяснить его формат.
Идентификатор процессора на моем компьютере:
Get-WmiObject -Query "ВЫБЕРИТЕ ИМЯ, ProcessorId ОТ Win32_Processor"
__GENUS : 2
__CLASS : Win32_Processor
__SUPERCLASS :
__DYNASTY :
__RELPATH :
__PROPERTY_COUNT : 2
__DERIVATION : {}
__SERVER :
__NAMESPACE :
__PATH :
Name : Intel(R) Core(TM) i7-3537U CPU @ 2.00GHz
ProcessorId : BFEBFBFF000306A9
PSComputerName :
Свойство ProcessorId из WMI имеет следующее описание:
Информация о процессоре, которая описывает функции процессора. Для CPU класса x86 формат поля зависит от поддержки процессором инструкции CPUID. Если инструкция поддерживается, свойство содержит 2 (два) значения в формате DWORD. Первым является смещение 08h-0Bh, которое является значением EAX, которое инструкция CPUID возвращает с входом EAX, установленным на 1. Второе, является смещением 0Ch-0Fh, которое является значением EDX, которое возвращает инструкция. Только первые два байта свойства являются значимыми и содержат содержимое регистра DX при перезагрузке ЦП - все остальные установлены в 0 (ноль), а содержимое в формате DWORD.
Это значение происходит от члена идентификатора процессора структуры информации о процессоре в информации SMBIOS.
Может кто-нибудь объяснить глубоко формат Win32_Processor.ProcessorId?
Как сгенерировать его из функции __cpuid?
(Метод в этом ответе не работает.)
1 ответ
Я все еще не очень хорошо понимаю описание ProcessorId.
Этот код генерирует точно такую же строку с Win32_Processor.ProcessorId.
#include <array>
#include <iomanip>
#include <iostream>
#include <sstream>
#include <string>
std::string GetProcessorId() {
std::array<int, 4> cpuInfo;
__cpuid(cpuInfo.data(), 1);
std::ostringstream buffer;
buffer
<< std::uppercase << std::hex << std::setfill('0')
<< std::setw(8) << cpuInfo.at(3)
<< std::setw(8) << cpuInfo.at(0);
return buffer.str();
}
int main(void) {
std::cout << GetProcessorId() << std::endl;
return 0;
}