mirror of
https://github.com/momo5502/hypervisor.git
synced 2025-04-19 13:42:55 +00:00
Support multiple instances
This commit is contained in:
parent
4cde82aae1
commit
a3f67b20b8
@ -14,6 +14,11 @@ public:
|
|||||||
driver(driver&& obj) noexcept = default;;
|
driver(driver&& obj) noexcept = default;;
|
||||||
driver& operator=(driver&& obj) noexcept = default;
|
driver& operator=(driver&& obj) noexcept = default;
|
||||||
|
|
||||||
|
operator bool() const
|
||||||
|
{
|
||||||
|
return this->service_;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
service_handle manager_{};
|
service_handle manager_{};
|
||||||
service_handle service_{};
|
service_handle service_{};
|
||||||
|
@ -44,28 +44,48 @@ driver_device& get_driver_device()
|
|||||||
static driver hypervisor{};
|
static driver hypervisor{};
|
||||||
static driver_device device{};
|
static driver_device device{};
|
||||||
|
|
||||||
if (device)
|
if (!hypervisor)
|
||||||
{
|
|
||||||
return device;
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
device = create_driver_device();
|
|
||||||
}
|
|
||||||
catch (...)
|
|
||||||
{
|
{
|
||||||
hypervisor = create_driver();
|
hypervisor = create_driver();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!device)
|
||||||
|
{
|
||||||
device = create_driver_device();
|
device = create_driver_device();
|
||||||
}
|
}
|
||||||
|
|
||||||
return device;
|
return device;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern "C" __declspec(dllexport)
|
||||||
|
int hyperhook_initialize()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
const auto& device = get_driver_device();
|
||||||
|
if (device)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (const std::exception& e)
|
||||||
|
{
|
||||||
|
printf("%s\n", e.what());
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
extern "C" __declspec(dllexport)
|
extern "C" __declspec(dllexport)
|
||||||
int hyperhook_write(const unsigned int process_id, const unsigned long long address, const void* data,
|
int hyperhook_write(const unsigned int process_id, const unsigned long long address, const void* data,
|
||||||
const unsigned long long size)
|
const unsigned long long size)
|
||||||
{
|
{
|
||||||
|
if (hyperhook_initialize() == 0)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
const auto& device = get_driver_device();
|
const auto& device = get_driver_device();
|
||||||
|
@ -6,6 +6,9 @@
|
|||||||
|
|
||||||
#include "resource.hpp"
|
#include "resource.hpp"
|
||||||
|
|
||||||
|
extern "C" __declspec(dllimport)
|
||||||
|
int hyperhook_initialize();
|
||||||
|
|
||||||
extern "C" __declspec(dllimport)
|
extern "C" __declspec(dllimport)
|
||||||
int hyperhook_write(unsigned int process_id, unsigned long long address, const void* data,
|
int hyperhook_write(unsigned int process_id, unsigned long long address, const void* data,
|
||||||
unsigned long long size);
|
unsigned long long size);
|
||||||
@ -99,6 +102,11 @@ void try_patch_t6()
|
|||||||
|
|
||||||
int safe_main(const int /*argc*/, char* /*argv*/[])
|
int safe_main(const int /*argc*/, char* /*argv*/[])
|
||||||
{
|
{
|
||||||
|
if (hyperhook_initialize() == 0)
|
||||||
|
{
|
||||||
|
throw std::runtime_error("Failed to initialize HyperHook");
|
||||||
|
}
|
||||||
|
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
try_patch_iw5();
|
try_patch_iw5();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user