mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-14 10:17:17 +00:00
ntdll: Implement RtlSetUnhandledExceptionFilter().
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
da60ea1c33
commit
03e05c1f57
|
@ -1364,6 +1364,7 @@ void CDECL __wine_kernel_init(void)
|
|||
setbuf(stderr,NULL);
|
||||
kernel32_handle = GetModuleHandleW(kernel32W);
|
||||
IsWow64Process( GetCurrentProcess(), &is_wow64 );
|
||||
RtlSetUnhandledExceptionFilter( UnhandledExceptionFilter );
|
||||
|
||||
LOCALE_Init();
|
||||
|
||||
|
|
|
@ -59,6 +59,8 @@ static RTL_CRITICAL_SECTION_DEBUG critsect_debug =
|
|||
};
|
||||
static RTL_CRITICAL_SECTION vectored_handlers_section = { &critsect_debug, -1, 0, 0, 0, 0 };
|
||||
|
||||
static PRTL_EXCEPTION_FILTER unhandled_exception_filter;
|
||||
|
||||
|
||||
static VECTORED_HANDLER *add_vectored_handler( struct list *handler_list, ULONG first,
|
||||
PVECTORED_EXCEPTION_HANDLER func )
|
||||
|
@ -306,6 +308,15 @@ ULONG WINAPI RtlRemoveVectoredExceptionHandler( PVOID handler )
|
|||
}
|
||||
|
||||
|
||||
/*******************************************************************
|
||||
* RtlSetUnhandledExceptionFilter (NTDLL.@)
|
||||
*/
|
||||
void WINAPI RtlSetUnhandledExceptionFilter( PRTL_EXCEPTION_FILTER filter )
|
||||
{
|
||||
unhandled_exception_filter = filter;
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************
|
||||
* call_unhandled_exception_filter
|
||||
*/
|
||||
|
|
|
@ -3520,9 +3520,6 @@ void __wine_process_init(void)
|
|||
MESSAGE( "wine: could not load kernel32.dll, status %x\n", status );
|
||||
exit(1);
|
||||
}
|
||||
RtlInitAnsiString( &func_name, "UnhandledExceptionFilter" );
|
||||
LdrGetProcedureAddress( wm->ldr.BaseAddress, &func_name, 0, (void **)&unhandled_exception_filter );
|
||||
|
||||
RtlInitAnsiString( &func_name, "__wine_kernel_init" );
|
||||
if ((status = LdrGetProcedureAddress( wm->ldr.BaseAddress, &func_name,
|
||||
0, (void **)&init_func )) != STATUS_SUCCESS)
|
||||
|
|
|
@ -904,6 +904,7 @@
|
|||
# @ stub RtlSetThreadPoolStartFunc
|
||||
@ stdcall RtlSetTimeZoneInformation(ptr)
|
||||
# @ stub RtlSetTimer
|
||||
@ stdcall RtlSetUnhandledExceptionFilter(ptr)
|
||||
@ stub RtlSetUnicodeCallouts
|
||||
@ stub RtlSetUserFlagsHeap
|
||||
@ stub RtlSetUserValueHeap
|
||||
|
|
|
@ -116,8 +116,6 @@ extern void RELAY_SetupDLL( HMODULE hmod ) DECLSPEC_HIDDEN;
|
|||
extern void SNOOP_SetupDLL( HMODULE hmod ) DECLSPEC_HIDDEN;
|
||||
extern const WCHAR system_dir[] DECLSPEC_HIDDEN;
|
||||
|
||||
typedef LONG (WINAPI *PUNHANDLED_EXCEPTION_FILTER)(PEXCEPTION_POINTERS);
|
||||
extern PUNHANDLED_EXCEPTION_FILTER unhandled_exception_filter DECLSPEC_HIDDEN;
|
||||
extern void (WINAPI *kernel32_start_process)(LPTHREAD_START_ROUTINE,void*) DECLSPEC_HIDDEN;
|
||||
|
||||
/* redefine these to make sure we don't reference kernel symbols */
|
||||
|
|
|
@ -55,7 +55,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(thread);
|
|||
struct _KUSER_SHARED_DATA *user_shared_data = NULL;
|
||||
static const WCHAR default_windirW[] = {'C',':','\\','w','i','n','d','o','w','s',0};
|
||||
|
||||
PUNHANDLED_EXCEPTION_FILTER unhandled_exception_filter = NULL;
|
||||
void (WINAPI *kernel32_start_process)(LPTHREAD_START_ROUTINE,void*) = NULL;
|
||||
|
||||
/* info passed to a starting thread */
|
||||
|
|
|
@ -2279,6 +2279,8 @@ typedef struct _SYSTEM_MODULE_INFORMATION
|
|||
#define THREAD_CREATE_FLAGS_ACCESS_CHECK_IN_TARGET 0x00000020
|
||||
#define THREAD_CREATE_FLAGS_INITIAL_THREAD 0x00000080
|
||||
|
||||
typedef LONG (CALLBACK *PRTL_EXCEPTION_FILTER)(PEXCEPTION_POINTERS);
|
||||
|
||||
/***********************************************************************
|
||||
* Function declarations
|
||||
*/
|
||||
|
@ -2813,6 +2815,7 @@ NTSYSAPI void WINAPI RtlSetLastWin32ErrorAndNtStatusFromNtStatus(NTSTATUS);
|
|||
NTSYSAPI NTSTATUS WINAPI RtlSetSaclSecurityDescriptor(PSECURITY_DESCRIPTOR,BOOLEAN,PACL,BOOLEAN);
|
||||
NTSYSAPI NTSTATUS WINAPI RtlSetThreadErrorMode(DWORD,LPDWORD);
|
||||
NTSYSAPI NTSTATUS WINAPI RtlSetTimeZoneInformation(const RTL_TIME_ZONE_INFORMATION*);
|
||||
NTSYSAPI void WINAPI RtlSetUnhandledExceptionFilter(PRTL_EXCEPTION_FILTER);
|
||||
NTSYSAPI SIZE_T WINAPI RtlSizeHeap(HANDLE,ULONG,const void*);
|
||||
NTSYSAPI NTSTATUS WINAPI RtlSleepConditionVariableCS(RTL_CONDITION_VARIABLE*,RTL_CRITICAL_SECTION*,const LARGE_INTEGER*);
|
||||
NTSYSAPI NTSTATUS WINAPI RtlSleepConditionVariableSRW(RTL_CONDITION_VARIABLE*,RTL_SRWLOCK*,const LARGE_INTEGER*,ULONG);
|
||||
|
|
Loading…
Reference in a new issue