Какой формат Win32_Processor.ProcessorId? - PullRequest
0 голосов
/ 28 октября 2018

Я пытаюсь сгенерировать случайный ProcessorId, для этого мне нужно выяснить его формат.

ProcessorId на моем компьютере:

Get-WmiObject-Query «SELECT NAME, ProcessorId FROM 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 Ответ

0 голосов
/ 28 октября 2018

Я все еще не очень хорошо понимаю описание 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...