mirror of
https://github.com/momo5502/emulator.git
synced 2026-01-09 23:56:16 +00:00
Fix user_handle_table initialization
This commit is contained in:
@@ -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<USER_MONITOR>(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);
|
||||
|
||||
@@ -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<emulator_object<RTL_USER_PROCESS_PARAMETERS32>> process_params32;
|
||||
std::optional<uint64_t> rtl_user_thread_start32{};
|
||||
|
||||
user_handle_table user_handles{};
|
||||
user_handle_table user_handles;
|
||||
handle default_monitor_handle{};
|
||||
handle_store<handle_types::event, event> events{};
|
||||
handle_store<handle_types::file, file> files{};
|
||||
|
||||
@@ -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<size_t>(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<size_t>(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<USER_SERVERINFO> srv_obj(memory, server_info_addr_);
|
||||
const emulator_object<USER_SERVERINFO> srv_obj(*memory_, server_info_addr_);
|
||||
srv_obj.access([&](USER_SERVERINFO& srv) {
|
||||
srv.cHandleEntries = MAX_HANDLES - 1; //
|
||||
});
|
||||
|
||||
const auto handle_table_size = static_cast<size_t>(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<USER_SHAREDINFO> get_server_info() const
|
||||
|
||||
Reference in New Issue
Block a user