Alexandre Julliard : ntdll: Implement KiRaiseUserExceptionDispatcher().
Alexandre Julliard
julliard at winehq.org
Tue Jul 21 15:40:21 CDT 2020
Module: wine
Branch: master
Commit: 5eefbc6db98985a5b63bec78fde7eef2f7fa02f2
URL: https://source.winehq.org/git/wine.git/?a=commit;h=5eefbc6db98985a5b63bec78fde7eef2f7fa02f2
Author: Alexandre Julliard <julliard at winehq.org>
Date: Tue Jul 21 15:50:03 2020 +0200
ntdll: Implement KiRaiseUserExceptionDispatcher().
Signed-off-by: Alexandre Julliard <julliard at 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;
More information about the wine-cvs
mailing list