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