Win32_Processor.ProcessorId 的格式是啥?

Posted

技术标签:

【中文标题】Win32_Processor.ProcessorId 的格式是啥?【英文标题】:What's the format of Win32_Processor.ProcessorId?Win32_Processor.ProcessorId 的格式是什么? 【发布时间】:2018-10-28 15:16:49 【问题描述】:

我正在尝试生成随机的 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   :

WMI 的 ProcessorId 属性有以下描述:

描述处理器功能的处理器信息。为 x86 类 CPU,字段格式取决于处理器支持 CPUID 指令。如果支持该指令,则属性 包含 2(两个)DWORD 格式的值。第一个是偏移量 08h-0Bh,这是 CPUID 指令返回的 EAX 值 输入 EAX 设置为 1。第二个是 0Ch-0Fh 的偏移量,即 指令返回的 EDX 值。只有前两个字节 该属性很重要并且包含 DX 的内容 CPU 复位时的寄存器——所有其他寄存器都设置为 0(零),并且内容 是 DWORD 格式。

此值来自处理器的处理器 ID 成员 SMBios信息中的信息结构。

谁能深入解释一下Win32_Processor.ProcessorId的格式?

如何从函数__cpuid生成?

(this answer中的方法不起作用。)

【问题讨论】:

它是documented: "数据类型:uint32"。匹配 winapi 声明,DWORD。它不是一个随机数。 【参考方案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;

【讨论】:

以上是关于Win32_Processor.ProcessorId 的格式是啥?的主要内容,如果未能解决你的问题,请参考以下文章

安装了MPI,可是Fortran仍然不能识别use mpi

logstash 收集日志传到另外一台机器的logstash并落地到磁盘

Tomcat请求处理流程与源码浅析

Nifi02 部署与入门

Nifi02 部署与入门

Lambda AWS 不调用节点 mysql 回调