diff --git a/src/windows-emulator/syscalls.cpp b/src/windows-emulator/syscalls.cpp index 5675d0da..622cd4b9 100644 --- a/src/windows-emulator/syscalls.cpp +++ b/src/windows-emulator/syscalls.cpp @@ -294,6 +294,11 @@ namespace syscalls NTSTATUS handle_NtQueueApcThreadEx2(const syscall_context& c, handle thread_handle, handle reserve_handle, uint32_t apc_flags, uint64_t apc_routine, uint64_t apc_argument1, uint64_t apc_argument2, uint64_t apc_argument3); + NTSTATUS handle_NtQueueApcThreadEx(const syscall_context& c, handle thread_handle, handle reserve_handle, + uint64_t apc_routine, uint64_t apc_argument1, uint64_t apc_argument2, + uint64_t apc_argument3); + NTSTATUS handle_NtQueueApcThread(const syscall_context& c, handle thread_handle, uint64_t apc_routine, + uint64_t apc_argument1, uint64_t apc_argument2, uint64_t apc_argument3); // syscalls/timer.cpp: NTSTATUS handle_NtQueryTimerResolution(const syscall_context&, emulator_object maximum_time, @@ -756,6 +761,8 @@ void syscall_dispatcher::add_handlers(std::map& ha add_handler(NtTraceControl); add_handler(NtUserGetProcessUIContextInformation); add_handler(NtQueueApcThreadEx2); + add_handler(NtQueueApcThreadEx); + add_handler(NtQueueApcThread); #undef add_handler } \ No newline at end of file diff --git a/src/windows-emulator/syscalls/thread.cpp b/src/windows-emulator/syscalls/thread.cpp index 29550928..d11511ce 100644 --- a/src/windows-emulator/syscalls/thread.cpp +++ b/src/windows-emulator/syscalls/thread.cpp @@ -594,4 +594,21 @@ namespace syscalls return STATUS_NOT_SUPPORTED; } + + NTSTATUS handle_NtQueueApcThreadEx(const syscall_context& c, const handle thread_handle, + const handle reserve_handle, const uint64_t apc_routine, + const uint64_t apc_argument1, const uint64_t apc_argument2, + const uint64_t apc_argument3) + { + return handle_NtQueueApcThreadEx2(c, thread_handle, reserve_handle, 0, apc_routine, apc_argument1, + apc_argument2, apc_argument3); + } + + NTSTATUS handle_NtQueueApcThread(const syscall_context& c, const handle thread_handle, const uint64_t apc_routine, + const uint64_t apc_argument1, const uint64_t apc_argument2, + const uint64_t apc_argument3) + { + return handle_NtQueueApcThreadEx(c, thread_handle, make_handle(0), apc_routine, apc_argument1, apc_argument2, + apc_argument3); + } } \ No newline at end of file