From 325e8115af5d4862c4dbfdf2d1f341ba0f217fb8 Mon Sep 17 00:00:00 2001 From: momo5502 Date: Sat, 23 Nov 2024 19:04:25 +0100 Subject: [PATCH] Replace constructor function with actual constructor call --- src/emulator/serialization.hpp | 14 ++++---------- src/windows-emulator/io_device.hpp | 14 ++++++++------ src/windows-emulator/process_context.hpp | 11 +++++------ src/windows-emulator/syscalls.cpp | 21 ++++++++++----------- 4 files changed, 27 insertions(+), 33 deletions(-) diff --git a/src/emulator/serialization.hpp b/src/emulator/serialization.hpp index 9e18032b..d18f5c25 100644 --- a/src/emulator/serialization.hpp +++ b/src/emulator/serialization.hpp @@ -58,15 +58,9 @@ namespace utils { }; - template - struct has_construct_function : std::false_type - { - }; - template - struct has_construct_function()))>> - : std::bool_constant())), T>> + struct has_deserializer_constructor + : std::bool_constant> { }; } @@ -303,9 +297,9 @@ namespace utils template T construct_object() { - if constexpr (detail::has_construct_function::value) + if constexpr (detail::has_deserializer_constructor::value) { - return T::construct(*this); + return T(*this); } else if constexpr (std::is_default_constructible_v) { diff --git a/src/windows-emulator/io_device.hpp b/src/windows-emulator/io_device.hpp index de7a2439..5b1ab9a1 100644 --- a/src/windows-emulator/io_device.hpp +++ b/src/windows-emulator/io_device.hpp @@ -22,12 +22,14 @@ struct io_device_context emulator_pointer output_buffer{}; ULONG output_buffer_length{}; - static io_device_context construct(utils::buffer_deserializer& buffer) + io_device_context(x64_emulator& emu) + : io_status_block(emu) + { + } + + io_device_context(utils::buffer_deserializer& buffer) + : io_device_context(buffer.read().get()) { - const auto wrapper = buffer.read(); - return io_device_context{ - .io_status_block = wrapper.get(), - }; } void serialize(utils::buffer_serializer& buffer) const @@ -129,7 +131,7 @@ struct stateless_device : io_device } }; -std::unique_ptr create_device(const std::wstring_view device); +std::unique_ptr create_device(std::wstring_view device); class io_device_container : public io_device { diff --git a/src/windows-emulator/process_context.hpp b/src/windows-emulator/process_context.hpp index 8d24df50..ea3fce9a 100644 --- a/src/windows-emulator/process_context.hpp +++ b/src/windows-emulator/process_context.hpp @@ -188,6 +188,11 @@ public: { } + emulator_thread(utils::buffer_deserializer& buffer) + : emulator_thread(buffer.read().get()) + { + } + emulator_thread(x64_emulator& emu, const process_context& context, uint64_t start_address, uint64_t argument, uint64_t stack_size, uint32_t id); @@ -202,12 +207,6 @@ public: this->release(); } - static emulator_thread construct(utils::buffer_deserializer& buffer) - { - const auto wrapper = buffer.read(); - return {wrapper.get()}; - } - moved_marker marker{}; x64_emulator* emu_ptr{}; diff --git a/src/windows-emulator/syscalls.cpp b/src/windows-emulator/syscalls.cpp index e134a67a..d834a288 100644 --- a/src/windows-emulator/syscalls.cpp +++ b/src/windows-emulator/syscalls.cpp @@ -1677,17 +1677,16 @@ namespace return STATUS_INVALID_HANDLE; } - const io_device_context context{ - .event = event, - .apc_routine = apc_routine, - .apc_context = apc_context, - .io_status_block = io_status_block, - .io_control_code = io_control_code, - .input_buffer = input_buffer, - .input_buffer_length = input_buffer_length, - .output_buffer = output_buffer, - .output_buffer_length = output_buffer_length, - }; + io_device_context context{c.emu}; + context.event = event; + context.apc_routine = apc_routine; + context.apc_context = apc_context; + context.io_status_block = io_status_block; + context.io_control_code = io_control_code; + context.input_buffer = input_buffer; + context.input_buffer_length = input_buffer_length; + context.output_buffer = output_buffer; + context.output_buffer_length = output_buffer_length; return device->execute_ioctl(c.win_emu, context); }