/* * virtualization.cpp * * Created on: Dec 15, 2019 * Author: GC */ #include #include #include #include #include #include #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; ExecutionEnvironment::ExecutionEnvironment() { if (InitEntryPoints()) { BIOSReader reader; SystemInformation info = reader.readSystemInfo(); 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