diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec index 36d997d1762..46403b3f4a1 100644 --- a/dlls/ntdll/ntdll.spec +++ b/dlls/ntdll/ntdll.spec @@ -145,7 +145,7 @@ @ stdcall -syscall NtAllocateVirtualMemoryEx(long ptr ptr long long ptr long) @ stdcall -syscall NtAreMappedFilesTheSame(ptr ptr) @ stdcall -syscall NtAssignProcessToJobObject(long long) -# @ stub NtCallbackReturn +@ stdcall -syscall NtCallbackReturn(ptr long long) # @ stub NtCancelDeviceWakeupRequest @ stdcall -syscall NtCancelIoFile(long ptr) @ stdcall -syscall NtCancelIoFileEx(long ptr ptr) diff --git a/dlls/ntdll/tests/exception.c b/dlls/ntdll/tests/exception.c index 8bede41ee49..f79a302d4aa 100644 --- a/dlls/ntdll/tests/exception.c +++ b/dlls/ntdll/tests/exception.c @@ -39,6 +39,7 @@ static NTSTATUS (WINAPI *pNtGetContextThread)(HANDLE,CONTEXT*); static NTSTATUS (WINAPI *pNtSetContextThread)(HANDLE,CONTEXT*); static NTSTATUS (WINAPI *pNtQueueApcThread)(HANDLE handle, PNTAPCFUNC func, ULONG_PTR arg1, ULONG_PTR arg2, ULONG_PTR arg3); +static NTSTATUS (WINAPI *pNtCallbackReturn)( void *ret_ptr, ULONG ret_len, NTSTATUS status ); static NTSTATUS (WINAPI *pRtlRaiseException)(EXCEPTION_RECORD *rec); static PVOID (WINAPI *pRtlUnwind)(PVOID, PVOID, PEXCEPTION_RECORD, PVOID); static VOID (WINAPI *pRtlCaptureContext)(CONTEXT*); @@ -7252,6 +7253,12 @@ static void test_user_apc(void) ok(test_apc_called, "Test user APC was not called.\n"); } +static void test_user_callback(void) +{ + NTSTATUS status = pNtCallbackReturn( NULL, 0, STATUS_SUCCESS ); + ok( status == STATUS_NO_CALLBACK_ACTIVE, "failed %x\n", status ); +} + static DWORD WINAPI suspend_thread_test( void *arg ) { HANDLE event = arg; @@ -9135,6 +9142,7 @@ START_TEST(exception) X(NtGetContextThread); X(NtSetContextThread); X(NtQueueApcThread); + X(NtCallbackReturn); X(NtReadVirtualMemory); X(NtClose); X(RtlUnwind); @@ -9329,6 +9337,7 @@ START_TEST(exception) NtCurrentTeb()->Peb->BeingDebugged = 0; test_user_apc(); + test_user_callback(); test_vectored_continue_handler(); test_suspend_thread(); test_suspend_process(); diff --git a/dlls/ntdll/unix/signal_arm.c b/dlls/ntdll/unix/signal_arm.c index a86805b113c..1d9b02fe2a3 100644 --- a/dlls/ntdll/unix/signal_arm.c +++ b/dlls/ntdll/unix/signal_arm.c @@ -575,6 +575,15 @@ NTSTATUS call_user_exception_dispatcher( EXCEPTION_RECORD *rec, CONTEXT *context } +/*********************************************************************** + * NtCallbackReturn (NTDLL.@) + */ +NTSTATUS WINAPI NtCallbackReturn( void *ret_ptr, ULONG ret_len, NTSTATUS status ) +{ + return STATUS_NO_CALLBACK_ACTIVE; +} + + /*********************************************************************** * handle_syscall_fault * diff --git a/dlls/ntdll/unix/signal_arm64.c b/dlls/ntdll/unix/signal_arm64.c index 0ce6206aa9d..4f3dce3d26b 100644 --- a/dlls/ntdll/unix/signal_arm64.c +++ b/dlls/ntdll/unix/signal_arm64.c @@ -722,6 +722,15 @@ NTSTATUS call_user_exception_dispatcher( EXCEPTION_RECORD *rec, CONTEXT *context } +/*********************************************************************** + * NtCallbackReturn (NTDLL.@) + */ +NTSTATUS WINAPI NtCallbackReturn( void *ret_ptr, ULONG ret_len, NTSTATUS status ) +{ + return STATUS_NO_CALLBACK_ACTIVE; +} + + /*********************************************************************** * handle_syscall_fault * diff --git a/dlls/ntdll/unix/signal_i386.c b/dlls/ntdll/unix/signal_i386.c index 72aff4614ca..3f74761fc75 100644 --- a/dlls/ntdll/unix/signal_i386.c +++ b/dlls/ntdll/unix/signal_i386.c @@ -1579,6 +1579,15 @@ NTSTATUS call_user_exception_dispatcher( EXCEPTION_RECORD *rec, CONTEXT *context } +/*********************************************************************** + * NtCallbackReturn (NTDLL.@) + */ +NTSTATUS WINAPI NtCallbackReturn( void *ret_ptr, ULONG ret_len, NTSTATUS status ) +{ + return STATUS_NO_CALLBACK_ACTIVE; +} + + /********************************************************************** * get_fpu_code * diff --git a/dlls/ntdll/unix/signal_x86_64.c b/dlls/ntdll/unix/signal_x86_64.c index 390121726ad..c2e3c9e1753 100644 --- a/dlls/ntdll/unix/signal_x86_64.c +++ b/dlls/ntdll/unix/signal_x86_64.c @@ -2275,6 +2275,15 @@ NTSTATUS call_user_exception_dispatcher( EXCEPTION_RECORD *rec, CONTEXT *context } +/*********************************************************************** + * NtCallbackReturn (NTDLL.@) + */ +NTSTATUS WINAPI NtCallbackReturn( void *ret_ptr, ULONG ret_len, NTSTATUS status ) +{ + return STATUS_NO_CALLBACK_ACTIVE; +} + + /*********************************************************************** * is_privileged_instr *