mirror of
https://github.com/momo5502/hypervisor.git
synced 2025-04-19 13:42:55 +00:00
Fixes
This commit is contained in:
parent
630b631692
commit
c62cc44a53
36
external/CMakeLists.txt
vendored
36
external/CMakeLists.txt
vendored
@ -2,37 +2,5 @@ include(ExternalProject)
|
|||||||
|
|
||||||
#############################
|
#############################
|
||||||
|
|
||||||
set(VCRTL_LIBRARY "${CMAKE_CURRENT_BINARY_DIR}/vcrtl/$<CONFIG>/vcrtl_driver.lib")
|
include(vcrtl.cmake)
|
||||||
|
include(ia32-doc.cmake)
|
||||||
ExternalProject_Add(
|
|
||||||
vcrtl_build
|
|
||||||
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/vcrtl
|
|
||||||
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/vcrtl
|
|
||||||
BUILD_COMMAND "${CMAKE_COMMAND}" --build ${CMAKE_CURRENT_BINARY_DIR}/vcrtl --config $<CONFIG> --target vcrtl_driver
|
|
||||||
PATCH_COMMAND cmd /C "echo. > ${CMAKE_CURRENT_SOURCE_DIR}/vcrtl/src/runtime.cpp"
|
|
||||||
INSTALL_COMMAND ""
|
|
||||||
USES_TERMINAL_CONFIGURE 1
|
|
||||||
USES_TERMINAL_BUILD 1
|
|
||||||
BUILD_ALWAYS 1
|
|
||||||
BUILD_BYPRODUCTS "${VCRTL_LIBRARY}"
|
|
||||||
CMAKE_ARGS
|
|
||||||
"-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}"
|
|
||||||
|
|
||||||
"-DCMAKE_SHARED_LINKER_FLAGS=${CMAKE_SHARED_LINKER_FLAGS}"
|
|
||||||
"-DCMAKE_MODULE_LINKER_FLAGS=${CMAKE_MODULE_LINKER_FLAGS}"
|
|
||||||
"-DCMAKE_EXE_LINKER_FLAGS=${CMAKE_EXE_LINKER_FLAGS}"
|
|
||||||
|
|
||||||
"-DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}"
|
|
||||||
"-DCMAKE_C_FLAGS_DEBUG=${CMAKE_C_FLAGS_DEBUG}"
|
|
||||||
"-DCMAKE_C_FLAGS_RELEASE=${CMAKE_C_FLAGS_RELEASE}"
|
|
||||||
|
|
||||||
"-DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}"
|
|
||||||
"-DCMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG}"
|
|
||||||
"-DCMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE}"
|
|
||||||
|
|
||||||
"-DCMAKE_MSVC_RUNTIME_LIBRARY=${CMAKE_MSVC_RUNTIME_LIBRARY}"
|
|
||||||
)
|
|
||||||
|
|
||||||
add_library(vcrtl_driver INTERFACE)
|
|
||||||
add_dependencies(vcrtl_driver vcrtl_build)
|
|
||||||
target_link_libraries(vcrtl_driver INTERFACE "${VCRTL_LIBRARY}")
|
|
3
external/ia32-doc.cmake
vendored
Normal file
3
external/ia32-doc.cmake
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
add_library(ia32_doc INTERFACE)
|
||||||
|
|
||||||
|
target_include_directories(ia32_doc INTERFACE ia32-doc/out)
|
34
external/vcrtl.cmake
vendored
Normal file
34
external/vcrtl.cmake
vendored
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
set(VCRTL_LIBRARY "${CMAKE_CURRENT_BINARY_DIR}/vcrtl/$<CONFIG>/vcrtl_driver.lib")
|
||||||
|
|
||||||
|
ExternalProject_Add(
|
||||||
|
vcrtl_build
|
||||||
|
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/vcrtl
|
||||||
|
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/vcrtl
|
||||||
|
BUILD_COMMAND "${CMAKE_COMMAND}" --build ${CMAKE_CURRENT_BINARY_DIR}/vcrtl --config $<CONFIG> --target vcrtl_driver
|
||||||
|
PATCH_COMMAND cmd /C "echo. > ${CMAKE_CURRENT_SOURCE_DIR}/vcrtl/src/runtime.cpp"
|
||||||
|
INSTALL_COMMAND ""
|
||||||
|
USES_TERMINAL_CONFIGURE 1
|
||||||
|
USES_TERMINAL_BUILD 1
|
||||||
|
BUILD_ALWAYS 1
|
||||||
|
BUILD_BYPRODUCTS "${VCRTL_LIBRARY}"
|
||||||
|
CMAKE_ARGS
|
||||||
|
"-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}"
|
||||||
|
|
||||||
|
"-DCMAKE_SHARED_LINKER_FLAGS=${CMAKE_SHARED_LINKER_FLAGS}"
|
||||||
|
"-DCMAKE_MODULE_LINKER_FLAGS=${CMAKE_MODULE_LINKER_FLAGS}"
|
||||||
|
"-DCMAKE_EXE_LINKER_FLAGS=${CMAKE_EXE_LINKER_FLAGS}"
|
||||||
|
|
||||||
|
"-DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}"
|
||||||
|
"-DCMAKE_C_FLAGS_DEBUG=${CMAKE_C_FLAGS_DEBUG}"
|
||||||
|
"-DCMAKE_C_FLAGS_RELEASE=${CMAKE_C_FLAGS_RELEASE}"
|
||||||
|
|
||||||
|
"-DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}"
|
||||||
|
"-DCMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG}"
|
||||||
|
"-DCMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE}"
|
||||||
|
|
||||||
|
"-DCMAKE_MSVC_RUNTIME_LIBRARY=${CMAKE_MSVC_RUNTIME_LIBRARY}"
|
||||||
|
)
|
||||||
|
|
||||||
|
add_library(vcrtl_driver INTERFACE)
|
||||||
|
add_dependencies(vcrtl_driver vcrtl_build)
|
||||||
|
target_link_libraries(vcrtl_driver INTERFACE "${VCRTL_LIBRARY}")
|
@ -19,4 +19,7 @@ add_custom_command(TARGET driver
|
|||||||
COMMENT "Signing using Nvidia certificate"
|
COMMENT "Signing using Nvidia certificate"
|
||||||
)
|
)
|
||||||
|
|
||||||
target_link_libraries(driver vcrtl_driver)
|
target_link_libraries(driver
|
||||||
|
vcrtl_driver
|
||||||
|
ia32_doc
|
||||||
|
)
|
||||||
|
@ -7,9 +7,7 @@
|
|||||||
#include "memory.hpp"
|
#include "memory.hpp"
|
||||||
#include "thread.hpp"
|
#include "thread.hpp"
|
||||||
|
|
||||||
#define IA32_FEATURE_CONTROL_MSR 0x3A
|
#include <ia32.hpp>
|
||||||
#define IA32_FEATURE_CONTROL_MSR_LOCK 0x0001
|
|
||||||
#define IA32_FEATURE_CONTROL_MSR_ENABLE_VMXON_OUTSIDE_SMX 0x0004
|
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
@ -17,18 +15,16 @@ namespace
|
|||||||
|
|
||||||
bool is_vmx_supported()
|
bool is_vmx_supported()
|
||||||
{
|
{
|
||||||
int32_t cpuid_data[4] = {0};
|
cpuid_eax_01 data{};
|
||||||
__cpuid(cpuid_data, 1);
|
__cpuid(reinterpret_cast<int*>(&data), CPUID_VERSION_INFORMATION);
|
||||||
return cpuid_data[2] & 0x20;
|
return data.cpuid_feature_information_ecx.virtual_machine_extensions;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool is_vmx_available()
|
bool is_vmx_available()
|
||||||
{
|
{
|
||||||
const auto feature_control = __readmsr(IA32_FEATURE_CONTROL_MSR);
|
ia32_feature_control_register feature_control{};
|
||||||
const auto is_locked = (feature_control & IA32_FEATURE_CONTROL_MSR_LOCK) != 0;
|
feature_control.flags = __readmsr(IA32_FEATURE_CONTROL);
|
||||||
const auto is_enabled_outside_smx = (feature_control & IA32_FEATURE_CONTROL_MSR_ENABLE_VMXON_OUTSIDE_SMX) != 0;
|
return feature_control.lock_bit && feature_control.enable_vmx_outside_smx;
|
||||||
|
|
||||||
return is_locked && is_enabled_outside_smx;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool is_virtualization_supported()
|
bool is_virtualization_supported()
|
||||||
@ -38,14 +34,14 @@ namespace
|
|||||||
|
|
||||||
bool is_hypervisor_present()
|
bool is_hypervisor_present()
|
||||||
{
|
{
|
||||||
int32_t cpuid_data[4] = {0};
|
cpuid_eax_01 data{};
|
||||||
__cpuid(cpuid_data, 1);
|
__cpuid(reinterpret_cast<int*>(&data), CPUID_VERSION_INFORMATION);
|
||||||
|
if ((data.cpuid_feature_information_ecx.flags & 0x80000000) == 0)
|
||||||
if ((cpuid_data[2] & 0x80000000) == 0)
|
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int32_t cpuid_data[4] = {0};
|
||||||
__cpuid(cpuid_data, 0x40000001);
|
__cpuid(cpuid_data, 0x40000001);
|
||||||
return cpuid_data[0] == 'momo';
|
return cpuid_data[0] == 'momo';
|
||||||
}
|
}
|
||||||
@ -105,7 +101,7 @@ void hypervisor::enable()
|
|||||||
if (!success)
|
if (!success)
|
||||||
{
|
{
|
||||||
this->disable();
|
this->disable();
|
||||||
throw std::runtime_error("Hypervisor initialization failed");
|
//throw std::runtime_error("Hypervisor initialization failed");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user