From: Isaac Marovitz isaacryu@icloud.com
--- dlls/ntdll/ntdll.spec | 1 + dlls/ntdll/unix/thread.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+)
diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec index 014c221e59f..3238450fd73 100644 --- a/dlls/ntdll/ntdll.spec +++ b/dlls/ntdll/ntdll.spec @@ -338,6 +338,7 @@ @ stdcall -syscall NtQueryVirtualMemory(long ptr long ptr long ptr) @ stdcall -syscall NtQueryVolumeInformationFile(long ptr ptr long long) @ stdcall -syscall NtQueueApcThread(long ptr long long long) +@ stdcall -syscall NtQueueApcThreadEx(long long ptr long long long) @ stdcall -syscall NtRaiseException(ptr ptr long) @ stdcall -syscall NtRaiseHardError(long long ptr ptr long ptr) @ stdcall -syscall NtReadFile(long long ptr ptr ptr ptr long ptr ptr) diff --git a/dlls/ntdll/unix/thread.c b/dlls/ntdll/unix/thread.c index 7ae5c022fb2..d9e9704259f 100644 --- a/dlls/ntdll/unix/thread.c +++ b/dlls/ntdll/unix/thread.c @@ -1689,6 +1689,34 @@ NTSTATUS WINAPI NtQueueApcThread( HANDLE handle, PNTAPCFUNC func, ULONG_PTR arg1 }
+/****************************************************************************** + * NtQueueApcThreadEx (NTDLL.@) + */ +NTSTATUS WINAPI NtQueueApcThreadEx( HANDLE handle, HANDLE reserve_handle, PNTAPCFUNC func, + ULONG_PTR arg1, ULONG_PTR arg2, ULONG_PTR arg3 ) +{ + NTSTATUS ret; + + SERVER_START_REQ( queue_apc ) + { + FIXME( "reserve handle should be used: %p\n", reserve_handle ) + req->handle = wine_server_obj_handle( handle ); + if (func) + { + req->call.type = APC_USER; + req->call.user.func = wine_server_client_ptr( func ); + req->call.user.args[0] = arg1; + req->call.user.args[1] = arg2; + req->call.user.args[2] = arg3; + } + else req->call.type = APC_NONE; /* wake up only */ + ret = wine_server_call( req ); + } + SERVER_END_REQ; + return ret; +} + + /*********************************************************************** * set_thread_context */