Prepare timer support

This commit is contained in:
momo5502
2025-06-01 13:30:10 +02:00
parent c605131a80
commit da658e5178
12 changed files with 110 additions and 21 deletions

View File

@@ -30,4 +30,43 @@ namespace syscalls
return STATUS_SUCCESS;
}
}
NTSTATUS handle_NtCreateTimer2(const syscall_context& c, const emulator_object<handle> timer_handle,
uint64_t /*reserved*/,
const emulator_object<OBJECT_ATTRIBUTES<EmulatorTraits<Emu64>>> object_attributes,
ULONG /*attributes*/, ACCESS_MASK /*desired_access*/)
{
std::u16string name{};
if (object_attributes)
{
const auto attributes = object_attributes.read();
if (attributes.ObjectName)
{
name = read_unicode_string(c.emu, attributes.ObjectName);
c.win_emu.log.print(color::dark_gray, "--> Timer name: %s\n", u16_to_u8(name).c_str());
}
}
if (!name.empty())
{
for (auto& entry : c.proc.timers)
{
if (entry.second.name == name)
{
++entry.second.ref_count;
timer_handle.write(c.proc.timers.make_handle(entry.first));
return STATUS_OBJECT_NAME_EXISTS;
}
}
}
timer t{};
t.name = std::move(name);
const auto h = c.proc.timers.store(std::move(t));
timer_handle.write(h);
return STATUS_SUCCESS;
}
}