From 919409cb28a2ef9e97d7b15046fed2c5a4d0500f Mon Sep 17 00:00:00 2001 From: gcontini <1121667+gcontini@users.noreply.github.com> Date: 周日, 15 3月 2020 11:00:50 +0800 Subject: [PATCH] fix cpuid --- src/library/os/cpu_info.hpp | 1 + src/library/os/windows/cpu_info.cpp | 10 ++++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/library/os/cpu_info.hpp b/src/library/os/cpu_info.hpp index 662e181..e0ec59f 100644 --- a/src/library/os/cpu_info.hpp +++ b/src/library/os/cpu_info.hpp @@ -29,6 +29,7 @@ bool cpu_virtual() const; uint32_t model() const; std::string vendor() const; + // std::string brand() const; VIRTUALIZATION_DETAIL getVirtualizationDetail() const; }; diff --git a/src/library/os/windows/cpu_info.cpp b/src/library/os/windows/cpu_info.cpp index 192e178..f4b0e81 100644 --- a/src/library/os/windows/cpu_info.cpp +++ b/src/library/os/windows/cpu_info.cpp @@ -41,8 +41,14 @@ string CpuInfo::vendor() const { // hypervisor flag false, try to get the vendor name, see if it's a virtual cpu int cpui[4] = {0}; - __cpuid(cpui, 0x0); - return string(reinterpret_cast<const char *>(cpui), 12); + __cpuidex(cpui, 0x0, 0x0); + + char vendor[13]; + memset(vendor, 0, sizeof(vendor)); + *reinterpret_cast<int *>(vendor) = cpui[1]; + *reinterpret_cast<int *>(vendor +4) = cpui[3]; + *reinterpret_cast<int *>(vendor + 8) = cpui[2]; + return string(vendor, 12); } } // namespace os } /* namespace license */ -- Gitblit v1.9.1