[PATCH] kernel32: Implement RaiseFailFastException
André Hentschel
nerv at dawncrow.de
Sun Dec 9 10:30:00 CST 2018
Signed-off-by: André Hentschel <nerv at dawncrow.de>
---
dlls/kernel32/except.c | 35 +++++++++++++++++++++++++++++++++++
dlls/kernel32/kernel32.spec | 2 +-
include/ntstatus.h | 1 +
3 files changed, 37 insertions(+), 1 deletion(-)
diff --git a/dlls/kernel32/except.c b/dlls/kernel32/except.c
index c4f7fafabb6..ba195d92835 100644
--- a/dlls/kernel32/except.c
+++ b/dlls/kernel32/except.c
@@ -413,6 +413,41 @@ static inline BOOL check_resource_write( void *addr )
}
+/*******************************************************************
+ * UnhandledExceptionFilter (KERNEL32.@)
+ */
+void WINAPI RaiseFailFastException(EXCEPTION_RECORD *record, CONTEXT *context, DWORD flags)
+{
+ EXCEPTION_RECORD rec;
+ CONTEXT ctx;
+
+ if (!context)
+ {
+ ctx.ContextFlags = CONTEXT_FULL;
+ NtGetContextThread(GetCurrentThread(), &ctx);
+ context = &ctx;
+ }
+
+ if (!record)
+ {
+ rec.ExceptionCode = STATUS_FAIL_FAST_EXCEPTION;
+ rec.ExceptionFlags = 0;
+ rec.ExceptionRecord = NULL;
+ rec.ExceptionAddress = RaiseFailFastException;
+ rec.NumberParameters = 0;
+ record = &rec;
+ }
+
+ if (!NtCurrentTeb()->Peb->BeingDebugged)
+ {
+ EXCEPTION_POINTERS epointers;
+
+ epointers.ExceptionRecord = record;
+ epointers.ContextRecord = context;
+ start_debugger_atomic(&epointers);
+ }
+}
+
/*******************************************************************
* UnhandledExceptionFilter (KERNEL32.@)
*/
diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec
index ae7bc886c51..31be1f59785 100644
--- a/dlls/kernel32/kernel32.spec
+++ b/dlls/kernel32/kernel32.spec
@@ -1182,7 +1182,7 @@
@ stdcall QueueUserAPC(ptr long long)
@ stdcall QueueUserWorkItem(ptr ptr long)
@ stdcall RaiseException(long long long ptr)
-# @ stub RaiseFailFastException
+@ stdcall RaiseFailFastException(ptr ptr long)
@ stdcall ReadConsoleA(long ptr long ptr ptr)
@ stdcall ReadConsoleInputA(long ptr long ptr)
@ stub ReadConsoleInputExA
diff --git a/include/ntstatus.h b/include/ntstatus.h
index 735b6c2c41c..d2f08af3283 100644
--- a/include/ntstatus.h
+++ b/include/ntstatus.h
@@ -939,6 +939,7 @@
#define STATUS_INVALID_TASK_INDEX ((NTSTATUS) 0xC0000501)
#define STATUS_THREAD_ALREADY_IN_TASK ((NTSTATUS) 0xC0000502)
#define STATUS_CALLBACK_BYPASS ((NTSTATUS) 0xC0000503)
+#define STATUS_FAIL_FAST_EXCEPTION ((NTSTATUS) 0xC0000602)
#define STATUS_PORT_CLOSED ((NTSTATUS) 0xC0000700)
#define STATUS_MESSAGE_LOST ((NTSTATUS) 0xC0000701)
#define STATUS_INVALID_MESSAGE ((NTSTATUS) 0xC0000702)
--
2.17.1
More information about the wine-devel
mailing list