From 6fc5560247a83763614464aa2abf28d35062e677 Mon Sep 17 00:00:00 2001 From: Emanuele Aliberti Date: Fri, 3 Aug 2001 17:39:09 +0000 Subject: [PATCH] I implemented KERNEL32.RaiseException(). svn path=/trunk/; revision=2145 --- reactos/lib/kernel32/except/except.c | 46 ++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 3 deletions(-) diff --git a/reactos/lib/kernel32/except/except.c b/reactos/lib/kernel32/except/except.c index 1c6b2c80f5f..e3530b09b4d 100644 --- a/reactos/lib/kernel32/except/except.c +++ b/reactos/lib/kernel32/except/except.c @@ -1,4 +1,4 @@ -/* $Id: except.c,v 1.6 2001/03/31 01:17:29 dwelch Exp $ +/* $Id: except.c,v 1.7 2001/08/03 17:39:09 ea Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS system libraries @@ -104,10 +104,50 @@ RaiseException ( DWORD dwExceptionCode, DWORD dwExceptionFlags, DWORD nNumberOfArguments, - CONST DWORD * lpArguments + CONST DWORD * lpArguments OPTIONAL ) { - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); + EXCEPTION_RECORD ExceptionRecord; + + /* Do NOT normalize dwExceptionCode: it will be done in + * NTDLL.RtlRaiseException(). + */ + ExceptionRecord.ExceptionCode = dwExceptionCode; + ExceptionRecord.ExceptionRecord = NULL; + ExceptionRecord.ExceptionAddress = (PVOID) RaiseException; + /* + * Normalize dwExceptionFlags. + */ + ExceptionRecord.ExceptionFlags = (dwExceptionFlags & EXCEPTION_NONCONTINUABLE); + /* + * Normalize nNumberOfArguments. + */ + if (EXCEPTION_MAXIMUM_PARAMETERS < nNumberOfArguments) + { + nNumberOfArguments = EXCEPTION_MAXIMUM_PARAMETERS; + } + /* + * If the exception has no argument, + * or it is a non-continuable exception, + * ignore nNumberOfArguments and lpArguments. + */ + if ((NULL == lpArguments) || ExceptionRecord.ExceptionFlags) + { + ExceptionRecord.NumberParameters = 0; + } + else + { + ExceptionRecord.NumberParameters = nNumberOfArguments; + for ( nNumberOfArguments = 0; + (nNumberOfArguments < ExceptionRecord.NumberParameters); + nNumberOfArguments ++ + ) + { + ExceptionRecord.ExceptionInformation [nNumberOfArguments] + = *lpArguments ++; + } + } + RtlRaiseException (& ExceptionRecord); } /* EOF */ -- 2.17.1