Module: wine Branch: master Commit: 5eefbc6db98985a5b63bec78fde7eef2f7fa02f2 URL: https://source.winehq.org/git/wine.git/?a=commit;h=5eefbc6db98985a5b63bec78f...
Author: Alexandre Julliard julliard@winehq.org Date: Tue Jul 21 15:50:03 2020 +0200
ntdll: Implement KiRaiseUserExceptionDispatcher().
Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/ntdll/exception.c | 10 ++++++++++ dlls/ntdll/ntdll.spec | 2 +- dlls/ntdll/unix/loader.c | 2 ++ dlls/ntdll/unix/unix_private.h | 1 + 4 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/dlls/ntdll/exception.c b/dlls/ntdll/exception.c index 1fc8710897..b32665611f 100644 --- a/dlls/ntdll/exception.c +++ b/dlls/ntdll/exception.c @@ -176,6 +176,16 @@ void WINAPI RtlRaiseStatus( NTSTATUS status ) }
+/******************************************************************* + * KiRaiseUserExceptionDispatcher (NTDLL.@) + */ +void WINAPI KiRaiseUserExceptionDispatcher(void) +{ + EXCEPTION_RECORD rec = { NtCurrentTeb()->ExceptionCode }; + RtlRaiseException( &rec ); +} + + /******************************************************************* * RtlAddVectoredContinueHandler (NTDLL.@) */ diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec index a3bc57716d..0bfe3d3545 100644 --- a/dlls/ntdll/ntdll.spec +++ b/dlls/ntdll/ntdll.spec @@ -66,7 +66,7 @@ # @ stub KiFastSystemCall # @ stub KiFastSystemCallRet # @ stub KiIntSystemCall -@ stub KiRaiseUserExceptionDispatcher +@ stdcall -norelay KiRaiseUserExceptionDispatcher() @ stub KiUserApcDispatcher @ stub KiUserCallbackDispatcher @ stdcall -norelay KiUserExceptionDispatcher(ptr ptr) diff --git a/dlls/ntdll/unix/loader.c b/dlls/ntdll/unix/loader.c index a343274087..fba785c2b6 100644 --- a/dlls/ntdll/unix/loader.c +++ b/dlls/ntdll/unix/loader.c @@ -95,6 +95,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(module); extern IMAGE_NT_HEADERS __wine_spec_nt_header;
void (WINAPI *pDbgUiRemoteBreakin)( void *arg ) = NULL; +void (WINAPI *pKiRaiseUserExceptionDispatcher)(void) = NULL; NTSTATUS (WINAPI *pKiUserExceptionDispatcher)(EXCEPTION_RECORD*,CONTEXT*) = NULL; void (WINAPI *pLdrInitializeThunk)(CONTEXT*,void**,ULONG_PTR,ULONG_PTR) = NULL; void (WINAPI *pRtlUserThreadStart)( PRTL_THREAD_START_ROUTINE entry, void *arg ) = NULL; @@ -833,6 +834,7 @@ static void fixup_ntdll_imports( const IMAGE_NT_HEADERS *nt ) ERR( "%s not found\n", #name )
GET_FUNC( DbgUiRemoteBreakin ); + GET_FUNC( KiRaiseUserExceptionDispatcher ); GET_FUNC( KiUserExceptionDispatcher ); GET_FUNC( LdrInitializeThunk ); GET_FUNC( RtlUserThreadStart ); diff --git a/dlls/ntdll/unix/unix_private.h b/dlls/ntdll/unix/unix_private.h index 19f742c200..60883bfa39 100644 --- a/dlls/ntdll/unix/unix_private.h +++ b/dlls/ntdll/unix/unix_private.h @@ -72,6 +72,7 @@ static const UINT_PTR page_size = 0x1000;
/* callbacks to PE ntdll from the Unix side */ extern void (WINAPI *pDbgUiRemoteBreakin)( void *arg ) DECLSPEC_HIDDEN; +extern void (WINAPI *pKiRaiseUserExceptionDispatcher)(void) DECLSPEC_HIDDEN; extern NTSTATUS (WINAPI *pKiUserExceptionDispatcher)(EXCEPTION_RECORD*,CONTEXT*) DECLSPEC_HIDDEN; extern void (WINAPI *pLdrInitializeThunk)(CONTEXT*,void**,ULONG_PTR,ULONG_PTR) DECLSPEC_HIDDEN; extern void (WINAPI *pRtlUserThreadStart)( PRTL_THREAD_START_ROUTINE entry, void *arg ) DECLSPEC_HIDDEN;