New set of macros for server calls; makes requests without variable
part somewhat faster.

diff --git a/dlls/kernel/comm.c b/dlls/kernel/comm.c
index 1ea285b..3c6fd9d 100644
--- a/dlls/kernel/comm.c
+++ b/dlls/kernel/comm.c
@@ -2072,11 +2072,10 @@
 
     TRACE("handle %d, mask %p\n", handle, evtmask);
 
-    SERVER_START_REQ
+    SERVER_START_REQ( get_serial_info )
     {
-        struct get_serial_info_request *req = server_alloc_req( sizeof(*req), 0 );
         req->handle = handle;
-        if ((ret = !server_call( REQ_GET_SERIAL_INFO )))
+        if ((ret = !SERVER_CALL_ERR()))
         {
             if (evtmask) *evtmask = req->eventmask;
         }
@@ -2104,13 +2103,12 @@
 
     TRACE("handle %d, mask %lx\n", handle, evtmask);
 
-    SERVER_START_REQ
+    SERVER_START_REQ( set_serial_info )
     {
-        struct set_serial_info_request *req = server_alloc_req( sizeof(*req), 0 );
         req->handle    = handle;
         req->flags     = SERIALINFO_SET_MASK;
         req->eventmask = evtmask;
-        ret = !server_call( REQ_SET_SERIAL_INFO );
+        ret = !SERVER_CALL_ERR();
     }
     SERVER_END_REQ;
     return ret;
@@ -2677,11 +2675,10 @@
         return FALSE;
     }
 
-    SERVER_START_REQ
+    SERVER_START_REQ( get_serial_info )
     {
-        struct get_serial_info_request *req = server_alloc_req( sizeof(*req), 0 );
         req->handle = hComm;
-        if ((ret = !server_call( REQ_GET_SERIAL_INFO )))
+        if ((ret = !SERVER_CALL_ERR()))
         {
             lptimeouts->ReadIntervalTimeout         = req->readinterval;
             lptimeouts->ReadTotalTimeoutMultiplier  = req->readmult;
@@ -2726,9 +2723,8 @@
         return FALSE;
     }
 
-    SERVER_START_REQ
+    SERVER_START_REQ( set_serial_info )
     {
-        struct set_serial_info_request *req = server_alloc_req( sizeof(*req), 0 );
         req->handle       = hComm;
         req->flags        = SERIALINFO_SET_TIMEOUTS;
         req->readinterval = lptimeouts->ReadIntervalTimeout ;
@@ -2736,7 +2732,7 @@
         req->readconst    = lptimeouts->ReadTotalTimeoutConstant ;
         req->writemult    = lptimeouts->WriteTotalTimeoutMultiplier ;
         req->writeconst   = lptimeouts->WriteTotalTimeoutConstant ;
-        ret = !server_call( REQ_SET_SERIAL_INFO );
+        ret = !SERVER_CALL_ERR();
     }
     SERVER_END_REQ;
     if (!ret) return FALSE;
@@ -2886,10 +2882,8 @@
     lpov->OffsetHigh = 0;
 
     /* start an ASYNCHRONOUS WaitCommEvent */
-    SERVER_START_REQ
+    SERVER_START_REQ( create_async )
     {
-        struct create_async_request *req = server_alloc_req( sizeof(*req), 0 );
-
         req->file_handle = hFile;
         req->overlapped  = lpov;
         req->buffer = lpdwEvents;
@@ -2897,7 +2891,7 @@
         req->func = COMM_WaitCommEventService;
         req->type = ASYNC_TYPE_WAIT;
 
-        ret=server_call( REQ_CREATE_ASYNC );
+        ret=SERVER_CALL_ERR();
 
         lpov->InternalHigh = req->ov_handle;
     }
diff --git a/dlls/kernel/debugger.c b/dlls/kernel/debugger.c
index cfcb1c4..3747156 100644
--- a/dlls/kernel/debugger.c
+++ b/dlls/kernel/debugger.c
@@ -36,13 +36,11 @@
     for (;;)
     {
         HANDLE wait = 0;
-        SERVER_START_REQ
+        debug_event_t *data;
+        SERVER_START_VAR_REQ( wait_debug_event, sizeof(*data) )
         {
-            debug_event_t *data;
-            struct wait_debug_event_request *req = server_alloc_req( sizeof(*req), sizeof(*data) );
-
             req->get_handle = (timeout != 0);
-            if (!(ret = !server_call( REQ_WAIT_DEBUG_EVENT ))) goto done;
+            if (!(ret = !SERVER_CALL_ERR())) goto done;
 
             if (!server_data_size(req))  /* timeout */
             {
@@ -108,7 +106,7 @@
             }
         done:
         }
-        SERVER_END_REQ;
+        SERVER_END_VAR_REQ;
         if (ret) return TRUE;
         if (!wait) break;
         res = WaitForSingleObject( wait, timeout );
@@ -137,13 +135,12 @@
     DWORD status) /* [in] The rule to apply to unhandled exeptions. */
 {
     BOOL ret;
-    SERVER_START_REQ
+    SERVER_START_REQ( continue_debug_event )
     {
-        struct continue_debug_event_request *req = server_alloc_req( sizeof(*req), 0 );
         req->pid    = (void *)pid;
         req->tid    = (void *)tid;
         req->status = status;
-        ret = !server_call( REQ_CONTINUE_DEBUG_EVENT );
+        ret = !SERVER_CALL_ERR();
     }
     SERVER_END_REQ;
     return ret;
@@ -163,11 +160,10 @@
     DWORD pid) /* [in] The process to be debugged. */
 {
     BOOL ret;
-    SERVER_START_REQ
+    SERVER_START_REQ( debug_process )
     {
-        struct debug_process_request *req = server_alloc_req( sizeof(*req), 0 );
         req->pid = (void *)pid;
-        ret = !server_call( REQ_DEBUG_PROCESS );
+        ret = !SERVER_CALL_ERR();
     }
     SERVER_END_REQ;
     return ret;
@@ -184,13 +180,12 @@
 void WINAPI OutputDebugStringA(
     LPCSTR str) /* [in] The message to be logged and given to the debugger. */
 {
-    SERVER_START_REQ
+    SERVER_START_REQ( output_debug_string )
     {
-        struct output_debug_string_request *req = server_alloc_req( sizeof(*req), 0 );
         req->string  = (void *)str;
         req->unicode = 0;
         req->length  = strlen(str) + 1;
-        server_call_noerr( REQ_OUTPUT_DEBUG_STRING );
+        SERVER_CALL();
     }
     SERVER_END_REQ;
     WARN("%s\n", str);
@@ -206,13 +201,12 @@
 void WINAPI OutputDebugStringW(
     LPCWSTR str) /* [in] The message to be logged and given to the debugger. */
 {
-    SERVER_START_REQ
+    SERVER_START_REQ( output_debug_string )
     {
-        struct output_debug_string_request *req = server_alloc_req( sizeof(*req), 0 );
         req->string  = (void *)str;
         req->unicode = 1;
         req->length  = (lstrlenW(str) + 1) * sizeof(WCHAR);
-        server_call_noerr( REQ_OUTPUT_DEBUG_STRING );
+        SERVER_CALL();
     }
     SERVER_END_REQ;
     WARN("%s\n", debugstr_w(str));
@@ -282,11 +276,10 @@
 BOOL WINAPI IsDebuggerPresent(void)
 {
     BOOL ret = FALSE;
-    SERVER_START_REQ
+    SERVER_START_REQ( get_process_info )
     {
-        struct get_process_info_request *req = server_alloc_req( sizeof(*req), 0 );
         req->handle = GetCurrentProcess();
-        if (!server_call( REQ_GET_PROCESS_INFO )) ret = req->debugged;
+        if (!SERVER_CALL_ERR()) ret = req->debugged;
     }
     SERVER_END_REQ;
     return ret;
diff --git a/dlls/kernel/sync.c b/dlls/kernel/sync.c
index 1c5ff98..1c924d3 100644
--- a/dlls/kernel/sync.c
+++ b/dlls/kernel/sync.c
@@ -31,19 +31,17 @@
         SetLastError( ERROR_FILENAME_EXCED_RANGE );
         return 0;
     }
-    SERVER_START_REQ
+    SERVER_START_VAR_REQ( create_event, len * sizeof(WCHAR) )
     {
-        struct create_event_request *req = server_alloc_req( sizeof(*req), len * sizeof(WCHAR) );
-
         req->manual_reset = manual_reset;
         req->initial_state = initial_state;
         req->inherit = (sa && (sa->nLength>=sizeof(*sa)) && sa->bInheritHandle);
         if (len) MultiByteToWideChar( CP_ACP, 0, name, strlen(name), server_data_ptr(req), len );
         SetLastError(0);
-        server_call( REQ_CREATE_EVENT );
+        SERVER_CALL_ERR();
         ret = req->handle;
     }
-    SERVER_END_REQ;
+    SERVER_END_VAR_REQ;
     return ret;
 }
 
@@ -70,19 +68,17 @@
         SetLastError( ERROR_INVALID_PARAMETER);
         return 0;
     }
-    SERVER_START_REQ
+    SERVER_START_VAR_REQ( create_event, len * sizeof(WCHAR) )
     {
-        struct create_event_request *req = server_alloc_req( sizeof(*req), len * sizeof(WCHAR) );
-
         req->manual_reset = manual_reset;
         req->initial_state = initial_state;
         req->inherit = (sa && (sa->nLength>=sizeof(*sa)) && sa->bInheritHandle);
         memcpy( server_data_ptr(req), name, len * sizeof(WCHAR) );
         SetLastError(0);
-        server_call( REQ_CREATE_EVENT );
+        SERVER_CALL_ERR();
         ret = req->handle;
     }
-    SERVER_END_REQ;
+    SERVER_END_VAR_REQ;
     return ret;
 }
 
@@ -108,17 +104,15 @@
         SetLastError( ERROR_FILENAME_EXCED_RANGE );
         return 0;
     }
-    SERVER_START_REQ
+    SERVER_START_VAR_REQ( open_event, len * sizeof(WCHAR) )
     {
-        struct open_event_request *req = server_alloc_req( sizeof(*req), len * sizeof(WCHAR) );
-
         req->access  = access;
         req->inherit = inherit;
         if (len) MultiByteToWideChar( CP_ACP, 0, name, strlen(name), server_data_ptr(req), len );
-        server_call( REQ_OPEN_EVENT );
+        SERVER_CALL_ERR();
         ret = req->handle;
     }
-    SERVER_END_REQ;
+    SERVER_END_VAR_REQ;
     return ret;
 }
 
@@ -135,17 +129,15 @@
         SetLastError( ERROR_FILENAME_EXCED_RANGE );
         return 0;
     }
-    SERVER_START_REQ
+    SERVER_START_VAR_REQ( open_event, len * sizeof(WCHAR) )
     {
-        struct open_event_request *req = server_alloc_req( sizeof(*req), len * sizeof(WCHAR) );
-
         req->access  = access;
         req->inherit = inherit;
         memcpy( server_data_ptr(req), name, len * sizeof(WCHAR) );
-        server_call( REQ_OPEN_EVENT );
+        SERVER_CALL_ERR();
         ret = req->handle;
     }
-    SERVER_END_REQ;
+    SERVER_END_VAR_REQ;
     return ret;
 }
 
@@ -158,12 +150,11 @@
 static BOOL EVENT_Operation( HANDLE handle, enum event_op op )
 {
     BOOL ret;
-    SERVER_START_REQ
+    SERVER_START_REQ( event_op )
     {
-        struct event_op_request *req = server_alloc_req( sizeof(*req), 0 );
         req->handle = handle;
         req->op     = op;
-        ret = !server_call( REQ_EVENT_OP );
+        ret = !SERVER_CALL_ERR();
     }
     SERVER_END_REQ;
     return ret;
@@ -257,18 +248,16 @@
         SetLastError( ERROR_FILENAME_EXCED_RANGE );
         return 0;
     }
-    SERVER_START_REQ
+    SERVER_START_VAR_REQ( create_mutex, len * sizeof(WCHAR) )
     {
-        struct create_mutex_request *req = server_alloc_req( sizeof(*req), len * sizeof(WCHAR) );
-
         req->owned   = owner;
         req->inherit = (sa && (sa->nLength>=sizeof(*sa)) && sa->bInheritHandle);
         if (len) MultiByteToWideChar( CP_ACP, 0, name, strlen(name), server_data_ptr(req), len );
         SetLastError(0);
-        server_call( REQ_CREATE_MUTEX );
+        SERVER_CALL_ERR();
         ret = req->handle;
     }
-    SERVER_END_REQ;
+    SERVER_END_VAR_REQ;
     return ret;
 }
 
@@ -285,18 +274,16 @@
         SetLastError( ERROR_FILENAME_EXCED_RANGE );
         return 0;
     }
-    SERVER_START_REQ
+    SERVER_START_VAR_REQ( create_mutex, len * sizeof(WCHAR) )
     {
-        struct create_mutex_request *req = server_alloc_req( sizeof(*req), len * sizeof(WCHAR) );
-
         req->owned   = owner;
         req->inherit = (sa && (sa->nLength>=sizeof(*sa)) && sa->bInheritHandle);
         memcpy( server_data_ptr(req), name, len * sizeof(WCHAR) );
         SetLastError(0);
-        server_call( REQ_CREATE_MUTEX );
+        SERVER_CALL_ERR();
         ret = req->handle;
     }
-    SERVER_END_REQ;
+    SERVER_END_VAR_REQ;
     return ret;
 }
 
@@ -318,17 +305,15 @@
         SetLastError( ERROR_FILENAME_EXCED_RANGE );
         return 0;
     }
-    SERVER_START_REQ
+    SERVER_START_VAR_REQ( open_mutex, len * sizeof(WCHAR) )
     {
-        struct open_mutex_request *req = server_alloc_req( sizeof(*req), len * sizeof(WCHAR) );
-
         req->access  = access;
         req->inherit = inherit;
         if (len) MultiByteToWideChar( CP_ACP, 0, name, strlen(name), server_data_ptr(req), len );
-        server_call( REQ_OPEN_MUTEX );
+        SERVER_CALL_ERR();
         ret = req->handle;
     }
-    SERVER_END_REQ;
+    SERVER_END_VAR_REQ;
     return ret;
 }
 
@@ -345,17 +330,15 @@
         SetLastError( ERROR_FILENAME_EXCED_RANGE );
         return 0;
     }
-    SERVER_START_REQ
+    SERVER_START_VAR_REQ( open_mutex, len * sizeof(WCHAR) )
     {
-        struct open_mutex_request *req = server_alloc_req( sizeof(*req), len * sizeof(WCHAR) );
-
         req->access  = access;
         req->inherit = inherit;
         memcpy( server_data_ptr(req), name, len * sizeof(WCHAR) );
-        server_call( REQ_OPEN_MUTEX );
+        SERVER_CALL_ERR();
         ret = req->handle;
     }
-    SERVER_END_REQ;
+    SERVER_END_VAR_REQ;
     return ret;
 }
 
@@ -366,11 +349,10 @@
 BOOL WINAPI ReleaseMutex( HANDLE handle )
 {
     BOOL ret;
-    SERVER_START_REQ
+    SERVER_START_REQ( release_mutex )
     {
-        struct release_mutex_request *req = server_alloc_req( sizeof(*req), 0 );
         req->handle = handle;
-        ret = !server_call( REQ_RELEASE_MUTEX );
+        ret = !SERVER_CALL_ERR();
     }
     SERVER_END_REQ;
     return ret;
@@ -403,20 +385,17 @@
         return 0;
     }
 
-    SERVER_START_REQ
+    SERVER_START_VAR_REQ( create_semaphore, len * sizeof(WCHAR) )
     {
-        struct create_semaphore_request *req = server_alloc_req( sizeof(*req),
-                                                                 len * sizeof(WCHAR) );
-
         req->initial = (unsigned int)initial;
         req->max     = (unsigned int)max;
         req->inherit = (sa && (sa->nLength>=sizeof(*sa)) && sa->bInheritHandle);
         if (len) MultiByteToWideChar( CP_ACP, 0, name, strlen(name), server_data_ptr(req), len );
         SetLastError(0);
-        server_call( REQ_CREATE_SEMAPHORE );
+        SERVER_CALL_ERR();
         ret = req->handle;
     }
-    SERVER_END_REQ;
+    SERVER_END_VAR_REQ;
     return ret;
 }
 
@@ -443,20 +422,17 @@
         return 0;
     }
 
-    SERVER_START_REQ
+    SERVER_START_VAR_REQ( create_semaphore, len * sizeof(WCHAR) )
     {
-        struct create_semaphore_request *req = server_alloc_req( sizeof(*req),
-                                                                 len * sizeof(WCHAR) );
-
         req->initial = (unsigned int)initial;
         req->max     = (unsigned int)max;
         req->inherit = (sa && (sa->nLength>=sizeof(*sa)) && sa->bInheritHandle);
         memcpy( server_data_ptr(req), name, len * sizeof(WCHAR) );
         SetLastError(0);
-        server_call( REQ_CREATE_SEMAPHORE );
+        SERVER_CALL_ERR();
         ret = req->handle;
     }
-    SERVER_END_REQ;
+    SERVER_END_VAR_REQ;
     return ret;
 }
 
@@ -473,17 +449,15 @@
         SetLastError( ERROR_FILENAME_EXCED_RANGE );
         return 0;
     }
-    SERVER_START_REQ
+    SERVER_START_VAR_REQ( open_semaphore, len * sizeof(WCHAR) )
     {
-        struct open_semaphore_request *req = server_alloc_req( sizeof(*req),
-                                                               len * sizeof(WCHAR) );
         req->access  = access;
         req->inherit = inherit;
         if (len) MultiByteToWideChar( CP_ACP, 0, name, strlen(name), server_data_ptr(req), len );
-        server_call( REQ_OPEN_SEMAPHORE );
+        SERVER_CALL_ERR();
         ret = req->handle;
     }
-    SERVER_END_REQ;
+    SERVER_END_VAR_REQ;
     return ret;
 }
 
@@ -500,16 +474,15 @@
         SetLastError( ERROR_FILENAME_EXCED_RANGE );
         return 0;
     }
-    SERVER_START_REQ
+    SERVER_START_VAR_REQ( open_semaphore, len * sizeof(WCHAR) )
     {
-        struct open_semaphore_request *req = server_alloc_req( sizeof(*req), len * sizeof(WCHAR) );
         req->access  = access;
         req->inherit = inherit;
         memcpy( server_data_ptr(req), name, len * sizeof(WCHAR) );
-        server_call( REQ_OPEN_SEMAPHORE );
+        SERVER_CALL_ERR();
         ret = req->handle;
     }
-    SERVER_END_REQ;
+    SERVER_END_VAR_REQ;
     return ret;
 }
 
diff --git a/dlls/kernel/toolhelp.c b/dlls/kernel/toolhelp.c
index a0110c4..2702553 100644
--- a/dlls/kernel/toolhelp.c
+++ b/dlls/kernel/toolhelp.c
@@ -202,13 +202,12 @@
     }
 
     /* Now do the snapshot */
-    SERVER_START_REQ
+    SERVER_START_REQ( create_snapshot )
     {
-        struct create_snapshot_request *req = server_alloc_req( sizeof(*req), 0 );
         req->flags   = flags & ~TH32CS_INHERIT;
         req->inherit = (flags & TH32CS_INHERIT) != 0;
         req->pid     = (void *)process;
-        server_call( REQ_CREATE_SNAPSHOT );
+        SERVER_CALL_ERR();
         ret = req->handle;
     }
     SERVER_END_REQ;
@@ -232,12 +231,11 @@
         ERR("Result buffer too small (req: %d, was: %ld)\n", sizeof(THREADENTRY32), lpte->dwSize);
         return FALSE;
     }
-    SERVER_START_REQ
+    SERVER_START_REQ( next_thread )
     {
-        struct next_thread_request *req = server_alloc_req( sizeof(*req), 0 );
         req->handle = handle;
         req->reset = first;
-        if ((ret = !server_call( REQ_NEXT_THREAD )))
+        if ((ret = !SERVER_CALL_ERR()))
         {
             lpte->cntUsage           = req->count;
             lpte->th32ThreadID       = (DWORD)req->tid;
@@ -286,12 +284,11 @@
         ERR("Result buffer too small (req: %d, was: %ld)\n", sizeof(PROCESSENTRY32), lppe->dwSize);
         return FALSE;
     }
-    SERVER_START_REQ
+    SERVER_START_REQ( next_process )
     {
-        struct next_process_request *req = server_alloc_req( sizeof(*req), 0 );
         req->handle = handle;
         req->reset = first;
-        if ((ret = !server_call( REQ_NEXT_PROCESS )))
+        if ((ret = !SERVER_CALL_ERR()))
         {
             lppe->cntUsage            = req->count;
             lppe->th32ProcessID       = (DWORD)req->pid;
@@ -345,12 +342,11 @@
         ERR("Result buffer too small (req: %d, was: %ld)\n", sizeof(MODULEENTRY32), lpme->dwSize);
         return FALSE;
     }
-    SERVER_START_REQ
+    SERVER_START_REQ( next_module )
     {
-        struct next_module_request *req = server_alloc_req( sizeof(*req), 0 );
         req->handle = handle;
         req->reset = first;
-        if ((ret = !server_call( REQ_NEXT_MODULE )))
+        if ((ret = !SERVER_CALL_ERR()))
         {
             lpme->th32ModuleID   = 0;  /* toolhelp internal id, never used */
             lpme->th32ProcessID  = (DWORD)req->pid;