Win32_Processor.ProcessorId的格式是什么?

时间:2018-10-28 15:16:50

标签: visual-c++

我正在尝试生成随机的ProcessorId,为此,我需要弄清楚其格式。

我计算机上的ProcessorId:

  

Get-WmiObject-查询“选择名称,来自Win32_Processor的ProcessorId”

<manifest>
    <application>
        <!-- TODO: Replace with your real AdMob app ID -->
        <meta-data
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="ca-app-pub-################~##########"/>
    </application>
</manifest>

来自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中的方法不起作用。)

1 个答案:

答案 0 :(得分: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;
}