server: Replace EXCEPTION_RECORD by an explicit definition in debug events.
diff --git a/server/debugger.c b/server/debugger.c
index 3201d88..9399cb3 100644
--- a/server/debugger.c
+++ b/server/debugger.c
@@ -116,6 +116,7 @@
 {
     const debug_event_t *data = arg;
     event->data.exception = data->exception;
+    event->data.exception.nb_params = min( event->data.exception.nb_params, EXCEPTION_MAXIMUM_PARAMETERS );
     return 1;
 }
 
@@ -375,8 +376,7 @@
 }
 
 /* alloc a debug event for a debugger */
-static struct debug_event *alloc_debug_event( struct thread *thread, int code,
-                                              const void *arg, const CONTEXT *context )
+static struct debug_event *alloc_debug_event( struct thread *thread, int code, const void *arg )
 {
     struct thread *debugger = thread->process->debugger;
     struct debug_event *event;
@@ -399,11 +399,6 @@
         return NULL;
     }
     event->data.code = code;
-    if (context)
-    {
-        memcpy( &event->context, context, sizeof(event->context) );
-        thread->context = &event->context;
-    }
     return event;
 }
 
@@ -412,7 +407,7 @@
 {
     if (thread->process->debugger)
     {
-        struct debug_event *event = alloc_debug_event( thread, code, arg, NULL );
+        struct debug_event *event = alloc_debug_event( thread, code, arg );
         if (event)
         {
             link_event( event );
@@ -638,18 +633,32 @@
     {
         debug_event_t data;
         struct debug_event *event;
-        const CONTEXT *context = get_req_data();
-        const EXCEPTION_RECORD *rec = (const EXCEPTION_RECORD *)(context + 1);
 
-        if (get_req_data_size() < sizeof(*rec) + sizeof(*context))
+        if ((req->len % sizeof(client_ptr_t)) != 0 ||
+            req->len > get_req_data_size() ||
+            req->len > EXCEPTION_MAXIMUM_PARAMETERS * sizeof(client_ptr_t))
         {
             set_error( STATUS_INVALID_PARAMETER );
             return;
         }
-        data.exception.record = *rec;
-        data.exception.first  = req->first;
-        if ((event = alloc_debug_event( current, EXCEPTION_DEBUG_EVENT, &data, context )))
+        memset( &data, 0, sizeof(data) );
+        data.exception.first     = req->first;
+        data.exception.exc_code  = req->code;
+        data.exception.flags     = req->flags;
+        data.exception.record    = req->record;
+        data.exception.address   = req->address;
+        data.exception.nb_params = req->len / sizeof(client_ptr_t);
+        memcpy( data.exception.params, get_req_data(), req->len );
+
+        if ((event = alloc_debug_event( current, EXCEPTION_DEBUG_EVENT, &data )))
         {
+            const CONTEXT *context = (const CONTEXT *)((char *)get_req_data() + req->len);
+            data_size_t size = get_req_data_size() - req->len;
+
+            memset( &event->context, 0, sizeof(event->context) );
+            memcpy( &event->context, context, size );
+            current->context = &event->context;
+
             if ((reply->handle = alloc_handle( current->process, event, SYNCHRONIZE, 0 )))
             {
                 link_event( event );