diff --git a/src/windows-emulator/process_context.cpp b/src/windows-emulator/process_context.cpp index 534ed420..08bc96c6 100644 --- a/src/windows-emulator/process_context.cpp +++ b/src/windows-emulator/process_context.cpp @@ -420,7 +420,7 @@ void process_context::setup(x86_64_emulator& emu, memory_manager& memory, regist this->default_register_set = emu.save_registers(); - this->user_handles.setup(memory); + this->user_handles.setup(); auto [h, monitor_obj] = this->user_handles.allocate_object(handle_types::monitor); this->default_monitor_handle = h; @@ -464,6 +464,7 @@ void process_context::serialize(utils::buffer_serializer& buffer) const buffer.write(this->kusd); buffer.write(this->is_wow64_process); + buffer.write(this->windows_build_number); buffer.write(this->ntdll_image_base); buffer.write(this->ldr_initialize_thunk); buffer.write(this->rtl_user_thread_start); @@ -512,6 +513,7 @@ void process_context::deserialize(utils::buffer_deserializer& buffer) buffer.read(this->kusd); buffer.read(this->is_wow64_process); + buffer.read(this->windows_build_number); buffer.read(this->ntdll_image_base); buffer.read(this->ldr_initialize_thunk); buffer.read(this->rtl_user_thread_start); diff --git a/src/windows-emulator/process_context.hpp b/src/windows-emulator/process_context.hpp index 360abaa1..e38cbe5d 100644 --- a/src/windows-emulator/process_context.hpp +++ b/src/windows-emulator/process_context.hpp @@ -67,7 +67,8 @@ struct process_context base_allocator(emu), peb64(emu), process_params64(emu), - kusd(memory, clock) + kusd(memory, clock), + user_handles(memory) { } @@ -126,7 +127,7 @@ struct process_context std::optional> process_params32; std::optional rtl_user_thread_start32{}; - user_handle_table user_handles{}; + user_handle_table user_handles; handle default_monitor_handle{}; handle_store events{}; handle_store files{}; diff --git a/src/windows-emulator/user_handle_table.hpp b/src/windows-emulator/user_handle_table.hpp index 68780919..88785098 100644 --- a/src/windows-emulator/user_handle_table.hpp +++ b/src/windows-emulator/user_handle_table.hpp @@ -7,24 +7,28 @@ class user_handle_table public: static constexpr uint32_t MAX_HANDLES = 0xFFFF; - void setup(memory_manager& memory) + user_handle_table(memory_manager& memory) + : memory_(&memory) + { + } + + void setup() { - memory_ = &memory; used_indices_.resize(MAX_HANDLES, false); const auto server_info_size = static_cast(page_align_up(sizeof(USER_SERVERINFO))); - server_info_addr_ = memory.allocate_memory(server_info_size, memory_permission::read); + server_info_addr_ = memory_->allocate_memory(server_info_size, memory_permission::read); const auto display_info_size = static_cast(page_align_up(sizeof(USER_DISPINFO))); - display_info_addr_ = memory.allocate_memory(display_info_size, memory_permission::read); + display_info_addr_ = memory_->allocate_memory(display_info_size, memory_permission::read); - const emulator_object srv_obj(memory, server_info_addr_); + const emulator_object srv_obj(*memory_, server_info_addr_); srv_obj.access([&](USER_SERVERINFO& srv) { srv.cHandleEntries = MAX_HANDLES - 1; // }); const auto handle_table_size = static_cast(page_align_up(sizeof(USER_HANDLEENTRY) * MAX_HANDLES)); - handle_table_addr_ = memory.allocate_memory(handle_table_size, memory_permission::read); + handle_table_addr_ = memory_->allocate_memory(handle_table_size, memory_permission::read); } emulator_object get_server_info() const