From 6dd7902d6f148a4ac78e5478edb3a2ca8624f74c Mon Sep 17 00:00:00 2001 From: gcontini <1121667+gcontini@users.noreply.github.com> Date: 周日, 15 3月 2020 16:07:14 +0800 Subject: [PATCH] cpu brand --- src/library/os/windows/execution_environment.cpp | 102 +++++++++++++++++++++++++++++--------------------- 1 files changed, 59 insertions(+), 43 deletions(-) diff --git a/src/library/os/windows/execution_environment.cpp b/src/library/os/windows/execution_environment.cpp index b9d43ca..3e65bc8 100644 --- a/src/library/os/windows/execution_environment.cpp +++ b/src/library/os/windows/execution_environment.cpp @@ -4,67 +4,83 @@ * Created on: Dec 15, 2019 * Author: GC */ -#include <paths.h> +#include <windows.h> #include <sys/stat.h> -#include <unistd.h> #include <fstream> #include <iostream> #include <stdio.h> -#include <string.h> -#include <dirent.h> -#include <sys/utsname.h> +#include <string> #include "isvm/BIOSReader.h" #include "isvm/Native.h" #include "../../base/base.h" +#include "../../base/StringUtils.h" #include "../cpu_info.hpp" #include "../execution_environment.hpp" namespace license { +namespace os { using namespace std; - - -VIRTUALIZATION ExecutionEnvironment::getVirtualization() { - VIRTUALIZATION result; - CpuInfo cpuInfo; - bool isContainer = false; - if (isContainer) { - result = CONTAINER; - } else if (cpuInfo.cpu_virtual() || is_cloud()) { - result = VM; - } else { - result = NONE; - } - return result; -} - -bool ExecutionEnvironment::is_cloud() { return getCloudProvider() != ON_PREMISE; } - -bool ExecutionEnvironment::is_docker() { return false; } - -CLOUD_PROVIDER ExecutionEnvironment::getCloudProvider() { +ExecutionEnvironment::ExecutionEnvironment() { if (InitEntryPoints()) { BIOSReader reader; SystemInformation info = reader.readSystemInfo(); - - const char *vmVendors[] = { - "VMware", "Microsoft Corporation", "Virtual Machine", "innotek GmbH", "PowerVM", "Bochs", "KVM"}; - - const int count = _countof(vmVendors); - for (int i = 0; i != count; ++i) { - const char *vendor = vmVendors[i]; - - if (std::string::npos != info.Manufacturer.find(vendor) || - std::string::npos != info.ProductName.find(vendor) || - std::string::npos != info.SerialNum.find(vendor)) { - std::cout << "Inside virual machine!"; - return 1; - } - } - } else { - return -1; + m_sys_vendor = toupper_copy(info.Manufacturer); + m_bios_vendor = toupper_copy(info.ProductName); + m_bios_description = toupper_copy(info.SysVersion) + toupper_copy(info.family); } } +#define MAX_UNITS 20 +int wine_container() { +DWORD fileMaxLen; +size_t ndrives = 0; +DWORD fileFlags; +char volName[MAX_PATH], fileSysName[MAX_PATH]; +DWORD volSerial = 0; +const DWORD dwSize = MAX_PATH; +char szLogicalDrives[MAX_PATH] = {0}; + +int result = 0; +const DWORD dwResult = GetLogicalDriveStrings(dwSize, szLogicalDrives); + +if (dwResult > 0 && dwResult <= MAX_PATH) { + char* szSingleDrive = szLogicalDrives; + while (*szSingleDrive && ndrives < MAX_UNITS) { + // get the next drive + UINT driveType = GetDriveType(szSingleDrive); + if (driveType == DRIVE_FIXED) { + string name = szSingleDrive + string("/var/run/systemd/container"); + try { + ifstream systemd_container(name); + if (systemd_container.good()) { + result = 1; + for (string line; getline(systemd_container, line);) { + if (line.find("docker") != string::npos) { + result = 1; + break; + } else if (line.find("lxc") != string::npos) { + result = 2; + break; + } + } + } + } catch (...) { + //no problem,we're just guessing + } + } + } +} + return result; +} + +bool ExecutionEnvironment::is_docker() const { + // let's check we're not in linux under wine ;) ... +//int cont = wine_container(); + return false; +} +//TODO +bool ExecutionEnvironment::is_container() const { return is_docker(); } +} // namespace os } // namespace license -- Gitblit v1.9.1