Какой формат 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;
}
Другие вопросы по тегам