server: Change the timeout handling to use NT-style 64-bit timeouts everywhere.
[wine] / server / trace.c
1 /*
2  * Server request tracing
3  *
4  * Copyright (C) 1999 Alexandre Julliard
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19  */
20
21 #include "config.h"
22 #include "wine/port.h"
23
24 #include <ctype.h>
25 #include <stdarg.h>
26 #include <stdio.h>
27 #include <sys/types.h>
28
29 #ifdef HAVE_SYS_UIO_H
30 #include <sys/uio.h>
31 #endif
32
33 #include "ntstatus.h"
34 #define WIN32_NO_STATUS
35 #include "windef.h"
36 #include "winbase.h"
37 #include "wincon.h"
38 #include "winternl.h"
39 #include "file.h"
40 #include "request.h"
41 #include "unicode.h"
42
43 static const void *cur_data;
44 static data_size_t cur_size;
45
46 static const char *get_status_name( unsigned int status );
47
48 /* utility functions */
49
50 static inline void remove_data( data_size_t size )
51 {
52     cur_data = (const char *)cur_data + size;
53     cur_size -= size;
54 }
55
56 static void dump_uints( const int *ptr, int len )
57 {
58     fputc( '{', stderr );
59     while (len > 0)
60     {
61         fprintf( stderr, "%08x", *ptr++ );
62         if (--len) fputc( ',', stderr );
63     }
64     fputc( '}', stderr );
65 }
66
67 static void dump_timeout( const timeout_t *time )
68 {
69     fprintf( stderr, get_timeout_str(*time) );
70 }
71
72 static void dump_rectangle( const rectangle_t *rect )
73 {
74     fprintf( stderr, "{%d,%d;%d,%d}",
75              rect->left, rect->top, rect->right, rect->bottom );
76 }
77
78 static void dump_char_info( const char_info_t *info )
79 {
80     fprintf( stderr, "{'" );
81     dump_strW( &info->ch, 1, stderr, "\'\'" );
82     fprintf( stderr, "',%04x}", info->attr );
83 }
84
85 static void dump_apc_call( const apc_call_t *call )
86 {
87     fputc( '{', stderr );
88     switch(call->type)
89     {
90     case APC_NONE:
91         fprintf( stderr, "APC_NONE" );
92         break;
93     case APC_USER:
94         fprintf( stderr, "APC_USER,args={%lx,%lx,%lx}",
95                  call->user.args[0], call->user.args[1], call->user.args[2] );
96         break;
97     case APC_TIMER:
98         fprintf( stderr, "APC_TIMER,time=" );
99         dump_timeout( &call->timer.time );
100         fprintf( stderr, ",arg=%p", call->timer.arg );
101         break;
102     case APC_ASYNC_IO:
103         fprintf( stderr, "APC_ASYNC_IO,func=%p,user=%p,sb=%p,status=%s",
104                  call->async_io.func, call->async_io.user, call->async_io.sb,
105                  get_status_name(call->async_io.status) );
106         break;
107     case APC_VIRTUAL_ALLOC:
108         fprintf( stderr, "APC_VIRTUAL_ALLOC,addr=%p,size=%lu,zero_bits=%u,op_type=%x,prot=%x",
109                  call->virtual_alloc.addr, call->virtual_alloc.size,
110                  call->virtual_alloc.zero_bits, call->virtual_alloc.op_type,
111                  call->virtual_alloc.prot );
112         break;
113     case APC_VIRTUAL_FREE:
114         fprintf( stderr, "APC_VIRTUAL_FREE,addr=%p,size=%lu,op_type=%x",
115                  call->virtual_free.addr, call->virtual_free.size,
116                  call->virtual_free.op_type );
117         break;
118     case APC_VIRTUAL_QUERY:
119         fprintf( stderr, "APC_VIRTUAL_QUERY,addr=%p", call->virtual_query.addr );
120         break;
121     case APC_VIRTUAL_PROTECT:
122         fprintf( stderr, "APC_VIRTUAL_PROTECT,addr=%p,size=%lu,prot=%x",
123                  call->virtual_protect.addr, call->virtual_protect.size,
124                  call->virtual_protect.prot );
125         break;
126     case APC_VIRTUAL_FLUSH:
127         fprintf( stderr, "APC_VIRTUAL_FLUSH,addr=%p,size=%lu",
128                  call->virtual_flush.addr, call->virtual_flush.size );
129         break;
130     case APC_VIRTUAL_LOCK:
131         fprintf( stderr, "APC_VIRTUAL_LOCK,addr=%p,size=%lu",
132                  call->virtual_lock.addr, call->virtual_lock.size );
133         break;
134     case APC_VIRTUAL_UNLOCK:
135         fprintf( stderr, "APC_VIRTUAL_UNLOCK,addr=%p,size=%lu",
136                  call->virtual_unlock.addr, call->virtual_unlock.size );
137         break;
138     case APC_MAP_VIEW:
139         fprintf( stderr, "APC_MAP_VIEW,handle=%p,addr=%p,size=%lu,offset=%x%08x,zero_bits=%u,alloc_type=%x,prot=%x",
140                  call->map_view.handle, call->map_view.addr, call->map_view.size,
141                  call->map_view.offset_high, call->map_view.offset_low, call->map_view.zero_bits,
142                  call->map_view.alloc_type, call->map_view.prot );
143         break;
144     case APC_UNMAP_VIEW:
145         fprintf( stderr, "APC_UNMAP_VIEW,addr=%p", call->unmap_view.addr );
146         break;
147     case APC_CREATE_THREAD:
148         fprintf( stderr, "APC_CREATE_THREAD,func=%p,arg=%p,reserve=%lx,commit=%lx,suspend=%u",
149                  call->create_thread.func, call->create_thread.arg,
150                  call->create_thread.reserve, call->create_thread.commit,
151                  call->create_thread.suspend );
152         break;
153     default:
154         fprintf( stderr, "type=%u", call->type );
155         break;
156     }
157     fputc( '}', stderr );
158 }
159
160 static void dump_apc_result( const apc_result_t *result )
161 {
162     fputc( '{', stderr );
163     switch(result->type)
164     {
165     case APC_NONE:
166         break;
167     case APC_ASYNC_IO:
168         fprintf( stderr, "APC_ASYNC_IO,status=%s",
169                  get_status_name( result->async_io.status ) );
170         break;
171     case APC_VIRTUAL_ALLOC:
172         fprintf( stderr, "APC_VIRTUAL_ALLOC,status=%s,addr=%p,size=%lu",
173                  get_status_name( result->virtual_alloc.status ),
174                  result->virtual_alloc.addr, result->virtual_alloc.size );
175         break;
176     case APC_VIRTUAL_FREE:
177         fprintf( stderr, "APC_VIRTUAL_FREE,status=%s,addr=%p,size=%lu",
178                  get_status_name( result->virtual_free.status ),
179                  result->virtual_free.addr, result->virtual_free.size );
180         break;
181     case APC_VIRTUAL_QUERY:
182         fprintf( stderr, "APC_VIRTUAL_QUERY,status=%s,base=%p,alloc_base=%p,size=%lu,state=%x,prot=%x,alloc_prot=%x,alloc_type=%x",
183                  get_status_name( result->virtual_query.status ),
184                  result->virtual_query.base, result->virtual_query.alloc_base,
185                  result->virtual_query.size, result->virtual_query.state,
186                  result->virtual_query.prot, result->virtual_query.alloc_prot,
187                  result->virtual_query.alloc_type );
188         break;
189     case APC_VIRTUAL_PROTECT:
190         fprintf( stderr, "APC_VIRTUAL_PROTECT,status=%s,addr=%p,size=%lu,prot=%x",
191                  get_status_name( result->virtual_protect.status ),
192                  result->virtual_protect.addr, result->virtual_protect.size,
193                  result->virtual_protect.prot );
194         break;
195     case APC_VIRTUAL_FLUSH:
196         fprintf( stderr, "APC_VIRTUAL_FLUSH,status=%s,addr=%p,size=%lu",
197                  get_status_name( result->virtual_flush.status ),
198                  result->virtual_flush.addr, result->virtual_flush.size );
199         break;
200     case APC_VIRTUAL_LOCK:
201         fprintf( stderr, "APC_VIRTUAL_LOCK,status=%s,addr=%p,size=%lu",
202                  get_status_name( result->virtual_lock.status ),
203                  result->virtual_lock.addr, result->virtual_lock.size );
204         break;
205     case APC_VIRTUAL_UNLOCK:
206         fprintf( stderr, "APC_VIRTUAL_UNLOCK,status=%s,addr=%p,size=%lu",
207                  get_status_name( result->virtual_unlock.status ),
208                  result->virtual_unlock.addr, result->virtual_unlock.size );
209         break;
210     case APC_MAP_VIEW:
211         fprintf( stderr, "APC_MAP_VIEW,status=%s,addr=%p,size=%lu",
212                  get_status_name( result->map_view.status ),
213                  result->map_view.addr, result->map_view.size );
214         break;
215     case APC_UNMAP_VIEW:
216         fprintf( stderr, "APC_UNMAP_VIEW,status=%s",
217                  get_status_name( result->unmap_view.status ) );
218         break;
219     case APC_CREATE_THREAD:
220         fprintf( stderr, "APC_CREATE_THREAD,status=%s,tid=%04x,handle=%p",
221                  get_status_name( result->create_thread.status ),
222                  result->create_thread.tid, result->create_thread.handle );
223         break;
224     default:
225         fprintf( stderr, "type=%u", result->type );
226         break;
227     }
228     fputc( '}', stderr );
229 }
230
231 static void dump_async_data( const async_data_t *data )
232 {
233     fprintf( stderr, "{callback=%p,iosb=%p,arg=%p,apc=%p,apc_arg=%p,event=%p}",
234              data->callback, data->iosb, data->arg, data->apc, data->apc_arg, data->event );
235 }
236
237 static void dump_luid( const luid_t *luid )
238 {
239     fprintf( stderr, "%d.%u", luid->high_part, luid->low_part );
240 }
241
242 static void dump_context( const CONTEXT *context )
243 {
244 #ifdef __i386__
245     fprintf( stderr, "{flags=%08x,eax=%08x,ebx=%08x,ecx=%08x,edx=%08x,esi=%08x,edi=%08x,"
246              "ebp=%08x,eip=%08x,esp=%08x,eflags=%08x,cs=%04x,ds=%04x,es=%04x,"
247              "fs=%04x,gs=%04x,dr0=%08x,dr1=%08x,dr2=%08x,dr3=%08x,dr6=%08x,dr7=%08x,",
248              context->ContextFlags, context->Eax, context->Ebx, context->Ecx, context->Edx,
249              context->Esi, context->Edi, context->Ebp, context->Eip, context->Esp, context->EFlags,
250              context->SegCs, context->SegDs, context->SegEs, context->SegFs, context->SegGs,
251              context->Dr0, context->Dr1, context->Dr2, context->Dr3, context->Dr6, context->Dr7 );
252     fprintf( stderr, "float=" );
253     dump_uints( (const int *)&context->FloatSave, sizeof(context->FloatSave) / sizeof(int) );
254     fprintf( stderr, "}" );
255 #else
256     dump_uints( (const int *)context, sizeof(*context) / sizeof(int) );
257 #endif
258 }
259
260 static void dump_exc_record( const EXCEPTION_RECORD *rec )
261 {
262     unsigned int i;
263     fprintf( stderr, "{code=%x,flags=%x,rec=%p,addr=%p,params={",
264              rec->ExceptionCode, rec->ExceptionFlags, rec->ExceptionRecord,
265              rec->ExceptionAddress );
266     for (i = 0; i < min(rec->NumberParameters,EXCEPTION_MAXIMUM_PARAMETERS); i++)
267     {
268         if (i) fputc( ',', stderr );
269         fprintf( stderr, "%lx", rec->ExceptionInformation[i] );
270     }
271     fputc( '}', stderr );
272 }
273
274 static void dump_varargs_ints( data_size_t size )
275 {
276     const int *data = cur_data;
277     data_size_t len = size / sizeof(*data);
278
279     fputc( '{', stderr );
280     while (len > 0)
281     {
282         fprintf( stderr, "%d", *data++ );
283         if (--len) fputc( ',', stderr );
284     }
285     fputc( '}', stderr );
286     remove_data( size );
287 }
288
289 static void dump_varargs_handles( data_size_t size )
290 {
291     const obj_handle_t *data = cur_data;
292     data_size_t len = size / sizeof(*data);
293
294     fputc( '{', stderr );
295     while (len > 0)
296     {
297         fprintf( stderr, "%p", *data++ );
298         if (--len) fputc( ',', stderr );
299     }
300     fputc( '}', stderr );
301     remove_data( size );
302 }
303
304 static void dump_varargs_user_handles( data_size_t size )
305 {
306     const user_handle_t *data = cur_data;
307     data_size_t len = size / sizeof(*data);
308
309     fputc( '{', stderr );
310     while (len > 0)
311     {
312         fprintf( stderr, "%p", *data++ );
313         if (--len) fputc( ',', stderr );
314     }
315     fputc( '}', stderr );
316     remove_data( size );
317 }
318
319 static void dump_varargs_bytes( data_size_t size )
320 {
321     const unsigned char *data = cur_data;
322     data_size_t len = size;
323
324     fputc( '{', stderr );
325     while (len > 0)
326     {
327         fprintf( stderr, "%02x", *data++ );
328         if (--len) fputc( ',', stderr );
329     }
330     fputc( '}', stderr );
331     remove_data( size );
332 }
333
334 static void dump_varargs_string( data_size_t size )
335 {
336     fprintf( stderr, "\"%.*s\"", (int)size, (const char *)cur_data );
337     remove_data( size );
338 }
339
340 static void dump_varargs_unicode_str( data_size_t size )
341 {
342     fprintf( stderr, "L\"" );
343     dump_strW( cur_data, size / sizeof(WCHAR), stderr, "\"\"" );
344     fputc( '\"', stderr );
345     remove_data( size );
346 }
347
348 static void dump_varargs_context( data_size_t size )
349 {
350     if (!size)
351     {
352         fprintf( stderr, "{}" );
353         return;
354     }
355     dump_context( cur_data );
356     remove_data( size );
357 }
358
359 static void dump_varargs_exc_event( data_size_t size )
360 {
361     const CONTEXT *ptr = cur_data;
362
363     if (!size)
364     {
365         fprintf( stderr, "{}" );
366         return;
367     }
368     fprintf( stderr, "{context=" );
369     dump_context( ptr );
370     fprintf( stderr, ",rec=" );
371     dump_exc_record( (const EXCEPTION_RECORD *)(ptr + 1) );
372     fputc( '}', stderr );
373     remove_data( size );
374 }
375
376 static void dump_varargs_debug_event( data_size_t size )
377 {
378     const debug_event_t *event = cur_data;
379
380     if (!size)
381     {
382         fprintf( stderr, "{}" );
383         return;
384     }
385     switch(event->code)
386     {
387     case EXCEPTION_DEBUG_EVENT:
388         fprintf( stderr, "{exception," );
389         dump_exc_record( &event->info.exception.record );
390         fprintf( stderr, ",first=%d}", event->info.exception.first );
391         break;
392     case CREATE_THREAD_DEBUG_EVENT:
393         fprintf( stderr, "{create_thread,thread=%p,teb=%p,start=%p}",
394                  event->info.create_thread.handle, event->info.create_thread.teb,
395                  event->info.create_thread.start );
396         break;
397     case CREATE_PROCESS_DEBUG_EVENT:
398         fprintf( stderr, "{create_process,file=%p,process=%p,thread=%p,base=%p,offset=%d,"
399                          "size=%d,teb=%p,start=%p,name=%p,unicode=%d}",
400                  event->info.create_process.file, event->info.create_process.process,
401                  event->info.create_process.thread, event->info.create_process.base,
402                  event->info.create_process.dbg_offset, event->info.create_process.dbg_size,
403                  event->info.create_process.teb, event->info.create_process.start,
404                  event->info.create_process.name, event->info.create_process.unicode );
405         break;
406     case EXIT_THREAD_DEBUG_EVENT:
407         fprintf( stderr, "{exit_thread,code=%d}", event->info.exit.exit_code );
408         break;
409     case EXIT_PROCESS_DEBUG_EVENT:
410         fprintf( stderr, "{exit_process,code=%d}", event->info.exit.exit_code );
411         break;
412     case LOAD_DLL_DEBUG_EVENT:
413         fprintf( stderr, "{load_dll,file=%p,base=%p,offset=%d,size=%d,name=%p,unicode=%d}",
414                  event->info.load_dll.handle, event->info.load_dll.base,
415                  event->info.load_dll.dbg_offset, event->info.load_dll.dbg_size,
416                  event->info.load_dll.name, event->info.load_dll.unicode );
417         break;
418     case UNLOAD_DLL_DEBUG_EVENT:
419         fprintf( stderr, "{unload_dll,base=%p}", event->info.unload_dll.base );
420         break;
421     case OUTPUT_DEBUG_STRING_EVENT:
422         fprintf( stderr, "{output_string,data=%p,unicode=%d,len=%d}",
423                  event->info.output_string.string, event->info.output_string.unicode,
424                  event->info.output_string.length );
425         break;
426     case RIP_EVENT:
427         fprintf( stderr, "{rip,err=%d,type=%d}",
428                  event->info.rip_info.error, event->info.rip_info.type );
429         break;
430     case 0:  /* zero is the code returned on timeouts */
431         fprintf( stderr, "{}" );
432         break;
433     default:
434         fprintf( stderr, "{code=??? (%d)}", event->code );
435         break;
436     }
437     remove_data( size );
438 }
439
440 /* dump a unicode string contained in a buffer; helper for dump_varargs_startup_info */
441 static void dump_inline_unicode_string( const UNICODE_STRING *str, const void *data, data_size_t size )
442 {
443     size_t length = str->Length;
444     size_t offset = (size_t)str->Buffer;
445
446     if (offset >= size) return;
447     if (offset + length > size) length = size - offset;
448     dump_strW( (const WCHAR *)data + offset/sizeof(WCHAR), length/sizeof(WCHAR), stderr, "\"\"" );
449 }
450
451 static void dump_varargs_startup_info( data_size_t size )
452 {
453     const RTL_USER_PROCESS_PARAMETERS *ptr = cur_data;
454     RTL_USER_PROCESS_PARAMETERS params;
455
456     if (size < sizeof(params.Size))
457     {
458         fprintf( stderr, "{}" );
459         return;
460     }
461     if (size > ptr->Size) size = ptr->Size;
462     memset( &params, 0, sizeof(params) );
463     memcpy( &params, ptr, min( size, sizeof(params) ));
464
465     fprintf( stderr, "{AllocationSize=%x,", params.AllocationSize );
466     fprintf( stderr, "Size=%x,", params.Size );
467     fprintf( stderr, "Flags=%x,", params.Flags );
468     fprintf( stderr, "DebugFlags=%x,", params.DebugFlags );
469     fprintf( stderr, "ConsoleHandle=%p,", params.ConsoleHandle );
470     fprintf( stderr, "ConsoleFlags=%x,", params.ConsoleFlags );
471     fprintf( stderr, "hStdInput=%p,", params.hStdInput );
472     fprintf( stderr, "hStdOutput=%p,", params.hStdOutput );
473     fprintf( stderr, "hStdError=%p,", params.hStdError );
474     fprintf( stderr, "CurrentDirectory.Handle=%p,", params.CurrentDirectory.Handle );
475     fprintf( stderr, "dwX=%d,", params.dwX );
476     fprintf( stderr, "dwY=%d,", params.dwY );
477     fprintf( stderr, "dwXSize=%d,", params.dwXSize );
478     fprintf( stderr, "dwYSize=%d,", params.dwYSize );
479     fprintf( stderr, "dwXCountChars=%d,", params.dwXCountChars );
480     fprintf( stderr, "dwYCountChars=%d,", params.dwYCountChars );
481     fprintf( stderr, "dwFillAttribute=%x,", params.dwFillAttribute );
482     fprintf( stderr, "dwFlags=%x,", params.dwFlags );
483     fprintf( stderr, "wShowWindow=%x,", params.wShowWindow );
484     fprintf( stderr, "CurrentDirectory.DosPath=L\"" );
485     dump_inline_unicode_string( &params.CurrentDirectory.DosPath, cur_data, size );
486     fprintf( stderr, "\",DllPath=L\"" );
487     dump_inline_unicode_string( &params.DllPath, cur_data, size );
488     fprintf( stderr, "\",ImagePathName=L\"" );
489     dump_inline_unicode_string( &params.ImagePathName, cur_data, size );
490     fprintf( stderr, "\",CommandLine=L\"" );
491     dump_inline_unicode_string( &params.CommandLine, cur_data, size );
492     fprintf( stderr, "\",WindowTitle=L\"" );
493     dump_inline_unicode_string( &params.WindowTitle, cur_data, size );
494     fprintf( stderr, "\",Desktop=L\"" );
495     dump_inline_unicode_string( &params.Desktop, cur_data, size );
496     fprintf( stderr, "\",ShellInfo=L\"" );
497     dump_inline_unicode_string( &params.ShellInfo, cur_data, size );
498     fprintf( stderr, "\",RuntimeInfo=L\"" );
499     dump_inline_unicode_string( &params.RuntimeInfo, cur_data, size );
500     fprintf( stderr, "\"}" );
501     remove_data( size );
502 }
503
504 static void dump_varargs_input_records( data_size_t size )
505 {
506     const INPUT_RECORD *rec = cur_data;
507     data_size_t len = size / sizeof(*rec);
508
509     fputc( '{', stderr );
510     while (len > 0)
511     {
512         fprintf( stderr, "{%04x,...}", rec->EventType );
513         rec++;
514         if (--len) fputc( ',', stderr );
515     }
516     fputc( '}', stderr );
517     remove_data( size );
518 }
519
520 static void dump_varargs_rectangles( data_size_t size )
521 {
522     const rectangle_t *rect = cur_data;
523     data_size_t len = size / sizeof(*rect);
524
525     fputc( '{', stderr );
526     while (len > 0)
527     {
528         dump_rectangle( rect++ );
529         if (--len) fputc( ',', stderr );
530     }
531     fputc( '}', stderr );
532     remove_data( size );
533 }
534
535 static void dump_varargs_message_data( data_size_t size )
536 {
537     /* FIXME: dump the structured data */
538     dump_varargs_bytes( size );
539 }
540
541 static void dump_varargs_properties( data_size_t size )
542 {
543     const property_data_t *prop = cur_data;
544     data_size_t len = size / sizeof(*prop);
545
546     fputc( '{', stderr );
547     while (len > 0)
548     {
549         fprintf( stderr, "{atom=%04x,str=%d,handle=%p}",
550                  prop->atom, prop->string, prop->handle );
551         prop++;
552         if (--len) fputc( ',', stderr );
553     }
554     fputc( '}', stderr );
555     remove_data( size );
556 }
557
558 static void dump_varargs_LUID_AND_ATTRIBUTES( data_size_t size )
559 {
560     const LUID_AND_ATTRIBUTES *lat = cur_data;
561     data_size_t len = size / sizeof(*lat);
562
563     fputc( '{', stderr );
564     while (len > 0)
565     {
566         fprintf( stderr, "{luid=%08x%08x,attr=%x}",
567                  lat->Luid.HighPart, lat->Luid.LowPart, lat->Attributes );
568         lat++;
569         if (--len) fputc( ',', stderr );
570     }
571     fputc( '}', stderr );
572     remove_data( size );
573 }
574
575 static void dump_inline_sid( const SID *sid, data_size_t size )
576 {
577     DWORD i;
578
579     /* security check */
580     if ((FIELD_OFFSET(SID, SubAuthority[0]) > size) ||
581         (FIELD_OFFSET(SID, SubAuthority[sid->SubAuthorityCount]) > size))
582     {
583         fprintf( stderr, "<invalid sid>" );
584         return;
585     }
586
587     fputc( '{', stderr );
588     fprintf( stderr, "S-%u-%u", sid->Revision, MAKELONG(
589         MAKEWORD( sid->IdentifierAuthority.Value[5],
590                   sid->IdentifierAuthority.Value[4] ),
591         MAKEWORD( sid->IdentifierAuthority.Value[3],
592                   sid->IdentifierAuthority.Value[2] ) ) );
593     for (i = 0; i < sid->SubAuthorityCount; i++)
594         fprintf( stderr, "-%u", sid->SubAuthority[i] );
595     fputc( '}', stderr );
596 }
597
598 static void dump_varargs_SID( data_size_t size )
599 {
600     const SID *sid = cur_data;
601     dump_inline_sid( sid, size );
602     remove_data( size );
603 }
604
605 static void dump_inline_acl( const ACL *acl, data_size_t size )
606 {
607     const ACE_HEADER *ace;
608     ULONG i;
609     fputc( '{', stderr );
610
611     if (size)
612     {
613         if (size < sizeof(ACL))
614         {
615             fprintf( stderr, "<invalid acl>}\n" );
616             return;
617         }
618         size -= sizeof(ACL);
619         ace = (const ACE_HEADER *)(acl + 1);
620         for (i = 0; i < acl->AceCount; i++)
621         {
622             const SID *sid = NULL;
623             data_size_t sid_size = 0;
624
625             if (size < sizeof(ACE_HEADER))
626                 return;
627             if (size < ace->AceSize)
628                 return;
629             size -= ace->AceSize;
630             if (i != 0) fputc( ',', stderr );
631             fprintf( stderr, "{AceType=" );
632             switch (ace->AceType)
633             {
634             case ACCESS_DENIED_ACE_TYPE:
635                 sid = (const SID *)&((const ACCESS_DENIED_ACE *)ace)->SidStart;
636                 sid_size = ace->AceSize - FIELD_OFFSET(ACCESS_DENIED_ACE, SidStart);
637                 fprintf( stderr, "ACCESS_DENIED_ACE_TYPE,Mask=%x",
638                          ((const ACCESS_DENIED_ACE *)ace)->Mask );
639                 break;
640             case ACCESS_ALLOWED_ACE_TYPE:
641                 sid = (const SID *)&((const ACCESS_ALLOWED_ACE *)ace)->SidStart;
642                 sid_size = ace->AceSize - FIELD_OFFSET(ACCESS_ALLOWED_ACE, SidStart);
643                 fprintf( stderr, "ACCESS_ALLOWED_ACE_TYPE,Mask=%x",
644                          ((const ACCESS_ALLOWED_ACE *)ace)->Mask );
645                 break;
646             case SYSTEM_AUDIT_ACE_TYPE:
647                 sid = (const SID *)&((const SYSTEM_AUDIT_ACE *)ace)->SidStart;
648                 sid_size = ace->AceSize - FIELD_OFFSET(SYSTEM_AUDIT_ACE, SidStart);
649                 fprintf( stderr, "SYSTEM_AUDIT_ACE_TYPE,Mask=%x",
650                          ((const SYSTEM_AUDIT_ACE *)ace)->Mask );
651                 break;
652             case SYSTEM_ALARM_ACE_TYPE:
653                 sid = (const SID *)&((const SYSTEM_ALARM_ACE *)ace)->SidStart;
654                 sid_size = ace->AceSize - FIELD_OFFSET(SYSTEM_ALARM_ACE, SidStart);
655                 fprintf( stderr, "SYSTEM_ALARM_ACE_TYPE,Mask=%x",
656                          ((const SYSTEM_ALARM_ACE *)ace)->Mask );
657                 break;
658             default:
659                 fprintf( stderr, "unknown<%d>", ace->AceType );
660                 break;
661             }
662             fprintf( stderr, ",AceFlags=%x,Sid=", ace->AceFlags );
663             if (sid)
664                 dump_inline_sid( sid, sid_size );
665             ace = (const ACE_HEADER *)((const char *)ace + ace->AceSize);
666             fputc( '}', stderr );
667         }
668     }
669     fputc( '}', stderr );
670 }
671
672 static void dump_inline_security_descriptor( const struct security_descriptor *sd, data_size_t size )
673 {
674     fputc( '{', stderr );
675     if (size >= sizeof(struct security_descriptor))
676     {
677         size_t offset = sizeof(struct security_descriptor);
678         fprintf( stderr, "control=%08x", sd->control );
679         fprintf( stderr, ",owner=" );
680         if ((sd->owner_len > FIELD_OFFSET(SID, SubAuthority[255])) || (offset + sd->owner_len > size))
681             return;
682         dump_inline_sid( (const SID *)((const char *)sd + offset), sd->owner_len );
683         offset += sd->owner_len;
684         fprintf( stderr, ",group=" );
685         if ((sd->group_len > FIELD_OFFSET(SID, SubAuthority[255])) || (offset + sd->group_len > size))
686             return;
687         dump_inline_sid( (const SID *)((const char *)sd + offset), sd->group_len );
688         offset += sd->group_len;
689         fprintf( stderr, ",sacl=" );
690         if ((sd->sacl_len >= MAX_ACL_LEN) || (offset + sd->sacl_len > size))
691             return;
692         dump_inline_acl( (const ACL *)((const char *)sd + offset), sd->sacl_len );
693         offset += sd->sacl_len;
694         fprintf( stderr, ",dacl=" );
695         if ((sd->dacl_len >= MAX_ACL_LEN) || (offset + sd->dacl_len > size))
696             return;
697         dump_inline_acl( (const ACL *)((const char *)sd + offset), sd->dacl_len );
698         offset += sd->dacl_len;
699     }
700     fputc( '}', stderr );
701 }
702
703 static void dump_varargs_security_descriptor( data_size_t size )
704 {
705     const struct security_descriptor *sd = cur_data;
706     dump_inline_security_descriptor( sd, size );
707     remove_data( size );
708 }
709
710 static void dump_varargs_token_groups( data_size_t size )
711 {
712     const struct token_groups *tg = cur_data;
713     fputc( '{', stderr );
714     if (size >= sizeof(struct token_groups))
715     {
716         size_t offset = sizeof(*tg);
717         fprintf( stderr, "count=%08x,", tg->count );
718         if (tg->count * sizeof(unsigned int) <= size)
719         {
720             unsigned int i;
721             const unsigned int *attr = (const unsigned int *)(tg + 1);
722
723             offset += tg->count * sizeof(unsigned int);
724
725             fputc( '[', stderr );
726             for (i = 0; i < tg->count; i++)
727             {
728                 const SID *sid = (const SID *)((const char *)cur_data + offset);
729                 if (i != 0)
730                     fputc( ',', stderr );
731                 fputc( '{', stderr );
732                 fprintf( stderr, "attributes=%08x", attr[i] );
733                 fprintf( stderr, ",sid=" );
734                 dump_inline_sid( sid, size - offset );
735                 if ((offset + FIELD_OFFSET(SID, SubAuthority[0]) > size) ||
736                     (offset + FIELD_OFFSET(SID, SubAuthority[sid->SubAuthorityCount]) > size))
737                     break;
738                 offset += FIELD_OFFSET(SID, SubAuthority[sid->SubAuthorityCount]);
739                 fputc( '}', stderr );
740             }
741             fputc( ']', stderr );
742         }
743     }
744     fputc( '}', stderr );
745 }
746
747 typedef void (*dump_func)( const void *req );
748
749 /* Everything below this line is generated automatically by tools/make_requests */
750 /* ### make_requests begin ### */
751
752 static void dump_new_process_request( const struct new_process_request *req )
753 {
754     fprintf( stderr, " inherit_all=%d,", req->inherit_all );
755     fprintf( stderr, " create_flags=%08x,", req->create_flags );
756     fprintf( stderr, " socket_fd=%d,", req->socket_fd );
757     fprintf( stderr, " exe_file=%p,", req->exe_file );
758     fprintf( stderr, " hstdin=%p,", req->hstdin );
759     fprintf( stderr, " hstdout=%p,", req->hstdout );
760     fprintf( stderr, " hstderr=%p,", req->hstderr );
761     fprintf( stderr, " process_access=%08x,", req->process_access );
762     fprintf( stderr, " process_attr=%08x,", req->process_attr );
763     fprintf( stderr, " thread_access=%08x,", req->thread_access );
764     fprintf( stderr, " thread_attr=%08x,", req->thread_attr );
765     fprintf( stderr, " info=" );
766     dump_varargs_startup_info( cur_size );
767     fputc( ',', stderr );
768     fprintf( stderr, " env=" );
769     dump_varargs_unicode_str( cur_size );
770 }
771
772 static void dump_new_process_reply( const struct new_process_reply *req )
773 {
774     fprintf( stderr, " info=%p,", req->info );
775     fprintf( stderr, " pid=%04x,", req->pid );
776     fprintf( stderr, " phandle=%p,", req->phandle );
777     fprintf( stderr, " tid=%04x,", req->tid );
778     fprintf( stderr, " thandle=%p", req->thandle );
779 }
780
781 static void dump_get_new_process_info_request( const struct get_new_process_info_request *req )
782 {
783     fprintf( stderr, " info=%p", req->info );
784 }
785
786 static void dump_get_new_process_info_reply( const struct get_new_process_info_reply *req )
787 {
788     fprintf( stderr, " success=%d,", req->success );
789     fprintf( stderr, " exit_code=%d", req->exit_code );
790 }
791
792 static void dump_new_thread_request( const struct new_thread_request *req )
793 {
794     fprintf( stderr, " access=%08x,", req->access );
795     fprintf( stderr, " attributes=%08x,", req->attributes );
796     fprintf( stderr, " suspend=%d,", req->suspend );
797     fprintf( stderr, " request_fd=%d", req->request_fd );
798 }
799
800 static void dump_new_thread_reply( const struct new_thread_reply *req )
801 {
802     fprintf( stderr, " tid=%04x,", req->tid );
803     fprintf( stderr, " handle=%p", req->handle );
804 }
805
806 static void dump_get_startup_info_request( const struct get_startup_info_request *req )
807 {
808 }
809
810 static void dump_get_startup_info_reply( const struct get_startup_info_reply *req )
811 {
812     fprintf( stderr, " exe_file=%p,", req->exe_file );
813     fprintf( stderr, " hstdin=%p,", req->hstdin );
814     fprintf( stderr, " hstdout=%p,", req->hstdout );
815     fprintf( stderr, " hstderr=%p,", req->hstderr );
816     fprintf( stderr, " info=" );
817     dump_varargs_startup_info( cur_size );
818     fputc( ',', stderr );
819     fprintf( stderr, " env=" );
820     dump_varargs_unicode_str( cur_size );
821 }
822
823 static void dump_init_process_done_request( const struct init_process_done_request *req )
824 {
825     fprintf( stderr, " module=%p,", req->module );
826     fprintf( stderr, " entry=%p,", req->entry );
827     fprintf( stderr, " gui=%d", req->gui );
828 }
829
830 static void dump_init_thread_request( const struct init_thread_request *req )
831 {
832     fprintf( stderr, " unix_pid=%d,", req->unix_pid );
833     fprintf( stderr, " unix_tid=%d,", req->unix_tid );
834     fprintf( stderr, " debug_level=%d,", req->debug_level );
835     fprintf( stderr, " teb=%p,", req->teb );
836     fprintf( stderr, " peb=%p,", req->peb );
837     fprintf( stderr, " entry=%p,", req->entry );
838     fprintf( stderr, " ldt_copy=%p,", req->ldt_copy );
839     fprintf( stderr, " reply_fd=%d,", req->reply_fd );
840     fprintf( stderr, " wait_fd=%d", req->wait_fd );
841 }
842
843 static void dump_init_thread_reply( const struct init_thread_reply *req )
844 {
845     fprintf( stderr, " pid=%04x,", req->pid );
846     fprintf( stderr, " tid=%04x,", req->tid );
847     fprintf( stderr, " info_size=%u,", req->info_size );
848     fprintf( stderr, " server_start=" );
849     dump_timeout( &req->server_start );
850     fprintf( stderr, "," );
851     fprintf( stderr, " version=%d", req->version );
852 }
853
854 static void dump_terminate_process_request( const struct terminate_process_request *req )
855 {
856     fprintf( stderr, " handle=%p,", req->handle );
857     fprintf( stderr, " exit_code=%d", req->exit_code );
858 }
859
860 static void dump_terminate_process_reply( const struct terminate_process_reply *req )
861 {
862     fprintf( stderr, " self=%d", req->self );
863 }
864
865 static void dump_terminate_thread_request( const struct terminate_thread_request *req )
866 {
867     fprintf( stderr, " handle=%p,", req->handle );
868     fprintf( stderr, " exit_code=%d", req->exit_code );
869 }
870
871 static void dump_terminate_thread_reply( const struct terminate_thread_reply *req )
872 {
873     fprintf( stderr, " self=%d,", req->self );
874     fprintf( stderr, " last=%d", req->last );
875 }
876
877 static void dump_get_process_info_request( const struct get_process_info_request *req )
878 {
879     fprintf( stderr, " handle=%p", req->handle );
880 }
881
882 static void dump_get_process_info_reply( const struct get_process_info_reply *req )
883 {
884     fprintf( stderr, " pid=%04x,", req->pid );
885     fprintf( stderr, " ppid=%04x,", req->ppid );
886     fprintf( stderr, " exit_code=%d,", req->exit_code );
887     fprintf( stderr, " priority=%d,", req->priority );
888     fprintf( stderr, " affinity=%d,", req->affinity );
889     fprintf( stderr, " peb=%p,", req->peb );
890     fprintf( stderr, " start_time=" );
891     dump_timeout( &req->start_time );
892     fprintf( stderr, "," );
893     fprintf( stderr, " end_time=" );
894     dump_timeout( &req->end_time );
895 }
896
897 static void dump_set_process_info_request( const struct set_process_info_request *req )
898 {
899     fprintf( stderr, " handle=%p,", req->handle );
900     fprintf( stderr, " mask=%d,", req->mask );
901     fprintf( stderr, " priority=%d,", req->priority );
902     fprintf( stderr, " affinity=%d", req->affinity );
903 }
904
905 static void dump_get_thread_info_request( const struct get_thread_info_request *req )
906 {
907     fprintf( stderr, " handle=%p,", req->handle );
908     fprintf( stderr, " tid_in=%04x", req->tid_in );
909 }
910
911 static void dump_get_thread_info_reply( const struct get_thread_info_reply *req )
912 {
913     fprintf( stderr, " pid=%04x,", req->pid );
914     fprintf( stderr, " tid=%04x,", req->tid );
915     fprintf( stderr, " teb=%p,", req->teb );
916     fprintf( stderr, " exit_code=%d,", req->exit_code );
917     fprintf( stderr, " priority=%d,", req->priority );
918     fprintf( stderr, " affinity=%d,", req->affinity );
919     fprintf( stderr, " creation_time=" );
920     dump_timeout( &req->creation_time );
921     fprintf( stderr, "," );
922     fprintf( stderr, " exit_time=" );
923     dump_timeout( &req->exit_time );
924     fprintf( stderr, "," );
925     fprintf( stderr, " last=%d", req->last );
926 }
927
928 static void dump_set_thread_info_request( const struct set_thread_info_request *req )
929 {
930     fprintf( stderr, " handle=%p,", req->handle );
931     fprintf( stderr, " mask=%d,", req->mask );
932     fprintf( stderr, " priority=%d,", req->priority );
933     fprintf( stderr, " affinity=%d,", req->affinity );
934     fprintf( stderr, " token=%p", req->token );
935 }
936
937 static void dump_get_dll_info_request( const struct get_dll_info_request *req )
938 {
939     fprintf( stderr, " handle=%p,", req->handle );
940     fprintf( stderr, " base_address=%p", req->base_address );
941 }
942
943 static void dump_get_dll_info_reply( const struct get_dll_info_reply *req )
944 {
945     fprintf( stderr, " size=%lu,", (unsigned long)req->size );
946     fprintf( stderr, " entry_point=%p,", req->entry_point );
947     fprintf( stderr, " filename=" );
948     dump_varargs_unicode_str( cur_size );
949 }
950
951 static void dump_suspend_thread_request( const struct suspend_thread_request *req )
952 {
953     fprintf( stderr, " handle=%p", req->handle );
954 }
955
956 static void dump_suspend_thread_reply( const struct suspend_thread_reply *req )
957 {
958     fprintf( stderr, " count=%d", req->count );
959 }
960
961 static void dump_resume_thread_request( const struct resume_thread_request *req )
962 {
963     fprintf( stderr, " handle=%p", req->handle );
964 }
965
966 static void dump_resume_thread_reply( const struct resume_thread_reply *req )
967 {
968     fprintf( stderr, " count=%d", req->count );
969 }
970
971 static void dump_load_dll_request( const struct load_dll_request *req )
972 {
973     fprintf( stderr, " handle=%p,", req->handle );
974     fprintf( stderr, " base=%p,", req->base );
975     fprintf( stderr, " size=%lu,", (unsigned long)req->size );
976     fprintf( stderr, " dbg_offset=%d,", req->dbg_offset );
977     fprintf( stderr, " dbg_size=%d,", req->dbg_size );
978     fprintf( stderr, " name=%p,", req->name );
979     fprintf( stderr, " filename=" );
980     dump_varargs_unicode_str( cur_size );
981 }
982
983 static void dump_unload_dll_request( const struct unload_dll_request *req )
984 {
985     fprintf( stderr, " base=%p", req->base );
986 }
987
988 static void dump_queue_apc_request( const struct queue_apc_request *req )
989 {
990     fprintf( stderr, " thread=%p,", req->thread );
991     fprintf( stderr, " process=%p,", req->process );
992     fprintf( stderr, " call=" );
993     dump_apc_call( &req->call );
994 }
995
996 static void dump_queue_apc_reply( const struct queue_apc_reply *req )
997 {
998     fprintf( stderr, " handle=%p,", req->handle );
999     fprintf( stderr, " self=%d", req->self );
1000 }
1001
1002 static void dump_get_apc_request( const struct get_apc_request *req )
1003 {
1004     fprintf( stderr, " alertable=%d,", req->alertable );
1005     fprintf( stderr, " prev=%p,", req->prev );
1006     fprintf( stderr, " result=" );
1007     dump_apc_result( &req->result );
1008 }
1009
1010 static void dump_get_apc_reply( const struct get_apc_reply *req )
1011 {
1012     fprintf( stderr, " handle=%p,", req->handle );
1013     fprintf( stderr, " call=" );
1014     dump_apc_call( &req->call );
1015 }
1016
1017 static void dump_get_apc_result_request( const struct get_apc_result_request *req )
1018 {
1019     fprintf( stderr, " handle=%p", req->handle );
1020 }
1021
1022 static void dump_get_apc_result_reply( const struct get_apc_result_reply *req )
1023 {
1024     fprintf( stderr, " result=" );
1025     dump_apc_result( &req->result );
1026 }
1027
1028 static void dump_close_handle_request( const struct close_handle_request *req )
1029 {
1030     fprintf( stderr, " handle=%p", req->handle );
1031 }
1032
1033 static void dump_set_handle_info_request( const struct set_handle_info_request *req )
1034 {
1035     fprintf( stderr, " handle=%p,", req->handle );
1036     fprintf( stderr, " flags=%d,", req->flags );
1037     fprintf( stderr, " mask=%d", req->mask );
1038 }
1039
1040 static void dump_set_handle_info_reply( const struct set_handle_info_reply *req )
1041 {
1042     fprintf( stderr, " old_flags=%d", req->old_flags );
1043 }
1044
1045 static void dump_dup_handle_request( const struct dup_handle_request *req )
1046 {
1047     fprintf( stderr, " src_process=%p,", req->src_process );
1048     fprintf( stderr, " src_handle=%p,", req->src_handle );
1049     fprintf( stderr, " dst_process=%p,", req->dst_process );
1050     fprintf( stderr, " access=%08x,", req->access );
1051     fprintf( stderr, " attributes=%08x,", req->attributes );
1052     fprintf( stderr, " options=%08x", req->options );
1053 }
1054
1055 static void dump_dup_handle_reply( const struct dup_handle_reply *req )
1056 {
1057     fprintf( stderr, " handle=%p,", req->handle );
1058     fprintf( stderr, " self=%d,", req->self );
1059     fprintf( stderr, " closed=%d", req->closed );
1060 }
1061
1062 static void dump_open_process_request( const struct open_process_request *req )
1063 {
1064     fprintf( stderr, " pid=%04x,", req->pid );
1065     fprintf( stderr, " access=%08x,", req->access );
1066     fprintf( stderr, " attributes=%08x", req->attributes );
1067 }
1068
1069 static void dump_open_process_reply( const struct open_process_reply *req )
1070 {
1071     fprintf( stderr, " handle=%p", req->handle );
1072 }
1073
1074 static void dump_open_thread_request( const struct open_thread_request *req )
1075 {
1076     fprintf( stderr, " tid=%04x,", req->tid );
1077     fprintf( stderr, " access=%08x,", req->access );
1078     fprintf( stderr, " attributes=%08x", req->attributes );
1079 }
1080
1081 static void dump_open_thread_reply( const struct open_thread_reply *req )
1082 {
1083     fprintf( stderr, " handle=%p", req->handle );
1084 }
1085
1086 static void dump_select_request( const struct select_request *req )
1087 {
1088     fprintf( stderr, " flags=%d,", req->flags );
1089     fprintf( stderr, " cookie=%p,", req->cookie );
1090     fprintf( stderr, " signal=%p,", req->signal );
1091     fprintf( stderr, " timeout=" );
1092     dump_timeout( &req->timeout );
1093     fprintf( stderr, "," );
1094     fprintf( stderr, " handles=" );
1095     dump_varargs_handles( cur_size );
1096 }
1097
1098 static void dump_select_reply( const struct select_reply *req )
1099 {
1100     fprintf( stderr, " timeout=" );
1101     dump_timeout( &req->timeout );
1102 }
1103
1104 static void dump_create_event_request( const struct create_event_request *req )
1105 {
1106     fprintf( stderr, " access=%08x,", req->access );
1107     fprintf( stderr, " attributes=%08x,", req->attributes );
1108     fprintf( stderr, " rootdir=%p,", req->rootdir );
1109     fprintf( stderr, " manual_reset=%d,", req->manual_reset );
1110     fprintf( stderr, " initial_state=%d,", req->initial_state );
1111     fprintf( stderr, " name=" );
1112     dump_varargs_unicode_str( cur_size );
1113 }
1114
1115 static void dump_create_event_reply( const struct create_event_reply *req )
1116 {
1117     fprintf( stderr, " handle=%p", req->handle );
1118 }
1119
1120 static void dump_event_op_request( const struct event_op_request *req )
1121 {
1122     fprintf( stderr, " handle=%p,", req->handle );
1123     fprintf( stderr, " op=%d", req->op );
1124 }
1125
1126 static void dump_open_event_request( const struct open_event_request *req )
1127 {
1128     fprintf( stderr, " access=%08x,", req->access );
1129     fprintf( stderr, " attributes=%08x,", req->attributes );
1130     fprintf( stderr, " rootdir=%p,", req->rootdir );
1131     fprintf( stderr, " name=" );
1132     dump_varargs_unicode_str( cur_size );
1133 }
1134
1135 static void dump_open_event_reply( const struct open_event_reply *req )
1136 {
1137     fprintf( stderr, " handle=%p", req->handle );
1138 }
1139
1140 static void dump_create_mutex_request( const struct create_mutex_request *req )
1141 {
1142     fprintf( stderr, " access=%08x,", req->access );
1143     fprintf( stderr, " attributes=%08x,", req->attributes );
1144     fprintf( stderr, " rootdir=%p,", req->rootdir );
1145     fprintf( stderr, " owned=%d,", req->owned );
1146     fprintf( stderr, " name=" );
1147     dump_varargs_unicode_str( cur_size );
1148 }
1149
1150 static void dump_create_mutex_reply( const struct create_mutex_reply *req )
1151 {
1152     fprintf( stderr, " handle=%p", req->handle );
1153 }
1154
1155 static void dump_release_mutex_request( const struct release_mutex_request *req )
1156 {
1157     fprintf( stderr, " handle=%p", req->handle );
1158 }
1159
1160 static void dump_release_mutex_reply( const struct release_mutex_reply *req )
1161 {
1162     fprintf( stderr, " prev_count=%08x", req->prev_count );
1163 }
1164
1165 static void dump_open_mutex_request( const struct open_mutex_request *req )
1166 {
1167     fprintf( stderr, " access=%08x,", req->access );
1168     fprintf( stderr, " attributes=%08x,", req->attributes );
1169     fprintf( stderr, " rootdir=%p,", req->rootdir );
1170     fprintf( stderr, " name=" );
1171     dump_varargs_unicode_str( cur_size );
1172 }
1173
1174 static void dump_open_mutex_reply( const struct open_mutex_reply *req )
1175 {
1176     fprintf( stderr, " handle=%p", req->handle );
1177 }
1178
1179 static void dump_create_semaphore_request( const struct create_semaphore_request *req )
1180 {
1181     fprintf( stderr, " access=%08x,", req->access );
1182     fprintf( stderr, " attributes=%08x,", req->attributes );
1183     fprintf( stderr, " rootdir=%p,", req->rootdir );
1184     fprintf( stderr, " initial=%08x,", req->initial );
1185     fprintf( stderr, " max=%08x,", req->max );
1186     fprintf( stderr, " name=" );
1187     dump_varargs_unicode_str( cur_size );
1188 }
1189
1190 static void dump_create_semaphore_reply( const struct create_semaphore_reply *req )
1191 {
1192     fprintf( stderr, " handle=%p", req->handle );
1193 }
1194
1195 static void dump_release_semaphore_request( const struct release_semaphore_request *req )
1196 {
1197     fprintf( stderr, " handle=%p,", req->handle );
1198     fprintf( stderr, " count=%08x", req->count );
1199 }
1200
1201 static void dump_release_semaphore_reply( const struct release_semaphore_reply *req )
1202 {
1203     fprintf( stderr, " prev_count=%08x", req->prev_count );
1204 }
1205
1206 static void dump_open_semaphore_request( const struct open_semaphore_request *req )
1207 {
1208     fprintf( stderr, " access=%08x,", req->access );
1209     fprintf( stderr, " attributes=%08x,", req->attributes );
1210     fprintf( stderr, " rootdir=%p,", req->rootdir );
1211     fprintf( stderr, " name=" );
1212     dump_varargs_unicode_str( cur_size );
1213 }
1214
1215 static void dump_open_semaphore_reply( const struct open_semaphore_reply *req )
1216 {
1217     fprintf( stderr, " handle=%p", req->handle );
1218 }
1219
1220 static void dump_create_file_request( const struct create_file_request *req )
1221 {
1222     fprintf( stderr, " access=%08x,", req->access );
1223     fprintf( stderr, " attributes=%08x,", req->attributes );
1224     fprintf( stderr, " sharing=%08x,", req->sharing );
1225     fprintf( stderr, " create=%d,", req->create );
1226     fprintf( stderr, " options=%08x,", req->options );
1227     fprintf( stderr, " attrs=%08x,", req->attrs );
1228     fprintf( stderr, " filename=" );
1229     dump_varargs_string( cur_size );
1230 }
1231
1232 static void dump_create_file_reply( const struct create_file_reply *req )
1233 {
1234     fprintf( stderr, " handle=%p", req->handle );
1235 }
1236
1237 static void dump_open_file_object_request( const struct open_file_object_request *req )
1238 {
1239     fprintf( stderr, " access=%08x,", req->access );
1240     fprintf( stderr, " attributes=%08x,", req->attributes );
1241     fprintf( stderr, " rootdir=%p,", req->rootdir );
1242     fprintf( stderr, " sharing=%08x,", req->sharing );
1243     fprintf( stderr, " options=%08x,", req->options );
1244     fprintf( stderr, " filename=" );
1245     dump_varargs_unicode_str( cur_size );
1246 }
1247
1248 static void dump_open_file_object_reply( const struct open_file_object_reply *req )
1249 {
1250     fprintf( stderr, " handle=%p", req->handle );
1251 }
1252
1253 static void dump_alloc_file_handle_request( const struct alloc_file_handle_request *req )
1254 {
1255     fprintf( stderr, " access=%08x,", req->access );
1256     fprintf( stderr, " attributes=%08x,", req->attributes );
1257     fprintf( stderr, " fd=%d", req->fd );
1258 }
1259
1260 static void dump_alloc_file_handle_reply( const struct alloc_file_handle_reply *req )
1261 {
1262     fprintf( stderr, " handle=%p", req->handle );
1263 }
1264
1265 static void dump_get_handle_fd_request( const struct get_handle_fd_request *req )
1266 {
1267     fprintf( stderr, " handle=%p", req->handle );
1268 }
1269
1270 static void dump_get_handle_fd_reply( const struct get_handle_fd_reply *req )
1271 {
1272     fprintf( stderr, " type=%d,", req->type );
1273     fprintf( stderr, " removable=%d,", req->removable );
1274     fprintf( stderr, " access=%08x,", req->access );
1275     fprintf( stderr, " options=%08x", req->options );
1276 }
1277
1278 static void dump_flush_file_request( const struct flush_file_request *req )
1279 {
1280     fprintf( stderr, " handle=%p", req->handle );
1281 }
1282
1283 static void dump_flush_file_reply( const struct flush_file_reply *req )
1284 {
1285     fprintf( stderr, " event=%p", req->event );
1286 }
1287
1288 static void dump_lock_file_request( const struct lock_file_request *req )
1289 {
1290     fprintf( stderr, " handle=%p,", req->handle );
1291     fprintf( stderr, " offset_low=%08x,", req->offset_low );
1292     fprintf( stderr, " offset_high=%08x,", req->offset_high );
1293     fprintf( stderr, " count_low=%08x,", req->count_low );
1294     fprintf( stderr, " count_high=%08x,", req->count_high );
1295     fprintf( stderr, " shared=%d,", req->shared );
1296     fprintf( stderr, " wait=%d", req->wait );
1297 }
1298
1299 static void dump_lock_file_reply( const struct lock_file_reply *req )
1300 {
1301     fprintf( stderr, " handle=%p,", req->handle );
1302     fprintf( stderr, " overlapped=%d", req->overlapped );
1303 }
1304
1305 static void dump_unlock_file_request( const struct unlock_file_request *req )
1306 {
1307     fprintf( stderr, " handle=%p,", req->handle );
1308     fprintf( stderr, " offset_low=%08x,", req->offset_low );
1309     fprintf( stderr, " offset_high=%08x,", req->offset_high );
1310     fprintf( stderr, " count_low=%08x,", req->count_low );
1311     fprintf( stderr, " count_high=%08x", req->count_high );
1312 }
1313
1314 static void dump_create_socket_request( const struct create_socket_request *req )
1315 {
1316     fprintf( stderr, " access=%08x,", req->access );
1317     fprintf( stderr, " attributes=%08x,", req->attributes );
1318     fprintf( stderr, " family=%d,", req->family );
1319     fprintf( stderr, " type=%d,", req->type );
1320     fprintf( stderr, " protocol=%d,", req->protocol );
1321     fprintf( stderr, " flags=%08x", req->flags );
1322 }
1323
1324 static void dump_create_socket_reply( const struct create_socket_reply *req )
1325 {
1326     fprintf( stderr, " handle=%p", req->handle );
1327 }
1328
1329 static void dump_accept_socket_request( const struct accept_socket_request *req )
1330 {
1331     fprintf( stderr, " lhandle=%p,", req->lhandle );
1332     fprintf( stderr, " access=%08x,", req->access );
1333     fprintf( stderr, " attributes=%08x", req->attributes );
1334 }
1335
1336 static void dump_accept_socket_reply( const struct accept_socket_reply *req )
1337 {
1338     fprintf( stderr, " handle=%p", req->handle );
1339 }
1340
1341 static void dump_set_socket_event_request( const struct set_socket_event_request *req )
1342 {
1343     fprintf( stderr, " handle=%p,", req->handle );
1344     fprintf( stderr, " mask=%08x,", req->mask );
1345     fprintf( stderr, " event=%p,", req->event );
1346     fprintf( stderr, " window=%p,", req->window );
1347     fprintf( stderr, " msg=%08x", req->msg );
1348 }
1349
1350 static void dump_get_socket_event_request( const struct get_socket_event_request *req )
1351 {
1352     fprintf( stderr, " handle=%p,", req->handle );
1353     fprintf( stderr, " service=%d,", req->service );
1354     fprintf( stderr, " c_event=%p", req->c_event );
1355 }
1356
1357 static void dump_get_socket_event_reply( const struct get_socket_event_reply *req )
1358 {
1359     fprintf( stderr, " mask=%08x,", req->mask );
1360     fprintf( stderr, " pmask=%08x,", req->pmask );
1361     fprintf( stderr, " state=%08x,", req->state );
1362     fprintf( stderr, " errors=" );
1363     dump_varargs_ints( cur_size );
1364 }
1365
1366 static void dump_enable_socket_event_request( const struct enable_socket_event_request *req )
1367 {
1368     fprintf( stderr, " handle=%p,", req->handle );
1369     fprintf( stderr, " mask=%08x,", req->mask );
1370     fprintf( stderr, " sstate=%08x,", req->sstate );
1371     fprintf( stderr, " cstate=%08x", req->cstate );
1372 }
1373
1374 static void dump_set_socket_deferred_request( const struct set_socket_deferred_request *req )
1375 {
1376     fprintf( stderr, " handle=%p,", req->handle );
1377     fprintf( stderr, " deferred=%p", req->deferred );
1378 }
1379
1380 static void dump_alloc_console_request( const struct alloc_console_request *req )
1381 {
1382     fprintf( stderr, " access=%08x,", req->access );
1383     fprintf( stderr, " attributes=%08x,", req->attributes );
1384     fprintf( stderr, " pid=%04x", req->pid );
1385 }
1386
1387 static void dump_alloc_console_reply( const struct alloc_console_reply *req )
1388 {
1389     fprintf( stderr, " handle_in=%p,", req->handle_in );
1390     fprintf( stderr, " event=%p", req->event );
1391 }
1392
1393 static void dump_free_console_request( const struct free_console_request *req )
1394 {
1395 }
1396
1397 static void dump_get_console_renderer_events_request( const struct get_console_renderer_events_request *req )
1398 {
1399     fprintf( stderr, " handle=%p", req->handle );
1400 }
1401
1402 static void dump_get_console_renderer_events_reply( const struct get_console_renderer_events_reply *req )
1403 {
1404     fprintf( stderr, " data=" );
1405     dump_varargs_bytes( cur_size );
1406 }
1407
1408 static void dump_open_console_request( const struct open_console_request *req )
1409 {
1410     fprintf( stderr, " from=%p,", req->from );
1411     fprintf( stderr, " access=%08x,", req->access );
1412     fprintf( stderr, " attributes=%08x,", req->attributes );
1413     fprintf( stderr, " share=%d", req->share );
1414 }
1415
1416 static void dump_open_console_reply( const struct open_console_reply *req )
1417 {
1418     fprintf( stderr, " handle=%p", req->handle );
1419 }
1420
1421 static void dump_get_console_wait_event_request( const struct get_console_wait_event_request *req )
1422 {
1423 }
1424
1425 static void dump_get_console_wait_event_reply( const struct get_console_wait_event_reply *req )
1426 {
1427     fprintf( stderr, " handle=%p", req->handle );
1428 }
1429
1430 static void dump_get_console_mode_request( const struct get_console_mode_request *req )
1431 {
1432     fprintf( stderr, " handle=%p", req->handle );
1433 }
1434
1435 static void dump_get_console_mode_reply( const struct get_console_mode_reply *req )
1436 {
1437     fprintf( stderr, " mode=%d", req->mode );
1438 }
1439
1440 static void dump_set_console_mode_request( const struct set_console_mode_request *req )
1441 {
1442     fprintf( stderr, " handle=%p,", req->handle );
1443     fprintf( stderr, " mode=%d", req->mode );
1444 }
1445
1446 static void dump_set_console_input_info_request( const struct set_console_input_info_request *req )
1447 {
1448     fprintf( stderr, " handle=%p,", req->handle );
1449     fprintf( stderr, " mask=%d,", req->mask );
1450     fprintf( stderr, " active_sb=%p,", req->active_sb );
1451     fprintf( stderr, " history_mode=%d,", req->history_mode );
1452     fprintf( stderr, " history_size=%d,", req->history_size );
1453     fprintf( stderr, " edition_mode=%d,", req->edition_mode );
1454     fprintf( stderr, " title=" );
1455     dump_varargs_unicode_str( cur_size );
1456 }
1457
1458 static void dump_get_console_input_info_request( const struct get_console_input_info_request *req )
1459 {
1460     fprintf( stderr, " handle=%p", req->handle );
1461 }
1462
1463 static void dump_get_console_input_info_reply( const struct get_console_input_info_reply *req )
1464 {
1465     fprintf( stderr, " history_mode=%d,", req->history_mode );
1466     fprintf( stderr, " history_size=%d,", req->history_size );
1467     fprintf( stderr, " history_index=%d,", req->history_index );
1468     fprintf( stderr, " edition_mode=%d,", req->edition_mode );
1469     fprintf( stderr, " title=" );
1470     dump_varargs_unicode_str( cur_size );
1471 }
1472
1473 static void dump_append_console_input_history_request( const struct append_console_input_history_request *req )
1474 {
1475     fprintf( stderr, " handle=%p,", req->handle );
1476     fprintf( stderr, " line=" );
1477     dump_varargs_unicode_str( cur_size );
1478 }
1479
1480 static void dump_get_console_input_history_request( const struct get_console_input_history_request *req )
1481 {
1482     fprintf( stderr, " handle=%p,", req->handle );
1483     fprintf( stderr, " index=%d", req->index );
1484 }
1485
1486 static void dump_get_console_input_history_reply( const struct get_console_input_history_reply *req )
1487 {
1488     fprintf( stderr, " total=%d,", req->total );
1489     fprintf( stderr, " line=" );
1490     dump_varargs_unicode_str( cur_size );
1491 }
1492
1493 static void dump_create_console_output_request( const struct create_console_output_request *req )
1494 {
1495     fprintf( stderr, " handle_in=%p,", req->handle_in );
1496     fprintf( stderr, " access=%08x,", req->access );
1497     fprintf( stderr, " attributes=%08x,", req->attributes );
1498     fprintf( stderr, " share=%08x", req->share );
1499 }
1500
1501 static void dump_create_console_output_reply( const struct create_console_output_reply *req )
1502 {
1503     fprintf( stderr, " handle_out=%p", req->handle_out );
1504 }
1505
1506 static void dump_set_console_output_info_request( const struct set_console_output_info_request *req )
1507 {
1508     fprintf( stderr, " handle=%p,", req->handle );
1509     fprintf( stderr, " mask=%d,", req->mask );
1510     fprintf( stderr, " cursor_size=%d,", req->cursor_size );
1511     fprintf( stderr, " cursor_visible=%d,", req->cursor_visible );
1512     fprintf( stderr, " cursor_x=%d,", req->cursor_x );
1513     fprintf( stderr, " cursor_y=%d,", req->cursor_y );
1514     fprintf( stderr, " width=%d,", req->width );
1515     fprintf( stderr, " height=%d,", req->height );
1516     fprintf( stderr, " attr=%d,", req->attr );
1517     fprintf( stderr, " win_left=%d,", req->win_left );
1518     fprintf( stderr, " win_top=%d,", req->win_top );
1519     fprintf( stderr, " win_right=%d,", req->win_right );
1520     fprintf( stderr, " win_bottom=%d,", req->win_bottom );
1521     fprintf( stderr, " max_width=%d,", req->max_width );
1522     fprintf( stderr, " max_height=%d", req->max_height );
1523 }
1524
1525 static void dump_get_console_output_info_request( const struct get_console_output_info_request *req )
1526 {
1527     fprintf( stderr, " handle=%p", req->handle );
1528 }
1529
1530 static void dump_get_console_output_info_reply( const struct get_console_output_info_reply *req )
1531 {
1532     fprintf( stderr, " cursor_size=%d,", req->cursor_size );
1533     fprintf( stderr, " cursor_visible=%d,", req->cursor_visible );
1534     fprintf( stderr, " cursor_x=%d,", req->cursor_x );
1535     fprintf( stderr, " cursor_y=%d,", req->cursor_y );
1536     fprintf( stderr, " width=%d,", req->width );
1537     fprintf( stderr, " height=%d,", req->height );
1538     fprintf( stderr, " attr=%d,", req->attr );
1539     fprintf( stderr, " win_left=%d,", req->win_left );
1540     fprintf( stderr, " win_top=%d,", req->win_top );
1541     fprintf( stderr, " win_right=%d,", req->win_right );
1542     fprintf( stderr, " win_bottom=%d,", req->win_bottom );
1543     fprintf( stderr, " max_width=%d,", req->max_width );
1544     fprintf( stderr, " max_height=%d", req->max_height );
1545 }
1546
1547 static void dump_write_console_input_request( const struct write_console_input_request *req )
1548 {
1549     fprintf( stderr, " handle=%p,", req->handle );
1550     fprintf( stderr, " rec=" );
1551     dump_varargs_input_records( cur_size );
1552 }
1553
1554 static void dump_write_console_input_reply( const struct write_console_input_reply *req )
1555 {
1556     fprintf( stderr, " written=%d", req->written );
1557 }
1558
1559 static void dump_read_console_input_request( const struct read_console_input_request *req )
1560 {
1561     fprintf( stderr, " handle=%p,", req->handle );
1562     fprintf( stderr, " flush=%d", req->flush );
1563 }
1564
1565 static void dump_read_console_input_reply( const struct read_console_input_reply *req )
1566 {
1567     fprintf( stderr, " read=%d,", req->read );
1568     fprintf( stderr, " rec=" );
1569     dump_varargs_input_records( cur_size );
1570 }
1571
1572 static void dump_write_console_output_request( const struct write_console_output_request *req )
1573 {
1574     fprintf( stderr, " handle=%p,", req->handle );
1575     fprintf( stderr, " x=%d,", req->x );
1576     fprintf( stderr, " y=%d,", req->y );
1577     fprintf( stderr, " mode=%d,", req->mode );
1578     fprintf( stderr, " wrap=%d,", req->wrap );
1579     fprintf( stderr, " data=" );
1580     dump_varargs_bytes( cur_size );
1581 }
1582
1583 static void dump_write_console_output_reply( const struct write_console_output_reply *req )
1584 {
1585     fprintf( stderr, " written=%d,", req->written );
1586     fprintf( stderr, " width=%d,", req->width );
1587     fprintf( stderr, " height=%d", req->height );
1588 }
1589
1590 static void dump_fill_console_output_request( const struct fill_console_output_request *req )
1591 {
1592     fprintf( stderr, " handle=%p,", req->handle );
1593     fprintf( stderr, " x=%d,", req->x );
1594     fprintf( stderr, " y=%d,", req->y );
1595     fprintf( stderr, " mode=%d,", req->mode );
1596     fprintf( stderr, " count=%d,", req->count );
1597     fprintf( stderr, " wrap=%d,", req->wrap );
1598     fprintf( stderr, " data=" );
1599     dump_char_info( &req->data );
1600 }
1601
1602 static void dump_fill_console_output_reply( const struct fill_console_output_reply *req )
1603 {
1604     fprintf( stderr, " written=%d", req->written );
1605 }
1606
1607 static void dump_read_console_output_request( const struct read_console_output_request *req )
1608 {
1609     fprintf( stderr, " handle=%p,", req->handle );
1610     fprintf( stderr, " x=%d,", req->x );
1611     fprintf( stderr, " y=%d,", req->y );
1612     fprintf( stderr, " mode=%d,", req->mode );
1613     fprintf( stderr, " wrap=%d", req->wrap );
1614 }
1615
1616 static void dump_read_console_output_reply( const struct read_console_output_reply *req )
1617 {
1618     fprintf( stderr, " width=%d,", req->width );
1619     fprintf( stderr, " height=%d,", req->height );
1620     fprintf( stderr, " data=" );
1621     dump_varargs_bytes( cur_size );
1622 }
1623
1624 static void dump_move_console_output_request( const struct move_console_output_request *req )
1625 {
1626     fprintf( stderr, " handle=%p,", req->handle );
1627     fprintf( stderr, " x_src=%d,", req->x_src );
1628     fprintf( stderr, " y_src=%d,", req->y_src );
1629     fprintf( stderr, " x_dst=%d,", req->x_dst );
1630     fprintf( stderr, " y_dst=%d,", req->y_dst );
1631     fprintf( stderr, " w=%d,", req->w );
1632     fprintf( stderr, " h=%d", req->h );
1633 }
1634
1635 static void dump_send_console_signal_request( const struct send_console_signal_request *req )
1636 {
1637     fprintf( stderr, " signal=%d,", req->signal );
1638     fprintf( stderr, " group_id=%04x", req->group_id );
1639 }
1640
1641 static void dump_read_directory_changes_request( const struct read_directory_changes_request *req )
1642 {
1643     fprintf( stderr, " filter=%08x,", req->filter );
1644     fprintf( stderr, " handle=%p,", req->handle );
1645     fprintf( stderr, " subtree=%d,", req->subtree );
1646     fprintf( stderr, " want_data=%d,", req->want_data );
1647     fprintf( stderr, " async=" );
1648     dump_async_data( &req->async );
1649 }
1650
1651 static void dump_read_change_request( const struct read_change_request *req )
1652 {
1653     fprintf( stderr, " handle=%p", req->handle );
1654 }
1655
1656 static void dump_read_change_reply( const struct read_change_reply *req )
1657 {
1658     fprintf( stderr, " action=%d,", req->action );
1659     fprintf( stderr, " name=" );
1660     dump_varargs_string( cur_size );
1661 }
1662
1663 static void dump_create_mapping_request( const struct create_mapping_request *req )
1664 {
1665     fprintf( stderr, " access=%08x,", req->access );
1666     fprintf( stderr, " attributes=%08x,", req->attributes );
1667     fprintf( stderr, " rootdir=%p,", req->rootdir );
1668     fprintf( stderr, " size_high=%d,", req->size_high );
1669     fprintf( stderr, " size_low=%d,", req->size_low );
1670     fprintf( stderr, " protect=%d,", req->protect );
1671     fprintf( stderr, " file_handle=%p,", req->file_handle );
1672     fprintf( stderr, " name=" );
1673     dump_varargs_unicode_str( cur_size );
1674 }
1675
1676 static void dump_create_mapping_reply( const struct create_mapping_reply *req )
1677 {
1678     fprintf( stderr, " handle=%p", req->handle );
1679 }
1680
1681 static void dump_open_mapping_request( const struct open_mapping_request *req )
1682 {
1683     fprintf( stderr, " access=%08x,", req->access );
1684     fprintf( stderr, " attributes=%08x,", req->attributes );
1685     fprintf( stderr, " rootdir=%p,", req->rootdir );
1686     fprintf( stderr, " name=" );
1687     dump_varargs_unicode_str( cur_size );
1688 }
1689
1690 static void dump_open_mapping_reply( const struct open_mapping_reply *req )
1691 {
1692     fprintf( stderr, " handle=%p", req->handle );
1693 }
1694
1695 static void dump_get_mapping_info_request( const struct get_mapping_info_request *req )
1696 {
1697     fprintf( stderr, " handle=%p", req->handle );
1698 }
1699
1700 static void dump_get_mapping_info_reply( const struct get_mapping_info_reply *req )
1701 {
1702     fprintf( stderr, " size_high=%d,", req->size_high );
1703     fprintf( stderr, " size_low=%d,", req->size_low );
1704     fprintf( stderr, " protect=%d,", req->protect );
1705     fprintf( stderr, " header_size=%d,", req->header_size );
1706     fprintf( stderr, " base=%p,", req->base );
1707     fprintf( stderr, " mapping=%p,", req->mapping );
1708     fprintf( stderr, " shared_file=%p,", req->shared_file );
1709     fprintf( stderr, " shared_size=%d", req->shared_size );
1710 }
1711
1712 static void dump_create_snapshot_request( const struct create_snapshot_request *req )
1713 {
1714     fprintf( stderr, " attributes=%08x,", req->attributes );
1715     fprintf( stderr, " flags=%d,", req->flags );
1716     fprintf( stderr, " pid=%04x", req->pid );
1717 }
1718
1719 static void dump_create_snapshot_reply( const struct create_snapshot_reply *req )
1720 {
1721     fprintf( stderr, " handle=%p", req->handle );
1722 }
1723
1724 static void dump_next_process_request( const struct next_process_request *req )
1725 {
1726     fprintf( stderr, " handle=%p,", req->handle );
1727     fprintf( stderr, " reset=%d", req->reset );
1728 }
1729
1730 static void dump_next_process_reply( const struct next_process_reply *req )
1731 {
1732     fprintf( stderr, " count=%d,", req->count );
1733     fprintf( stderr, " pid=%04x,", req->pid );
1734     fprintf( stderr, " ppid=%04x,", req->ppid );
1735     fprintf( stderr, " heap=%p,", req->heap );
1736     fprintf( stderr, " module=%p,", req->module );
1737     fprintf( stderr, " threads=%d,", req->threads );
1738     fprintf( stderr, " priority=%d,", req->priority );
1739     fprintf( stderr, " handles=%d,", req->handles );
1740     fprintf( stderr, " filename=" );
1741     dump_varargs_unicode_str( cur_size );
1742 }
1743
1744 static void dump_next_thread_request( const struct next_thread_request *req )
1745 {
1746     fprintf( stderr, " handle=%p,", req->handle );
1747     fprintf( stderr, " reset=%d", req->reset );
1748 }
1749
1750 static void dump_next_thread_reply( const struct next_thread_reply *req )
1751 {
1752     fprintf( stderr, " count=%d,", req->count );
1753     fprintf( stderr, " pid=%04x,", req->pid );
1754     fprintf( stderr, " tid=%04x,", req->tid );
1755     fprintf( stderr, " base_pri=%d,", req->base_pri );
1756     fprintf( stderr, " delta_pri=%d", req->delta_pri );
1757 }
1758
1759 static void dump_next_module_request( const struct next_module_request *req )
1760 {
1761     fprintf( stderr, " handle=%p,", req->handle );
1762     fprintf( stderr, " reset=%d", req->reset );
1763 }
1764
1765 static void dump_next_module_reply( const struct next_module_reply *req )
1766 {
1767     fprintf( stderr, " pid=%04x,", req->pid );
1768     fprintf( stderr, " base=%p,", req->base );
1769     fprintf( stderr, " size=%lu,", (unsigned long)req->size );
1770     fprintf( stderr, " filename=" );
1771     dump_varargs_unicode_str( cur_size );
1772 }
1773
1774 static void dump_wait_debug_event_request( const struct wait_debug_event_request *req )
1775 {
1776     fprintf( stderr, " get_handle=%d", req->get_handle );
1777 }
1778
1779 static void dump_wait_debug_event_reply( const struct wait_debug_event_reply *req )
1780 {
1781     fprintf( stderr, " pid=%04x,", req->pid );
1782     fprintf( stderr, " tid=%04x,", req->tid );
1783     fprintf( stderr, " wait=%p,", req->wait );
1784     fprintf( stderr, " event=" );
1785     dump_varargs_debug_event( cur_size );
1786 }
1787
1788 static void dump_queue_exception_event_request( const struct queue_exception_event_request *req )
1789 {
1790     fprintf( stderr, " first=%d,", req->first );
1791     fprintf( stderr, " record=" );
1792     dump_varargs_exc_event( cur_size );
1793 }
1794
1795 static void dump_queue_exception_event_reply( const struct queue_exception_event_reply *req )
1796 {
1797     fprintf( stderr, " handle=%p", req->handle );
1798 }
1799
1800 static void dump_get_exception_status_request( const struct get_exception_status_request *req )
1801 {
1802     fprintf( stderr, " handle=%p", req->handle );
1803 }
1804
1805 static void dump_get_exception_status_reply( const struct get_exception_status_reply *req )
1806 {
1807     fprintf( stderr, " context=" );
1808     dump_varargs_context( cur_size );
1809 }
1810
1811 static void dump_output_debug_string_request( const struct output_debug_string_request *req )
1812 {
1813     fprintf( stderr, " string=%p,", req->string );
1814     fprintf( stderr, " unicode=%d,", req->unicode );
1815     fprintf( stderr, " length=%d", req->length );
1816 }
1817
1818 static void dump_continue_debug_event_request( const struct continue_debug_event_request *req )
1819 {
1820     fprintf( stderr, " pid=%04x,", req->pid );
1821     fprintf( stderr, " tid=%04x,", req->tid );
1822     fprintf( stderr, " status=%d", req->status );
1823 }
1824
1825 static void dump_debug_process_request( const struct debug_process_request *req )
1826 {
1827     fprintf( stderr, " pid=%04x,", req->pid );
1828     fprintf( stderr, " attach=%d", req->attach );
1829 }
1830
1831 static void dump_debug_break_request( const struct debug_break_request *req )
1832 {
1833     fprintf( stderr, " handle=%p", req->handle );
1834 }
1835
1836 static void dump_debug_break_reply( const struct debug_break_reply *req )
1837 {
1838     fprintf( stderr, " self=%d", req->self );
1839 }
1840
1841 static void dump_set_debugger_kill_on_exit_request( const struct set_debugger_kill_on_exit_request *req )
1842 {
1843     fprintf( stderr, " kill_on_exit=%d", req->kill_on_exit );
1844 }
1845
1846 static void dump_read_process_memory_request( const struct read_process_memory_request *req )
1847 {
1848     fprintf( stderr, " handle=%p,", req->handle );
1849     fprintf( stderr, " addr=%p", req->addr );
1850 }
1851
1852 static void dump_read_process_memory_reply( const struct read_process_memory_reply *req )
1853 {
1854     fprintf( stderr, " data=" );
1855     dump_varargs_bytes( cur_size );
1856 }
1857
1858 static void dump_write_process_memory_request( const struct write_process_memory_request *req )
1859 {
1860     fprintf( stderr, " handle=%p,", req->handle );
1861     fprintf( stderr, " addr=%p,", req->addr );
1862     fprintf( stderr, " data=" );
1863     dump_varargs_bytes( cur_size );
1864 }
1865
1866 static void dump_create_key_request( const struct create_key_request *req )
1867 {
1868     fprintf( stderr, " parent=%p,", req->parent );
1869     fprintf( stderr, " access=%08x,", req->access );
1870     fprintf( stderr, " attributes=%08x,", req->attributes );
1871     fprintf( stderr, " options=%08x,", req->options );
1872     fprintf( stderr, " modif=%ld,", (long)req->modif );
1873     fprintf( stderr, " namelen=%u,", req->namelen );
1874     fprintf( stderr, " name=" );
1875     dump_varargs_unicode_str( min(cur_size,req->namelen) );
1876     fputc( ',', stderr );
1877     fprintf( stderr, " class=" );
1878     dump_varargs_unicode_str( cur_size );
1879 }
1880
1881 static void dump_create_key_reply( const struct create_key_reply *req )
1882 {
1883     fprintf( stderr, " hkey=%p,", req->hkey );
1884     fprintf( stderr, " created=%d", req->created );
1885 }
1886
1887 static void dump_open_key_request( const struct open_key_request *req )
1888 {
1889     fprintf( stderr, " parent=%p,", req->parent );
1890     fprintf( stderr, " access=%08x,", req->access );
1891     fprintf( stderr, " attributes=%08x,", req->attributes );
1892     fprintf( stderr, " name=" );
1893     dump_varargs_unicode_str( cur_size );
1894 }
1895
1896 static void dump_open_key_reply( const struct open_key_reply *req )
1897 {
1898     fprintf( stderr, " hkey=%p", req->hkey );
1899 }
1900
1901 static void dump_delete_key_request( const struct delete_key_request *req )
1902 {
1903     fprintf( stderr, " hkey=%p", req->hkey );
1904 }
1905
1906 static void dump_flush_key_request( const struct flush_key_request *req )
1907 {
1908     fprintf( stderr, " hkey=%p", req->hkey );
1909 }
1910
1911 static void dump_enum_key_request( const struct enum_key_request *req )
1912 {
1913     fprintf( stderr, " hkey=%p,", req->hkey );
1914     fprintf( stderr, " index=%d,", req->index );
1915     fprintf( stderr, " info_class=%d", req->info_class );
1916 }
1917
1918 static void dump_enum_key_reply( const struct enum_key_reply *req )
1919 {
1920     fprintf( stderr, " subkeys=%d,", req->subkeys );
1921     fprintf( stderr, " max_subkey=%d,", req->max_subkey );
1922     fprintf( stderr, " max_class=%d,", req->max_class );
1923     fprintf( stderr, " values=%d,", req->values );
1924     fprintf( stderr, " max_value=%d,", req->max_value );
1925     fprintf( stderr, " max_data=%d,", req->max_data );
1926     fprintf( stderr, " modif=%ld,", (long)req->modif );
1927     fprintf( stderr, " total=%u,", req->total );
1928     fprintf( stderr, " namelen=%u,", req->namelen );
1929     fprintf( stderr, " name=" );
1930     dump_varargs_unicode_str( min(cur_size,req->namelen) );
1931     fputc( ',', stderr );
1932     fprintf( stderr, " class=" );
1933     dump_varargs_unicode_str( cur_size );
1934 }
1935
1936 static void dump_set_key_value_request( const struct set_key_value_request *req )
1937 {
1938     fprintf( stderr, " hkey=%p,", req->hkey );
1939     fprintf( stderr, " type=%d,", req->type );
1940     fprintf( stderr, " namelen=%u,", req->namelen );
1941     fprintf( stderr, " name=" );
1942     dump_varargs_unicode_str( min(cur_size,req->namelen) );
1943     fputc( ',', stderr );
1944     fprintf( stderr, " data=" );
1945     dump_varargs_bytes( cur_size );
1946 }
1947
1948 static void dump_get_key_value_request( const struct get_key_value_request *req )
1949 {
1950     fprintf( stderr, " hkey=%p,", req->hkey );
1951     fprintf( stderr, " name=" );
1952     dump_varargs_unicode_str( cur_size );
1953 }
1954
1955 static void dump_get_key_value_reply( const struct get_key_value_reply *req )
1956 {
1957     fprintf( stderr, " type=%d,", req->type );
1958     fprintf( stderr, " total=%u,", req->total );
1959     fprintf( stderr, " data=" );
1960     dump_varargs_bytes( cur_size );
1961 }
1962
1963 static void dump_enum_key_value_request( const struct enum_key_value_request *req )
1964 {
1965     fprintf( stderr, " hkey=%p,", req->hkey );
1966     fprintf( stderr, " index=%d,", req->index );
1967     fprintf( stderr, " info_class=%d", req->info_class );
1968 }
1969
1970 static void dump_enum_key_value_reply( const struct enum_key_value_reply *req )
1971 {
1972     fprintf( stderr, " type=%d,", req->type );
1973     fprintf( stderr, " total=%u,", req->total );
1974     fprintf( stderr, " namelen=%u,", req->namelen );
1975     fprintf( stderr, " name=" );
1976     dump_varargs_unicode_str( min(cur_size,req->namelen) );
1977     fputc( ',', stderr );
1978     fprintf( stderr, " data=" );
1979     dump_varargs_bytes( cur_size );
1980 }
1981
1982 static void dump_delete_key_value_request( const struct delete_key_value_request *req )
1983 {
1984     fprintf( stderr, " hkey=%p,", req->hkey );
1985     fprintf( stderr, " name=" );
1986     dump_varargs_unicode_str( cur_size );
1987 }
1988
1989 static void dump_load_registry_request( const struct load_registry_request *req )
1990 {
1991     fprintf( stderr, " hkey=%p,", req->hkey );
1992     fprintf( stderr, " file=%p,", req->file );
1993     fprintf( stderr, " name=" );
1994     dump_varargs_unicode_str( cur_size );
1995 }
1996
1997 static void dump_unload_registry_request( const struct unload_registry_request *req )
1998 {
1999     fprintf( stderr, " hkey=%p", req->hkey );
2000 }
2001
2002 static void dump_save_registry_request( const struct save_registry_request *req )
2003 {
2004     fprintf( stderr, " hkey=%p,", req->hkey );
2005     fprintf( stderr, " file=%p", req->file );
2006 }
2007
2008 static void dump_set_registry_notification_request( const struct set_registry_notification_request *req )
2009 {
2010     fprintf( stderr, " hkey=%p,", req->hkey );
2011     fprintf( stderr, " event=%p,", req->event );
2012     fprintf( stderr, " subtree=%d,", req->subtree );
2013     fprintf( stderr, " filter=%08x", req->filter );
2014 }
2015
2016 static void dump_create_timer_request( const struct create_timer_request *req )
2017 {
2018     fprintf( stderr, " access=%08x,", req->access );
2019     fprintf( stderr, " attributes=%08x,", req->attributes );
2020     fprintf( stderr, " rootdir=%p,", req->rootdir );
2021     fprintf( stderr, " manual=%d,", req->manual );
2022     fprintf( stderr, " name=" );
2023     dump_varargs_unicode_str( cur_size );
2024 }
2025
2026 static void dump_create_timer_reply( const struct create_timer_reply *req )
2027 {
2028     fprintf( stderr, " handle=%p", req->handle );
2029 }
2030
2031 static void dump_open_timer_request( const struct open_timer_request *req )
2032 {
2033     fprintf( stderr, " access=%08x,", req->access );
2034     fprintf( stderr, " attributes=%08x,", req->attributes );
2035     fprintf( stderr, " rootdir=%p,", req->rootdir );
2036     fprintf( stderr, " name=" );
2037     dump_varargs_unicode_str( cur_size );
2038 }
2039
2040 static void dump_open_timer_reply( const struct open_timer_reply *req )
2041 {
2042     fprintf( stderr, " handle=%p", req->handle );
2043 }
2044
2045 static void dump_set_timer_request( const struct set_timer_request *req )
2046 {
2047     fprintf( stderr, " handle=%p,", req->handle );
2048     fprintf( stderr, " expire=" );
2049     dump_timeout( &req->expire );
2050     fprintf( stderr, "," );
2051     fprintf( stderr, " period=%d,", req->period );
2052     fprintf( stderr, " callback=%p,", req->callback );
2053     fprintf( stderr, " arg=%p", req->arg );
2054 }
2055
2056 static void dump_set_timer_reply( const struct set_timer_reply *req )
2057 {
2058     fprintf( stderr, " signaled=%d", req->signaled );
2059 }
2060
2061 static void dump_cancel_timer_request( const struct cancel_timer_request *req )
2062 {
2063     fprintf( stderr, " handle=%p", req->handle );
2064 }
2065
2066 static void dump_cancel_timer_reply( const struct cancel_timer_reply *req )
2067 {
2068     fprintf( stderr, " signaled=%d", req->signaled );
2069 }
2070
2071 static void dump_get_timer_info_request( const struct get_timer_info_request *req )
2072 {
2073     fprintf( stderr, " handle=%p", req->handle );
2074 }
2075
2076 static void dump_get_timer_info_reply( const struct get_timer_info_reply *req )
2077 {
2078     fprintf( stderr, " when=" );
2079     dump_timeout( &req->when );
2080     fprintf( stderr, "," );
2081     fprintf( stderr, " signaled=%d", req->signaled );
2082 }
2083
2084 static void dump_get_thread_context_request( const struct get_thread_context_request *req )
2085 {
2086     fprintf( stderr, " handle=%p,", req->handle );
2087     fprintf( stderr, " flags=%08x,", req->flags );
2088     fprintf( stderr, " suspend=%d", req->suspend );
2089 }
2090
2091 static void dump_get_thread_context_reply( const struct get_thread_context_reply *req )
2092 {
2093     fprintf( stderr, " self=%d,", req->self );
2094     fprintf( stderr, " context=" );
2095     dump_varargs_context( cur_size );
2096 }
2097
2098 static void dump_set_thread_context_request( const struct set_thread_context_request *req )
2099 {
2100     fprintf( stderr, " handle=%p,", req->handle );
2101     fprintf( stderr, " flags=%08x,", req->flags );
2102     fprintf( stderr, " suspend=%d,", req->suspend );
2103     fprintf( stderr, " context=" );
2104     dump_varargs_context( cur_size );
2105 }
2106
2107 static void dump_set_thread_context_reply( const struct set_thread_context_reply *req )
2108 {
2109     fprintf( stderr, " self=%d", req->self );
2110 }
2111
2112 static void dump_get_selector_entry_request( const struct get_selector_entry_request *req )
2113 {
2114     fprintf( stderr, " handle=%p,", req->handle );
2115     fprintf( stderr, " entry=%d", req->entry );
2116 }
2117
2118 static void dump_get_selector_entry_reply( const struct get_selector_entry_reply *req )
2119 {
2120     fprintf( stderr, " base=%08x,", req->base );
2121     fprintf( stderr, " limit=%08x,", req->limit );
2122     fprintf( stderr, " flags=%02x", req->flags );
2123 }
2124
2125 static void dump_add_atom_request( const struct add_atom_request *req )
2126 {
2127     fprintf( stderr, " table=%p,", req->table );
2128     fprintf( stderr, " name=" );
2129     dump_varargs_unicode_str( cur_size );
2130 }
2131
2132 static void dump_add_atom_reply( const struct add_atom_reply *req )
2133 {
2134     fprintf( stderr, " atom=%04x", req->atom );
2135 }
2136
2137 static void dump_delete_atom_request( const struct delete_atom_request *req )
2138 {
2139     fprintf( stderr, " table=%p,", req->table );
2140     fprintf( stderr, " atom=%04x", req->atom );
2141 }
2142
2143 static void dump_find_atom_request( const struct find_atom_request *req )
2144 {
2145     fprintf( stderr, " table=%p,", req->table );
2146     fprintf( stderr, " name=" );
2147     dump_varargs_unicode_str( cur_size );
2148 }
2149
2150 static void dump_find_atom_reply( const struct find_atom_reply *req )
2151 {
2152     fprintf( stderr, " atom=%04x", req->atom );
2153 }
2154
2155 static void dump_get_atom_information_request( const struct get_atom_information_request *req )
2156 {
2157     fprintf( stderr, " table=%p,", req->table );
2158     fprintf( stderr, " atom=%04x", req->atom );
2159 }
2160
2161 static void dump_get_atom_information_reply( const struct get_atom_information_reply *req )
2162 {
2163     fprintf( stderr, " count=%d,", req->count );
2164     fprintf( stderr, " pinned=%d,", req->pinned );
2165     fprintf( stderr, " total=%u,", req->total );
2166     fprintf( stderr, " name=" );
2167     dump_varargs_unicode_str( cur_size );
2168 }
2169
2170 static void dump_set_atom_information_request( const struct set_atom_information_request *req )
2171 {
2172     fprintf( stderr, " table=%p,", req->table );
2173     fprintf( stderr, " atom=%04x,", req->atom );
2174     fprintf( stderr, " pinned=%d", req->pinned );
2175 }
2176
2177 static void dump_empty_atom_table_request( const struct empty_atom_table_request *req )
2178 {
2179     fprintf( stderr, " table=%p,", req->table );
2180     fprintf( stderr, " if_pinned=%d", req->if_pinned );
2181 }
2182
2183 static void dump_init_atom_table_request( const struct init_atom_table_request *req )
2184 {
2185     fprintf( stderr, " entries=%d", req->entries );
2186 }
2187
2188 static void dump_init_atom_table_reply( const struct init_atom_table_reply *req )
2189 {
2190     fprintf( stderr, " table=%p", req->table );
2191 }
2192
2193 static void dump_get_msg_queue_request( const struct get_msg_queue_request *req )
2194 {
2195 }
2196
2197 static void dump_get_msg_queue_reply( const struct get_msg_queue_reply *req )
2198 {
2199     fprintf( stderr, " handle=%p", req->handle );
2200 }
2201
2202 static void dump_set_queue_fd_request( const struct set_queue_fd_request *req )
2203 {
2204     fprintf( stderr, " handle=%p", req->handle );
2205 }
2206
2207 static void dump_set_queue_mask_request( const struct set_queue_mask_request *req )
2208 {
2209     fprintf( stderr, " wake_mask=%08x,", req->wake_mask );
2210     fprintf( stderr, " changed_mask=%08x,", req->changed_mask );
2211     fprintf( stderr, " skip_wait=%d", req->skip_wait );
2212 }
2213
2214 static void dump_set_queue_mask_reply( const struct set_queue_mask_reply *req )
2215 {
2216     fprintf( stderr, " wake_bits=%08x,", req->wake_bits );
2217     fprintf( stderr, " changed_bits=%08x", req->changed_bits );
2218 }
2219
2220 static void dump_get_queue_status_request( const struct get_queue_status_request *req )
2221 {
2222     fprintf( stderr, " clear=%d", req->clear );
2223 }
2224
2225 static void dump_get_queue_status_reply( const struct get_queue_status_reply *req )
2226 {
2227     fprintf( stderr, " wake_bits=%08x,", req->wake_bits );
2228     fprintf( stderr, " changed_bits=%08x", req->changed_bits );
2229 }
2230
2231 static void dump_get_process_idle_event_request( const struct get_process_idle_event_request *req )
2232 {
2233     fprintf( stderr, " handle=%p", req->handle );
2234 }
2235
2236 static void dump_get_process_idle_event_reply( const struct get_process_idle_event_reply *req )
2237 {
2238     fprintf( stderr, " event=%p", req->event );
2239 }
2240
2241 static void dump_send_message_request( const struct send_message_request *req )
2242 {
2243     fprintf( stderr, " id=%04x,", req->id );
2244     fprintf( stderr, " type=%d,", req->type );
2245     fprintf( stderr, " flags=%d,", req->flags );
2246     fprintf( stderr, " win=%p,", req->win );
2247     fprintf( stderr, " msg=%08x,", req->msg );
2248     fprintf( stderr, " wparam=%lx,", req->wparam );
2249     fprintf( stderr, " lparam=%lx,", req->lparam );
2250     fprintf( stderr, " timeout=" );
2251     dump_timeout( &req->timeout );
2252     fprintf( stderr, "," );
2253     fprintf( stderr, " data=" );
2254     dump_varargs_message_data( cur_size );
2255 }
2256
2257 static void dump_post_quit_message_request( const struct post_quit_message_request *req )
2258 {
2259     fprintf( stderr, " exit_code=%d", req->exit_code );
2260 }
2261
2262 static void dump_send_hardware_message_request( const struct send_hardware_message_request *req )
2263 {
2264     fprintf( stderr, " id=%04x,", req->id );
2265     fprintf( stderr, " win=%p,", req->win );
2266     fprintf( stderr, " msg=%08x,", req->msg );
2267     fprintf( stderr, " time=%08x,", req->time );
2268     fprintf( stderr, " wparam=%lx,", req->wparam );
2269     fprintf( stderr, " lparam=%lx,", req->lparam );
2270     fprintf( stderr, " info=%lx,", req->info );
2271     fprintf( stderr, " x=%d,", req->x );
2272     fprintf( stderr, " y=%d", req->y );
2273 }
2274
2275 static void dump_get_message_request( const struct get_message_request *req )
2276 {
2277     fprintf( stderr, " flags=%08x,", req->flags );
2278     fprintf( stderr, " get_win=%p,", req->get_win );
2279     fprintf( stderr, " get_first=%08x,", req->get_first );
2280     fprintf( stderr, " get_last=%08x,", req->get_last );
2281     fprintf( stderr, " hw_id=%08x", req->hw_id );
2282 }
2283
2284 static void dump_get_message_reply( const struct get_message_reply *req )
2285 {
2286     fprintf( stderr, " win=%p,", req->win );
2287     fprintf( stderr, " type=%d,", req->type );
2288     fprintf( stderr, " msg=%08x,", req->msg );
2289     fprintf( stderr, " wparam=%lx,", req->wparam );
2290     fprintf( stderr, " lparam=%lx,", req->lparam );
2291     fprintf( stderr, " info=%lx,", req->info );
2292     fprintf( stderr, " x=%d,", req->x );
2293     fprintf( stderr, " y=%d,", req->y );
2294     fprintf( stderr, " time=%08x,", req->time );
2295     fprintf( stderr, " hw_id=%08x,", req->hw_id );
2296     fprintf( stderr, " active_hooks=%08x,", req->active_hooks );
2297     fprintf( stderr, " total=%u,", req->total );
2298     fprintf( stderr, " data=" );
2299     dump_varargs_message_data( cur_size );
2300 }
2301
2302 static void dump_reply_message_request( const struct reply_message_request *req )
2303 {
2304     fprintf( stderr, " result=%08x,", req->result );
2305     fprintf( stderr, " remove=%d,", req->remove );
2306     fprintf( stderr, " data=" );
2307     dump_varargs_bytes( cur_size );
2308 }
2309
2310 static void dump_accept_hardware_message_request( const struct accept_hardware_message_request *req )
2311 {
2312     fprintf( stderr, " hw_id=%08x,", req->hw_id );
2313     fprintf( stderr, " remove=%d,", req->remove );
2314     fprintf( stderr, " new_win=%p", req->new_win );
2315 }
2316
2317 static void dump_get_message_reply_request( const struct get_message_reply_request *req )
2318 {
2319     fprintf( stderr, " cancel=%d", req->cancel );
2320 }
2321
2322 static void dump_get_message_reply_reply( const struct get_message_reply_reply *req )
2323 {
2324     fprintf( stderr, " result=%08x,", req->result );
2325     fprintf( stderr, " data=" );
2326     dump_varargs_bytes( cur_size );
2327 }
2328
2329 static void dump_set_win_timer_request( const struct set_win_timer_request *req )
2330 {
2331     fprintf( stderr, " win=%p,", req->win );
2332     fprintf( stderr, " msg=%08x,", req->msg );
2333     fprintf( stderr, " rate=%08x,", req->rate );
2334     fprintf( stderr, " id=%lx,", req->id );
2335     fprintf( stderr, " lparam=%lx", req->lparam );
2336 }
2337
2338 static void dump_set_win_timer_reply( const struct set_win_timer_reply *req )
2339 {
2340     fprintf( stderr, " id=%lx", req->id );
2341 }
2342
2343 static void dump_kill_win_timer_request( const struct kill_win_timer_request *req )
2344 {
2345     fprintf( stderr, " win=%p,", req->win );
2346     fprintf( stderr, " msg=%08x,", req->msg );
2347     fprintf( stderr, " id=%lx", req->id );
2348 }
2349
2350 static void dump_get_serial_info_request( const struct get_serial_info_request *req )
2351 {
2352     fprintf( stderr, " handle=%p", req->handle );
2353 }
2354
2355 static void dump_get_serial_info_reply( const struct get_serial_info_reply *req )
2356 {
2357     fprintf( stderr, " readinterval=%08x,", req->readinterval );
2358     fprintf( stderr, " readconst=%08x,", req->readconst );
2359     fprintf( stderr, " readmult=%08x,", req->readmult );
2360     fprintf( stderr, " writeconst=%08x,", req->writeconst );
2361     fprintf( stderr, " writemult=%08x,", req->writemult );
2362     fprintf( stderr, " eventmask=%08x", req->eventmask );
2363 }
2364
2365 static void dump_set_serial_info_request( const struct set_serial_info_request *req )
2366 {
2367     fprintf( stderr, " handle=%p,", req->handle );
2368     fprintf( stderr, " flags=%d,", req->flags );
2369     fprintf( stderr, " readinterval=%08x,", req->readinterval );
2370     fprintf( stderr, " readconst=%08x,", req->readconst );
2371     fprintf( stderr, " readmult=%08x,", req->readmult );
2372     fprintf( stderr, " writeconst=%08x,", req->writeconst );
2373     fprintf( stderr, " writemult=%08x,", req->writemult );
2374     fprintf( stderr, " eventmask=%08x", req->eventmask );
2375 }
2376
2377 static void dump_register_async_request( const struct register_async_request *req )
2378 {
2379     fprintf( stderr, " handle=%p,", req->handle );
2380     fprintf( stderr, " type=%d,", req->type );
2381     fprintf( stderr, " count=%d,", req->count );
2382     fprintf( stderr, " async=" );
2383     dump_async_data( &req->async );
2384 }
2385
2386 static void dump_cancel_async_request( const struct cancel_async_request *req )
2387 {
2388     fprintf( stderr, " handle=%p", req->handle );
2389 }
2390
2391 static void dump_ioctl_request( const struct ioctl_request *req )
2392 {
2393     fprintf( stderr, " handle=%p,", req->handle );
2394     fprintf( stderr, " code=%08x,", req->code );
2395     fprintf( stderr, " async=" );
2396     dump_async_data( &req->async );
2397     fprintf( stderr, "," );
2398     fprintf( stderr, " in_data=" );
2399     dump_varargs_bytes( cur_size );
2400 }
2401
2402 static void dump_ioctl_reply( const struct ioctl_reply *req )
2403 {
2404     fprintf( stderr, " out_data=" );
2405     dump_varargs_bytes( cur_size );
2406 }
2407
2408 static void dump_create_named_pipe_request( const struct create_named_pipe_request *req )
2409 {
2410     fprintf( stderr, " access=%08x,", req->access );
2411     fprintf( stderr, " attributes=%08x,", req->attributes );
2412     fprintf( stderr, " rootdir=%p,", req->rootdir );
2413     fprintf( stderr, " options=%08x,", req->options );
2414     fprintf( stderr, " flags=%08x,", req->flags );
2415     fprintf( stderr, " maxinstances=%08x,", req->maxinstances );
2416     fprintf( stderr, " outsize=%08x,", req->outsize );
2417     fprintf( stderr, " insize=%08x,", req->insize );
2418     fprintf( stderr, " timeout=" );
2419     dump_timeout( &req->timeout );
2420     fprintf( stderr, "," );
2421     fprintf( stderr, " name=" );
2422     dump_varargs_unicode_str( cur_size );
2423 }
2424
2425 static void dump_create_named_pipe_reply( const struct create_named_pipe_reply *req )
2426 {
2427     fprintf( stderr, " handle=%p", req->handle );
2428 }
2429
2430 static void dump_connect_named_pipe_request( const struct connect_named_pipe_request *req )
2431 {
2432     fprintf( stderr, " handle=%p,", req->handle );
2433     fprintf( stderr, " async=" );
2434     dump_async_data( &req->async );
2435 }
2436
2437 static void dump_wait_named_pipe_request( const struct wait_named_pipe_request *req )
2438 {
2439     fprintf( stderr, " handle=%p,", req->handle );
2440     fprintf( stderr, " async=" );
2441     dump_async_data( &req->async );
2442     fprintf( stderr, "," );
2443     fprintf( stderr, " timeout=" );
2444     dump_timeout( &req->timeout );
2445     fprintf( stderr, "," );
2446     fprintf( stderr, " name=" );
2447     dump_varargs_unicode_str( cur_size );
2448 }
2449
2450 static void dump_get_named_pipe_info_request( const struct get_named_pipe_info_request *req )
2451 {
2452     fprintf( stderr, " handle=%p", req->handle );
2453 }
2454
2455 static void dump_get_named_pipe_info_reply( const struct get_named_pipe_info_reply *req )
2456 {
2457     fprintf( stderr, " flags=%08x,", req->flags );
2458     fprintf( stderr, " maxinstances=%08x,", req->maxinstances );
2459     fprintf( stderr, " instances=%08x,", req->instances );
2460     fprintf( stderr, " outsize=%08x,", req->outsize );
2461     fprintf( stderr, " insize=%08x", req->insize );
2462 }
2463
2464 static void dump_create_window_request( const struct create_window_request *req )
2465 {
2466     fprintf( stderr, " parent=%p,", req->parent );
2467     fprintf( stderr, " owner=%p,", req->owner );
2468     fprintf( stderr, " atom=%04x,", req->atom );
2469     fprintf( stderr, " instance=%p", req->instance );
2470 }
2471
2472 static void dump_create_window_reply( const struct create_window_reply *req )
2473 {
2474     fprintf( stderr, " handle=%p,", req->handle );
2475     fprintf( stderr, " parent=%p,", req->parent );
2476     fprintf( stderr, " owner=%p,", req->owner );
2477     fprintf( stderr, " extra=%d,", req->extra );
2478     fprintf( stderr, " class_ptr=%p", req->class_ptr );
2479 }
2480
2481 static void dump_destroy_window_request( const struct destroy_window_request *req )
2482 {
2483     fprintf( stderr, " handle=%p", req->handle );
2484 }
2485
2486 static void dump_get_desktop_window_request( const struct get_desktop_window_request *req )
2487 {
2488     fprintf( stderr, " force=%d", req->force );
2489 }
2490
2491 static void dump_get_desktop_window_reply( const struct get_desktop_window_reply *req )
2492 {
2493     fprintf( stderr, " handle=%p", req->handle );
2494 }
2495
2496 static void dump_set_window_owner_request( const struct set_window_owner_request *req )
2497 {
2498     fprintf( stderr, " handle=%p,", req->handle );
2499     fprintf( stderr, " owner=%p", req->owner );
2500 }
2501
2502 static void dump_set_window_owner_reply( const struct set_window_owner_reply *req )
2503 {
2504     fprintf( stderr, " full_owner=%p,", req->full_owner );
2505     fprintf( stderr, " prev_owner=%p", req->prev_owner );
2506 }
2507
2508 static void dump_get_window_info_request( const struct get_window_info_request *req )
2509 {
2510     fprintf( stderr, " handle=%p", req->handle );
2511 }
2512
2513 static void dump_get_window_info_reply( const struct get_window_info_reply *req )
2514 {
2515     fprintf( stderr, " full_handle=%p,", req->full_handle );
2516     fprintf( stderr, " last_active=%p,", req->last_active );
2517     fprintf( stderr, " pid=%04x,", req->pid );
2518     fprintf( stderr, " tid=%04x,", req->tid );
2519     fprintf( stderr, " atom=%04x,", req->atom );
2520     fprintf( stderr, " is_unicode=%d", req->is_unicode );
2521 }
2522
2523 static void dump_set_window_info_request( const struct set_window_info_request *req )
2524 {
2525     fprintf( stderr, " flags=%08x,", req->flags );
2526     fprintf( stderr, " handle=%p,", req->handle );
2527     fprintf( stderr, " style=%08x,", req->style );
2528     fprintf( stderr, " ex_style=%08x,", req->ex_style );
2529     fprintf( stderr, " id=%08x,", req->id );
2530     fprintf( stderr, " is_unicode=%d,", req->is_unicode );
2531     fprintf( stderr, " instance=%p,", req->instance );
2532     fprintf( stderr, " user_data=%lx,", req->user_data );
2533     fprintf( stderr, " extra_offset=%d,", req->extra_offset );
2534     fprintf( stderr, " extra_size=%u,", req->extra_size );
2535     fprintf( stderr, " extra_value=%lx", req->extra_value );
2536 }
2537
2538 static void dump_set_window_info_reply( const struct set_window_info_reply *req )
2539 {
2540     fprintf( stderr, " old_style=%08x,", req->old_style );
2541     fprintf( stderr, " old_ex_style=%08x,", req->old_ex_style );
2542     fprintf( stderr, " old_id=%08x,", req->old_id );
2543     fprintf( stderr, " old_instance=%p,", req->old_instance );
2544     fprintf( stderr, " old_user_data=%lx,", req->old_user_data );
2545     fprintf( stderr, " old_extra_value=%lx", req->old_extra_value );
2546 }
2547
2548 static void dump_set_parent_request( const struct set_parent_request *req )
2549 {
2550     fprintf( stderr, " handle=%p,", req->handle );
2551     fprintf( stderr, " parent=%p", req->parent );
2552 }
2553
2554 static void dump_set_parent_reply( const struct set_parent_reply *req )
2555 {
2556     fprintf( stderr, " old_parent=%p,", req->old_parent );
2557     fprintf( stderr, " full_parent=%p", req->full_parent );
2558 }
2559
2560 static void dump_get_window_parents_request( const struct get_window_parents_request *req )
2561 {
2562     fprintf( stderr, " handle=%p", req->handle );
2563 }
2564
2565 static void dump_get_window_parents_reply( const struct get_window_parents_reply *req )
2566 {
2567     fprintf( stderr, " count=%d,", req->count );
2568     fprintf( stderr, " parents=" );
2569     dump_varargs_user_handles( cur_size );
2570 }
2571
2572 static void dump_get_window_children_request( const struct get_window_children_request *req )
2573 {
2574     fprintf( stderr, " parent=%p,", req->parent );
2575     fprintf( stderr, " atom=%04x,", req->atom );
2576     fprintf( stderr, " tid=%04x", req->tid );
2577 }
2578
2579 static void dump_get_window_children_reply( const struct get_window_children_reply *req )
2580 {
2581     fprintf( stderr, " count=%d,", req->count );
2582     fprintf( stderr, " children=" );
2583     dump_varargs_user_handles( cur_size );
2584 }
2585
2586 static void dump_get_window_children_from_point_request( const struct get_window_children_from_point_request *req )
2587 {
2588     fprintf( stderr, " parent=%p,", req->parent );
2589     fprintf( stderr, " x=%d,", req->x );
2590     fprintf( stderr, " y=%d", req->y );
2591 }
2592
2593 static void dump_get_window_children_from_point_reply( const struct get_window_children_from_point_reply *req )
2594 {
2595     fprintf( stderr, " count=%d,", req->count );
2596     fprintf( stderr, " children=" );
2597     dump_varargs_user_handles( cur_size );
2598 }
2599
2600 static void dump_get_window_tree_request( const struct get_window_tree_request *req )
2601 {
2602     fprintf( stderr, " handle=%p", req->handle );
2603 }
2604
2605 static void dump_get_window_tree_reply( const struct get_window_tree_reply *req )
2606 {
2607     fprintf( stderr, " parent=%p,", req->parent );
2608     fprintf( stderr, " owner=%p,", req->owner );
2609     fprintf( stderr, " next_sibling=%p,", req->next_sibling );
2610     fprintf( stderr, " prev_sibling=%p,", req->prev_sibling );
2611     fprintf( stderr, " first_sibling=%p,", req->first_sibling );
2612     fprintf( stderr, " last_sibling=%p,", req->last_sibling );
2613     fprintf( stderr, " first_child=%p,", req->first_child );
2614     fprintf( stderr, " last_child=%p", req->last_child );
2615 }
2616
2617 static void dump_set_window_pos_request( const struct set_window_pos_request *req )
2618 {
2619     fprintf( stderr, " flags=%08x,", req->flags );
2620     fprintf( stderr, " handle=%p,", req->handle );
2621     fprintf( stderr, " previous=%p,", req->previous );
2622     fprintf( stderr, " window=" );
2623     dump_rectangle( &req->window );
2624     fprintf( stderr, "," );
2625     fprintf( stderr, " client=" );
2626     dump_rectangle( &req->client );
2627     fprintf( stderr, "," );
2628     fprintf( stderr, " valid=" );
2629     dump_varargs_rectangles( cur_size );
2630 }
2631
2632 static void dump_set_window_pos_reply( const struct set_window_pos_reply *req )
2633 {
2634     fprintf( stderr, " new_style=%08x", req->new_style );
2635 }
2636
2637 static void dump_get_window_rectangles_request( const struct get_window_rectangles_request *req )
2638 {
2639     fprintf( stderr, " handle=%p", req->handle );
2640 }
2641
2642 static void dump_get_window_rectangles_reply( const struct get_window_rectangles_reply *req )
2643 {
2644     fprintf( stderr, " window=" );
2645     dump_rectangle( &req->window );
2646     fprintf( stderr, "," );
2647     fprintf( stderr, " visible=" );
2648     dump_rectangle( &req->visible );
2649     fprintf( stderr, "," );
2650     fprintf( stderr, " client=" );
2651     dump_rectangle( &req->client );
2652 }
2653
2654 static void dump_get_window_text_request( const struct get_window_text_request *req )
2655 {
2656     fprintf( stderr, " handle=%p", req->handle );
2657 }
2658
2659 static void dump_get_window_text_reply( const struct get_window_text_reply *req )
2660 {
2661     fprintf( stderr, " text=" );
2662     dump_varargs_unicode_str( cur_size );
2663 }
2664
2665 static void dump_set_window_text_request( const struct set_window_text_request *req )
2666 {
2667     fprintf( stderr, " handle=%p,", req->handle );
2668     fprintf( stderr, " text=" );
2669     dump_varargs_unicode_str( cur_size );
2670 }
2671
2672 static void dump_get_windows_offset_request( const struct get_windows_offset_request *req )
2673 {
2674     fprintf( stderr, " from=%p,", req->from );
2675     fprintf( stderr, " to=%p", req->to );
2676 }
2677
2678 static void dump_get_windows_offset_reply( const struct get_windows_offset_reply *req )
2679 {
2680     fprintf( stderr, " x=%d,", req->x );
2681     fprintf( stderr, " y=%d", req->y );
2682 }
2683
2684 static void dump_get_visible_region_request( const struct get_visible_region_request *req )
2685 {
2686     fprintf( stderr, " window=%p,", req->window );
2687     fprintf( stderr, " flags=%08x", req->flags );
2688 }
2689
2690 static void dump_get_visible_region_reply( const struct get_visible_region_reply *req )
2691 {
2692     fprintf( stderr, " top_win=%p,", req->top_win );
2693     fprintf( stderr, " top_rect=" );
2694     dump_rectangle( &req->top_rect );
2695     fprintf( stderr, "," );
2696     fprintf( stderr, " win_rect=" );
2697     dump_rectangle( &req->win_rect );
2698     fprintf( stderr, "," );
2699     fprintf( stderr, " total_size=%u,", req->total_size );
2700     fprintf( stderr, " region=" );
2701     dump_varargs_rectangles( cur_size );
2702 }
2703
2704 static void dump_get_window_region_request( const struct get_window_region_request *req )
2705 {
2706     fprintf( stderr, " window=%p", req->window );
2707 }
2708
2709 static void dump_get_window_region_reply( const struct get_window_region_reply *req )
2710 {
2711     fprintf( stderr, " total_size=%u,", req->total_size );
2712     fprintf( stderr, " region=" );
2713     dump_varargs_rectangles( cur_size );
2714 }
2715
2716 static void dump_set_window_region_request( const struct set_window_region_request *req )
2717 {
2718     fprintf( stderr, " window=%p,", req->window );
2719     fprintf( stderr, " redraw=%d,", req->redraw );
2720     fprintf( stderr, " region=" );
2721     dump_varargs_rectangles( cur_size );
2722 }
2723
2724 static void dump_get_update_region_request( const struct get_update_region_request *req )
2725 {
2726     fprintf( stderr, " window=%p,", req->window );
2727     fprintf( stderr, " from_child=%p,", req->from_child );
2728     fprintf( stderr, " flags=%08x", req->flags );
2729 }
2730
2731 static void dump_get_update_region_reply( const struct get_update_region_reply *req )
2732 {
2733     fprintf( stderr, " child=%p,", req->child );
2734     fprintf( stderr, " flags=%08x,", req->flags );
2735     fprintf( stderr, " total_size=%u,", req->total_size );
2736     fprintf( stderr, " region=" );
2737     dump_varargs_rectangles( cur_size );
2738 }
2739
2740 static void dump_update_window_zorder_request( const struct update_window_zorder_request *req )
2741 {
2742     fprintf( stderr, " window=%p,", req->window );
2743     fprintf( stderr, " rect=" );
2744     dump_rectangle( &req->rect );
2745 }
2746
2747 static void dump_redraw_window_request( const struct redraw_window_request *req )
2748 {
2749     fprintf( stderr, " window=%p,", req->window );
2750     fprintf( stderr, " flags=%08x,", req->flags );
2751     fprintf( stderr, " region=" );
2752     dump_varargs_rectangles( cur_size );
2753 }
2754
2755 static void dump_set_window_property_request( const struct set_window_property_request *req )
2756 {
2757     fprintf( stderr, " window=%p,", req->window );
2758     fprintf( stderr, " atom=%04x,", req->atom );
2759     fprintf( stderr, " handle=%p,", req->handle );
2760     fprintf( stderr, " name=" );
2761     dump_varargs_unicode_str( cur_size );
2762 }
2763
2764 static void dump_remove_window_property_request( const struct remove_window_property_request *req )
2765 {
2766     fprintf( stderr, " window=%p,", req->window );
2767     fprintf( stderr, " atom=%04x,", req->atom );
2768     fprintf( stderr, " name=" );
2769     dump_varargs_unicode_str( cur_size );
2770 }
2771
2772 static void dump_remove_window_property_reply( const struct remove_window_property_reply *req )
2773 {
2774     fprintf( stderr, " handle=%p", req->handle );
2775 }
2776
2777 static void dump_get_window_property_request( const struct get_window_property_request *req )
2778 {
2779     fprintf( stderr, " window=%p,", req->window );
2780     fprintf( stderr, " atom=%04x,", req->atom );
2781     fprintf( stderr, " name=" );
2782     dump_varargs_unicode_str( cur_size );
2783 }
2784
2785 static void dump_get_window_property_reply( const struct get_window_property_reply *req )
2786 {
2787     fprintf( stderr, " handle=%p", req->handle );
2788 }
2789
2790 static void dump_get_window_properties_request( const struct get_window_properties_request *req )
2791 {
2792     fprintf( stderr, " window=%p", req->window );
2793 }
2794
2795 static void dump_get_window_properties_reply( const struct get_window_properties_reply *req )
2796 {
2797     fprintf( stderr, " total=%d,", req->total );
2798     fprintf( stderr, " props=" );
2799     dump_varargs_properties( cur_size );
2800 }
2801
2802 static void dump_create_winstation_request( const struct create_winstation_request *req )
2803 {
2804     fprintf( stderr, " flags=%08x,", req->flags );
2805     fprintf( stderr, " access=%08x,", req->access );
2806     fprintf( stderr, " attributes=%08x,", req->attributes );
2807     fprintf( stderr, " name=" );
2808     dump_varargs_unicode_str( cur_size );
2809 }
2810
2811 static void dump_create_winstation_reply( const struct create_winstation_reply *req )
2812 {
2813     fprintf( stderr, " handle=%p", req->handle );
2814 }
2815
2816 static void dump_open_winstation_request( const struct open_winstation_request *req )
2817 {
2818     fprintf( stderr, " access=%08x,", req->access );
2819     fprintf( stderr, " attributes=%08x,", req->attributes );
2820     fprintf( stderr, " name=" );
2821     dump_varargs_unicode_str( cur_size );
2822 }
2823
2824 static void dump_open_winstation_reply( const struct open_winstation_reply *req )
2825 {
2826     fprintf( stderr, " handle=%p", req->handle );
2827 }
2828
2829 static void dump_close_winstation_request( const struct close_winstation_request *req )
2830 {
2831     fprintf( stderr, " handle=%p", req->handle );
2832 }
2833
2834 static void dump_get_process_winstation_request( const struct get_process_winstation_request *req )
2835 {
2836 }
2837
2838 static void dump_get_process_winstation_reply( const struct get_process_winstation_reply *req )
2839 {
2840     fprintf( stderr, " handle=%p", req->handle );
2841 }
2842
2843 static void dump_set_process_winstation_request( const struct set_process_winstation_request *req )
2844 {
2845     fprintf( stderr, " handle=%p", req->handle );
2846 }
2847
2848 static void dump_create_desktop_request( const struct create_desktop_request *req )
2849 {
2850     fprintf( stderr, " flags=%08x,", req->flags );
2851     fprintf( stderr, " access=%08x,", req->access );
2852     fprintf( stderr, " attributes=%08x,", req->attributes );
2853     fprintf( stderr, " name=" );
2854     dump_varargs_unicode_str( cur_size );
2855 }
2856
2857 static void dump_create_desktop_reply( const struct create_desktop_reply *req )
2858 {
2859     fprintf( stderr, " handle=%p", req->handle );
2860 }
2861
2862 static void dump_open_desktop_request( const struct open_desktop_request *req )
2863 {
2864     fprintf( stderr, " flags=%08x,", req->flags );
2865     fprintf( stderr, " access=%08x,", req->access );
2866     fprintf( stderr, " attributes=%08x,", req->attributes );
2867     fprintf( stderr, " name=" );
2868     dump_varargs_unicode_str( cur_size );
2869 }
2870
2871 static void dump_open_desktop_reply( const struct open_desktop_reply *req )
2872 {
2873     fprintf( stderr, " handle=%p", req->handle );
2874 }
2875
2876 static void dump_close_desktop_request( const struct close_desktop_request *req )
2877 {
2878     fprintf( stderr, " handle=%p", req->handle );
2879 }
2880
2881 static void dump_get_thread_desktop_request( const struct get_thread_desktop_request *req )
2882 {
2883     fprintf( stderr, " tid=%04x", req->tid );
2884 }
2885
2886 static void dump_get_thread_desktop_reply( const struct get_thread_desktop_reply *req )
2887 {
2888     fprintf( stderr, " handle=%p", req->handle );
2889 }
2890
2891 static void dump_set_thread_desktop_request( const struct set_thread_desktop_request *req )
2892 {
2893     fprintf( stderr, " handle=%p", req->handle );
2894 }
2895
2896 static void dump_set_user_object_info_request( const struct set_user_object_info_request *req )
2897 {
2898     fprintf( stderr, " handle=%p,", req->handle );
2899     fprintf( stderr, " flags=%08x,", req->flags );
2900     fprintf( stderr, " obj_flags=%08x", req->obj_flags );
2901 }
2902
2903 static void dump_set_user_object_info_reply( const struct set_user_object_info_reply *req )
2904 {
2905     fprintf( stderr, " is_desktop=%d,", req->is_desktop );
2906     fprintf( stderr, " old_obj_flags=%08x,", req->old_obj_flags );
2907     fprintf( stderr, " name=" );
2908     dump_varargs_unicode_str( cur_size );
2909 }
2910
2911 static void dump_attach_thread_input_request( const struct attach_thread_input_request *req )
2912 {
2913     fprintf( stderr, " tid_from=%04x,", req->tid_from );
2914     fprintf( stderr, " tid_to=%04x,", req->tid_to );
2915     fprintf( stderr, " attach=%d", req->attach );
2916 }
2917
2918 static void dump_get_thread_input_request( const struct get_thread_input_request *req )
2919 {
2920     fprintf( stderr, " tid=%04x", req->tid );
2921 }
2922
2923 static void dump_get_thread_input_reply( const struct get_thread_input_reply *req )
2924 {
2925     fprintf( stderr, " focus=%p,", req->focus );
2926     fprintf( stderr, " capture=%p,", req->capture );
2927     fprintf( stderr, " active=%p,", req->active );
2928     fprintf( stderr, " foreground=%p,", req->foreground );
2929     fprintf( stderr, " menu_owner=%p,", req->menu_owner );
2930     fprintf( stderr, " move_size=%p,", req->move_size );
2931     fprintf( stderr, " caret=%p,", req->caret );
2932     fprintf( stderr, " rect=" );
2933     dump_rectangle( &req->rect );
2934 }
2935
2936 static void dump_get_last_input_time_request( const struct get_last_input_time_request *req )
2937 {
2938 }
2939
2940 static void dump_get_last_input_time_reply( const struct get_last_input_time_reply *req )
2941 {
2942     fprintf( stderr, " time=%08x", req->time );
2943 }
2944
2945 static void dump_get_key_state_request( const struct get_key_state_request *req )
2946 {
2947     fprintf( stderr, " tid=%04x,", req->tid );
2948     fprintf( stderr, " key=%d", req->key );
2949 }
2950
2951 static void dump_get_key_state_reply( const struct get_key_state_reply *req )
2952 {
2953     fprintf( stderr, " state=%02x,", req->state );
2954     fprintf( stderr, " keystate=" );
2955     dump_varargs_bytes( cur_size );
2956 }
2957
2958 static void dump_set_key_state_request( const struct set_key_state_request *req )
2959 {
2960     fprintf( stderr, " tid=%04x,", req->tid );
2961     fprintf( stderr, " keystate=" );
2962     dump_varargs_bytes( cur_size );
2963 }
2964
2965 static void dump_set_foreground_window_request( const struct set_foreground_window_request *req )
2966 {
2967     fprintf( stderr, " handle=%p", req->handle );
2968 }
2969
2970 static void dump_set_foreground_window_reply( const struct set_foreground_window_reply *req )
2971 {
2972     fprintf( stderr, " previous=%p,", req->previous );
2973     fprintf( stderr, " send_msg_old=%d,", req->send_msg_old );
2974     fprintf( stderr, " send_msg_new=%d", req->send_msg_new );
2975 }
2976
2977 static void dump_set_focus_window_request( const struct set_focus_window_request *req )
2978 {
2979     fprintf( stderr, " handle=%p", req->handle );
2980 }
2981
2982 static void dump_set_focus_window_reply( const struct set_focus_window_reply *req )
2983 {
2984     fprintf( stderr, " previous=%p", req->previous );
2985 }
2986
2987 static void dump_set_active_window_request( const struct set_active_window_request *req )
2988 {
2989     fprintf( stderr, " handle=%p", req->handle );
2990 }
2991
2992 static void dump_set_active_window_reply( const struct set_active_window_reply *req )
2993 {
2994     fprintf( stderr, " previous=%p", req->previous );
2995 }
2996
2997 static void dump_set_capture_window_request( const struct set_capture_window_request *req )
2998 {
2999     fprintf( stderr, " handle=%p,", req->handle );
3000     fprintf( stderr, " flags=%08x", req->flags );
3001 }
3002
3003 static void dump_set_capture_window_reply( const struct set_capture_window_reply *req )
3004 {
3005     fprintf( stderr, " previous=%p,", req->previous );
3006     fprintf( stderr, " full_handle=%p", req->full_handle );
3007 }
3008
3009 static void dump_set_caret_window_request( const struct set_caret_window_request *req )
3010 {
3011     fprintf( stderr, " handle=%p,", req->handle );
3012     fprintf( stderr, " width=%d,", req->width );
3013     fprintf( stderr, " height=%d", req->height );
3014 }
3015
3016 static void dump_set_caret_window_reply( const struct set_caret_window_reply *req )
3017 {
3018     fprintf( stderr, " previous=%p,", req->previous );
3019     fprintf( stderr, " old_rect=" );
3020     dump_rectangle( &req->old_rect );
3021     fprintf( stderr, "," );
3022     fprintf( stderr, " old_hide=%d,", req->old_hide );
3023     fprintf( stderr, " old_state=%d", req->old_state );
3024 }
3025
3026 static void dump_set_caret_info_request( const struct set_caret_info_request *req )
3027 {
3028     fprintf( stderr, " flags=%08x,", req->flags );
3029     fprintf( stderr, " handle=%p,", req->handle );
3030     fprintf( stderr, " x=%d,", req->x );
3031     fprintf( stderr, " y=%d,", req->y );
3032     fprintf( stderr, " hide=%d,", req->hide );
3033     fprintf( stderr, " state=%d", req->state );
3034 }
3035
3036 static void dump_set_caret_info_reply( const struct set_caret_info_reply *req )
3037 {
3038     fprintf( stderr, " full_handle=%p,", req->full_handle );
3039     fprintf( stderr, " old_rect=" );
3040     dump_rectangle( &req->old_rect );
3041     fprintf( stderr, "," );
3042     fprintf( stderr, " old_hide=%d,", req->old_hide );
3043     fprintf( stderr, " old_state=%d", req->old_state );
3044 }
3045
3046 static void dump_set_hook_request( const struct set_hook_request *req )
3047 {
3048     fprintf( stderr, " id=%d,", req->id );
3049     fprintf( stderr, " pid=%04x,", req->pid );
3050     fprintf( stderr, " tid=%04x,", req->tid );
3051     fprintf( stderr, " event_min=%d,", req->event_min );
3052     fprintf( stderr, " event_max=%d,", req->event_max );
3053     fprintf( stderr, " flags=%d,", req->flags );
3054     fprintf( stderr, " proc=%p,", req->proc );
3055     fprintf( stderr, " unicode=%d,", req->unicode );
3056     fprintf( stderr, " module=" );
3057     dump_varargs_unicode_str( cur_size );
3058 }
3059
3060 static void dump_set_hook_reply( const struct set_hook_reply *req )
3061 {
3062     fprintf( stderr, " handle=%p,", req->handle );
3063     fprintf( stderr, " active_hooks=%08x", req->active_hooks );
3064 }
3065
3066 static void dump_remove_hook_request( const struct remove_hook_request *req )
3067 {
3068     fprintf( stderr, " handle=%p,", req->handle );
3069     fprintf( stderr, " id=%d,", req->id );
3070     fprintf( stderr, " proc=%p", req->proc );
3071 }
3072
3073 static void dump_remove_hook_reply( const struct remove_hook_reply *req )
3074 {
3075     fprintf( stderr, " active_hooks=%08x", req->active_hooks );
3076 }
3077
3078 static void dump_start_hook_chain_request( const struct start_hook_chain_request *req )
3079 {
3080     fprintf( stderr, " id=%d,", req->id );
3081     fprintf( stderr, " event=%d,", req->event );
3082     fprintf( stderr, " window=%p,", req->window );
3083     fprintf( stderr, " object_id=%d,", req->object_id );
3084     fprintf( stderr, " child_id=%d", req->child_id );
3085 }
3086
3087 static void dump_start_hook_chain_reply( const struct start_hook_chain_reply *req )
3088 {
3089     fprintf( stderr, " handle=%p,", req->handle );
3090     fprintf( stderr, " pid=%04x,", req->pid );
3091     fprintf( stderr, " tid=%04x,", req->tid );
3092     fprintf( stderr, " proc=%p,", req->proc );
3093     fprintf( stderr, " unicode=%d,", req->unicode );
3094     fprintf( stderr, " active_hooks=%08x,", req->active_hooks );
3095     fprintf( stderr, " module=" );
3096     dump_varargs_unicode_str( cur_size );
3097 }
3098
3099 static void dump_finish_hook_chain_request( const struct finish_hook_chain_request *req )
3100 {
3101     fprintf( stderr, " id=%d", req->id );
3102 }
3103
3104 static void dump_get_hook_info_request( const struct get_hook_info_request *req )
3105 {
3106     fprintf( stderr, " handle=%p,", req->handle );
3107     fprintf( stderr, " get_next=%d,", req->get_next );
3108     fprintf( stderr, " event=%d,", req->event );
3109     fprintf( stderr, " window=%p,", req->window );
3110     fprintf( stderr, " object_id=%d,", req->object_id );
3111     fprintf( stderr, " child_id=%d", req->child_id );
3112 }
3113
3114 static void dump_get_hook_info_reply( const struct get_hook_info_reply *req )
3115 {
3116     fprintf( stderr, " handle=%p,", req->handle );
3117     fprintf( stderr, " id=%d,", req->id );
3118     fprintf( stderr, " pid=%04x,", req->pid );
3119     fprintf( stderr, " tid=%04x,", req->tid );
3120     fprintf( stderr, " proc=%p,", req->proc );
3121     fprintf( stderr, " unicode=%d,", req->unicode );
3122     fprintf( stderr, " module=" );
3123     dump_varargs_unicode_str( cur_size );
3124 }
3125
3126 static void dump_create_class_request( const struct create_class_request *req )
3127 {
3128     fprintf( stderr, " local=%d,", req->local );
3129     fprintf( stderr, " atom=%04x,", req->atom );
3130     fprintf( stderr, " style=%08x,", req->style );
3131     fprintf( stderr, " instance=%p,", req->instance );
3132     fprintf( stderr, " extra=%d,", req->extra );
3133     fprintf( stderr, " win_extra=%d,", req->win_extra );
3134     fprintf( stderr, " client_ptr=%p", req->client_ptr );
3135 }
3136
3137 static void dump_destroy_class_request( const struct destroy_class_request *req )
3138 {
3139     fprintf( stderr, " atom=%04x,", req->atom );
3140     fprintf( stderr, " instance=%p", req->instance );
3141 }
3142
3143 static void dump_destroy_class_reply( const struct destroy_class_reply *req )
3144 {
3145     fprintf( stderr, " client_ptr=%p", req->client_ptr );
3146 }
3147
3148 static void dump_set_class_info_request( const struct set_class_info_request *req )
3149 {
3150     fprintf( stderr, " window=%p,", req->window );
3151     fprintf( stderr, " flags=%08x,", req->flags );
3152     fprintf( stderr, " atom=%04x,", req->atom );
3153     fprintf( stderr, " style=%08x,", req->style );
3154     fprintf( stderr, " win_extra=%d,", req->win_extra );
3155     fprintf( stderr, " instance=%p,", req->instance );
3156     fprintf( stderr, " extra_offset=%d,", req->extra_offset );
3157     fprintf( stderr, " extra_size=%u,", req->extra_size );
3158     fprintf( stderr, " extra_value=%lx", req->extra_value );
3159 }
3160
3161 static void dump_set_class_info_reply( const struct set_class_info_reply *req )
3162 {
3163     fprintf( stderr, " old_atom=%04x,", req->old_atom );
3164     fprintf( stderr, " old_style=%08x,", req->old_style );
3165     fprintf( stderr, " old_extra=%d,", req->old_extra );
3166     fprintf( stderr, " old_win_extra=%d,", req->old_win_extra );
3167     fprintf( stderr, " old_instance=%p,", req->old_instance );
3168     fprintf( stderr, " old_extra_value=%lx", req->old_extra_value );
3169 }
3170
3171 static void dump_set_clipboard_info_request( const struct set_clipboard_info_request *req )
3172 {
3173     fprintf( stderr, " flags=%08x,", req->flags );
3174     fprintf( stderr, " clipboard=%p,", req->clipboard );
3175     fprintf( stderr, " owner=%p,", req->owner );
3176     fprintf( stderr, " viewer=%p,", req->viewer );
3177     fprintf( stderr, " seqno=%08x", req->seqno );
3178 }
3179
3180 static void dump_set_clipboard_info_reply( const struct set_clipboard_info_reply *req )
3181 {
3182     fprintf( stderr, " flags=%08x,", req->flags );
3183     fprintf( stderr, " old_clipboard=%p,", req->old_clipboard );
3184     fprintf( stderr, " old_owner=%p,", req->old_owner );
3185     fprintf( stderr, " old_viewer=%p,", req->old_viewer );
3186     fprintf( stderr, " seqno=%08x", req->seqno );
3187 }
3188
3189 static void dump_open_token_request( const struct open_token_request *req )
3190 {
3191     fprintf( stderr, " handle=%p,", req->handle );
3192     fprintf( stderr, " access=%08x,", req->access );
3193     fprintf( stderr, " attributes=%08x,", req->attributes );
3194     fprintf( stderr, " flags=%08x", req->flags );
3195 }
3196
3197 static void dump_open_token_reply( const struct open_token_reply *req )
3198 {
3199     fprintf( stderr, " token=%p", req->token );
3200 }
3201
3202 static void dump_set_global_windows_request( const struct set_global_windows_request *req )
3203 {
3204     fprintf( stderr, " flags=%08x,", req->flags );
3205     fprintf( stderr, " shell_window=%p,", req->shell_window );
3206     fprintf( stderr, " shell_listview=%p,", req->shell_listview );
3207     fprintf( stderr, " progman_window=%p,", req->progman_window );
3208     fprintf( stderr, " taskman_window=%p", req->taskman_window );
3209 }
3210
3211 static void dump_set_global_windows_reply( const struct set_global_windows_reply *req )
3212 {
3213     fprintf( stderr, " old_shell_window=%p,", req->old_shell_window );
3214     fprintf( stderr, " old_shell_listview=%p,", req->old_shell_listview );
3215     fprintf( stderr, " old_progman_window=%p,", req->old_progman_window );
3216     fprintf( stderr, " old_taskman_window=%p", req->old_taskman_window );
3217 }
3218
3219 static void dump_adjust_token_privileges_request( const struct adjust_token_privileges_request *req )
3220 {
3221     fprintf( stderr, " handle=%p,", req->handle );
3222     fprintf( stderr, " disable_all=%d,", req->disable_all );
3223     fprintf( stderr, " get_modified_state=%d,", req->get_modified_state );
3224     fprintf( stderr, " privileges=" );
3225     dump_varargs_LUID_AND_ATTRIBUTES( cur_size );
3226 }
3227
3228 static void dump_adjust_token_privileges_reply( const struct adjust_token_privileges_reply *req )
3229 {
3230     fprintf( stderr, " len=%08x,", req->len );
3231     fprintf( stderr, " privileges=" );
3232     dump_varargs_LUID_AND_ATTRIBUTES( cur_size );
3233 }
3234
3235 static void dump_get_token_privileges_request( const struct get_token_privileges_request *req )
3236 {
3237     fprintf( stderr, " handle=%p", req->handle );
3238 }
3239
3240 static void dump_get_token_privileges_reply( const struct get_token_privileges_reply *req )
3241 {
3242     fprintf( stderr, " len=%08x,", req->len );
3243     fprintf( stderr, " privileges=" );
3244     dump_varargs_LUID_AND_ATTRIBUTES( cur_size );
3245 }
3246
3247 static void dump_check_token_privileges_request( const struct check_token_privileges_request *req )
3248 {
3249     fprintf( stderr, " handle=%p,", req->handle );
3250     fprintf( stderr, " all_required=%d,", req->all_required );
3251     fprintf( stderr, " privileges=" );
3252     dump_varargs_LUID_AND_ATTRIBUTES( cur_size );
3253 }
3254
3255 static void dump_check_token_privileges_reply( const struct check_token_privileges_reply *req )
3256 {
3257     fprintf( stderr, " has_privileges=%d,", req->has_privileges );
3258     fprintf( stderr, " privileges=" );
3259     dump_varargs_LUID_AND_ATTRIBUTES( cur_size );
3260 }
3261
3262 static void dump_duplicate_token_request( const struct duplicate_token_request *req )
3263 {
3264     fprintf( stderr, " handle=%p,", req->handle );
3265     fprintf( stderr, " access=%08x,", req->access );
3266     fprintf( stderr, " attributes=%08x,", req->attributes );
3267     fprintf( stderr, " primary=%d,", req->primary );
3268     fprintf( stderr, " impersonation_level=%d", req->impersonation_level );
3269 }
3270
3271 static void dump_duplicate_token_reply( const struct duplicate_token_reply *req )
3272 {
3273     fprintf( stderr, " new_handle=%p", req->new_handle );
3274 }
3275
3276 static void dump_access_check_request( const struct access_check_request *req )
3277 {
3278     fprintf( stderr, " handle=%p,", req->handle );
3279     fprintf( stderr, " desired_access=%08x,", req->desired_access );
3280     fprintf( stderr, " mapping_read=%08x,", req->mapping_read );
3281     fprintf( stderr, " mapping_write=%08x,", req->mapping_write );
3282     fprintf( stderr, " mapping_execute=%08x,", req->mapping_execute );
3283     fprintf( stderr, " mapping_all=%08x,", req->mapping_all );
3284     fprintf( stderr, " sd=" );
3285     dump_varargs_security_descriptor( cur_size );
3286 }
3287
3288 static void dump_access_check_reply( const struct access_check_reply *req )
3289 {
3290     fprintf( stderr, " access_granted=%08x,", req->access_granted );
3291     fprintf( stderr, " access_status=%08x,", req->access_status );
3292     fprintf( stderr, " privileges_len=%08x,", req->privileges_len );
3293     fprintf( stderr, " privileges=" );
3294     dump_varargs_LUID_AND_ATTRIBUTES( cur_size );
3295 }
3296
3297 static void dump_get_token_user_request( const struct get_token_user_request *req )
3298 {
3299     fprintf( stderr, " handle=%p", req->handle );
3300 }
3301
3302 static void dump_get_token_user_reply( const struct get_token_user_reply *req )
3303 {
3304     fprintf( stderr, " user_len=%u,", req->user_len );
3305     fprintf( stderr, " user=" );
3306     dump_varargs_SID( cur_size );
3307 }
3308
3309 static void dump_get_token_groups_request( const struct get_token_groups_request *req )
3310 {
3311     fprintf( stderr, " handle=%p", req->handle );
3312 }
3313
3314 static void dump_get_token_groups_reply( const struct get_token_groups_reply *req )
3315 {
3316     fprintf( stderr, " user_len=%u,", req->user_len );
3317     fprintf( stderr, " user=" );
3318     dump_varargs_token_groups( cur_size );
3319 }
3320
3321 static void dump_set_security_object_request( const struct set_security_object_request *req )
3322 {
3323     fprintf( stderr, " handle=%p,", req->handle );
3324     fprintf( stderr, " security_info=%08x,", req->security_info );
3325     fprintf( stderr, " sd=" );
3326     dump_varargs_security_descriptor( cur_size );
3327 }
3328
3329 static void dump_create_mailslot_request( const struct create_mailslot_request *req )
3330 {
3331     fprintf( stderr, " access=%08x,", req->access );
3332     fprintf( stderr, " attributes=%08x,", req->attributes );
3333     fprintf( stderr, " rootdir=%p,", req->rootdir );
3334     fprintf( stderr, " max_msgsize=%08x,", req->max_msgsize );
3335     fprintf( stderr, " read_timeout=" );
3336     dump_timeout( &req->read_timeout );
3337     fprintf( stderr, "," );
3338     fprintf( stderr, " name=" );
3339     dump_varargs_unicode_str( cur_size );
3340 }
3341
3342 static void dump_create_mailslot_reply( const struct create_mailslot_reply *req )
3343 {
3344     fprintf( stderr, " handle=%p", req->handle );
3345 }
3346
3347 static void dump_set_mailslot_info_request( const struct set_mailslot_info_request *req )
3348 {
3349     fprintf( stderr, " handle=%p,", req->handle );
3350     fprintf( stderr, " flags=%08x,", req->flags );
3351     fprintf( stderr, " read_timeout=" );
3352     dump_timeout( &req->read_timeout );
3353 }
3354
3355 static void dump_set_mailslot_info_reply( const struct set_mailslot_info_reply *req )
3356 {
3357     fprintf( stderr, " max_msgsize=%08x,", req->max_msgsize );
3358     fprintf( stderr, " read_timeout=" );
3359     dump_timeout( &req->read_timeout );
3360 }
3361
3362 static void dump_create_directory_request( const struct create_directory_request *req )
3363 {
3364     fprintf( stderr, " access=%08x,", req->access );
3365     fprintf( stderr, " attributes=%08x,", req->attributes );
3366     fprintf( stderr, " rootdir=%p,", req->rootdir );
3367     fprintf( stderr, " directory_name=" );
3368     dump_varargs_unicode_str( cur_size );
3369 }
3370
3371 static void dump_create_directory_reply( const struct create_directory_reply *req )
3372 {
3373     fprintf( stderr, " handle=%p", req->handle );
3374 }
3375
3376 static void dump_open_directory_request( const struct open_directory_request *req )
3377 {
3378     fprintf( stderr, " access=%08x,", req->access );
3379     fprintf( stderr, " attributes=%08x,", req->attributes );
3380     fprintf( stderr, " rootdir=%p,", req->rootdir );
3381     fprintf( stderr, " directory_name=" );
3382     dump_varargs_unicode_str( cur_size );
3383 }
3384
3385 static void dump_open_directory_reply( const struct open_directory_reply *req )
3386 {
3387     fprintf( stderr, " handle=%p", req->handle );
3388 }
3389
3390 static void dump_create_symlink_request( const struct create_symlink_request *req )
3391 {
3392     fprintf( stderr, " access=%08x,", req->access );
3393     fprintf( stderr, " attributes=%08x,", req->attributes );
3394     fprintf( stderr, " rootdir=%p,", req->rootdir );
3395     fprintf( stderr, " name_len=%u,", req->name_len );
3396     fprintf( stderr, " name=" );
3397     dump_varargs_unicode_str( min(cur_size,req->name_len) );
3398     fputc( ',', stderr );
3399     fprintf( stderr, " target_name=" );
3400     dump_varargs_unicode_str( cur_size );
3401 }
3402
3403 static void dump_create_symlink_reply( const struct create_symlink_reply *req )
3404 {
3405     fprintf( stderr, " handle=%p", req->handle );
3406 }
3407
3408 static void dump_open_symlink_request( const struct open_symlink_request *req )
3409 {
3410     fprintf( stderr, " access=%08x,", req->access );
3411     fprintf( stderr, " attributes=%08x,", req->attributes );
3412     fprintf( stderr, " rootdir=%p,", req->rootdir );
3413     fprintf( stderr, " name=" );
3414     dump_varargs_unicode_str( cur_size );
3415 }
3416
3417 static void dump_open_symlink_reply( const struct open_symlink_reply *req )
3418 {
3419     fprintf( stderr, " handle=%p", req->handle );
3420 }
3421
3422 static void dump_query_symlink_request( const struct query_symlink_request *req )
3423 {
3424     fprintf( stderr, " handle=%p", req->handle );
3425 }
3426
3427 static void dump_query_symlink_reply( const struct query_symlink_reply *req )
3428 {
3429     fprintf( stderr, " target_name=" );
3430     dump_varargs_unicode_str( cur_size );
3431 }
3432
3433 static void dump_get_object_info_request( const struct get_object_info_request *req )
3434 {
3435     fprintf( stderr, " handle=%p", req->handle );
3436 }
3437
3438 static void dump_get_object_info_reply( const struct get_object_info_reply *req )
3439 {
3440     fprintf( stderr, " access=%08x,", req->access );
3441     fprintf( stderr, " ref_count=%08x", req->ref_count );
3442 }
3443
3444 static void dump_get_token_impersonation_level_request( const struct get_token_impersonation_level_request *req )
3445 {
3446     fprintf( stderr, " handle=%p", req->handle );
3447 }
3448
3449 static void dump_get_token_impersonation_level_reply( const struct get_token_impersonation_level_reply *req )
3450 {
3451     fprintf( stderr, " impersonation_level=%d", req->impersonation_level );
3452 }
3453
3454 static void dump_allocate_locally_unique_id_request( const struct allocate_locally_unique_id_request *req )
3455 {
3456 }
3457
3458 static void dump_allocate_locally_unique_id_reply( const struct allocate_locally_unique_id_reply *req )
3459 {
3460     fprintf( stderr, " luid=" );
3461     dump_luid( &req->luid );
3462 }
3463
3464 static const dump_func req_dumpers[REQ_NB_REQUESTS] = {
3465     (dump_func)dump_new_process_request,
3466     (dump_func)dump_get_new_process_info_request,
3467     (dump_func)dump_new_thread_request,
3468     (dump_func)dump_get_startup_info_request,
3469     (dump_func)dump_init_process_done_request,
3470     (dump_func)dump_init_thread_request,
3471     (dump_func)dump_terminate_process_request,
3472     (dump_func)dump_terminate_thread_request,
3473     (dump_func)dump_get_process_info_request,
3474     (dump_func)dump_set_process_info_request,
3475     (dump_func)dump_get_thread_info_request,
3476     (dump_func)dump_set_thread_info_request,
3477     (dump_func)dump_get_dll_info_request,
3478     (dump_func)dump_suspend_thread_request,
3479     (dump_func)dump_resume_thread_request,
3480     (dump_func)dump_load_dll_request,
3481     (dump_func)dump_unload_dll_request,
3482     (dump_func)dump_queue_apc_request,
3483     (dump_func)dump_get_apc_request,
3484     (dump_func)dump_get_apc_result_request,
3485     (dump_func)dump_close_handle_request,
3486     (dump_func)dump_set_handle_info_request,
3487     (dump_func)dump_dup_handle_request,
3488     (dump_func)dump_open_process_request,
3489     (dump_func)dump_open_thread_request,
3490     (dump_func)dump_select_request,
3491     (dump_func)dump_create_event_request,
3492     (dump_func)dump_event_op_request,
3493     (dump_func)dump_open_event_request,
3494     (dump_func)dump_create_mutex_request,
3495     (dump_func)dump_release_mutex_request,
3496     (dump_func)dump_open_mutex_request,
3497     (dump_func)dump_create_semaphore_request,
3498     (dump_func)dump_release_semaphore_request,
3499     (dump_func)dump_open_semaphore_request,
3500     (dump_func)dump_create_file_request,
3501     (dump_func)dump_open_file_object_request,
3502     (dump_func)dump_alloc_file_handle_request,
3503     (dump_func)dump_get_handle_fd_request,
3504     (dump_func)dump_flush_file_request,
3505     (dump_func)dump_lock_file_request,
3506     (dump_func)dump_unlock_file_request,
3507     (dump_func)dump_create_socket_request,
3508     (dump_func)dump_accept_socket_request,
3509     (dump_func)dump_set_socket_event_request,
3510     (dump_func)dump_get_socket_event_request,
3511     (dump_func)dump_enable_socket_event_request,
3512     (dump_func)dump_set_socket_deferred_request,
3513     (dump_func)dump_alloc_console_request,
3514     (dump_func)dump_free_console_request,
3515     (dump_func)dump_get_console_renderer_events_request,
3516     (dump_func)dump_open_console_request,
3517     (dump_func)dump_get_console_wait_event_request,
3518     (dump_func)dump_get_console_mode_request,
3519     (dump_func)dump_set_console_mode_request,
3520     (dump_func)dump_set_console_input_info_request,
3521     (dump_func)dump_get_console_input_info_request,
3522     (dump_func)dump_append_console_input_history_request,
3523     (dump_func)dump_get_console_input_history_request,
3524     (dump_func)dump_create_console_output_request,
3525     (dump_func)dump_set_console_output_info_request,
3526     (dump_func)dump_get_console_output_info_request,
3527     (dump_func)dump_write_console_input_request,
3528     (dump_func)dump_read_console_input_request,
3529     (dump_func)dump_write_console_output_request,
3530     (dump_func)dump_fill_console_output_request,
3531     (dump_func)dump_read_console_output_request,
3532     (dump_func)dump_move_console_output_request,
3533     (dump_func)dump_send_console_signal_request,
3534     (dump_func)dump_read_directory_changes_request,
3535     (dump_func)dump_read_change_request,
3536     (dump_func)dump_create_mapping_request,
3537     (dump_func)dump_open_mapping_request,
3538     (dump_func)dump_get_mapping_info_request,
3539     (dump_func)dump_create_snapshot_request,
3540     (dump_func)dump_next_process_request,
3541     (dump_func)dump_next_thread_request,
3542     (dump_func)dump_next_module_request,
3543     (dump_func)dump_wait_debug_event_request,
3544     (dump_func)dump_queue_exception_event_request,
3545     (dump_func)dump_get_exception_status_request,
3546     (dump_func)dump_output_debug_string_request,
3547     (dump_func)dump_continue_debug_event_request,
3548     (dump_func)dump_debug_process_request,
3549     (dump_func)dump_debug_break_request,
3550     (dump_func)dump_set_debugger_kill_on_exit_request,
3551     (dump_func)dump_read_process_memory_request,
3552     (dump_func)dump_write_process_memory_request,
3553     (dump_func)dump_create_key_request,
3554     (dump_func)dump_open_key_request,
3555     (dump_func)dump_delete_key_request,
3556     (dump_func)dump_flush_key_request,
3557     (dump_func)dump_enum_key_request,
3558     (dump_func)dump_set_key_value_request,
3559     (dump_func)dump_get_key_value_request,
3560     (dump_func)dump_enum_key_value_request,
3561     (dump_func)dump_delete_key_value_request,
3562     (dump_func)dump_load_registry_request,
3563     (dump_func)dump_unload_registry_request,
3564     (dump_func)dump_save_registry_request,
3565     (dump_func)dump_set_registry_notification_request,
3566     (dump_func)dump_create_timer_request,
3567     (dump_func)dump_open_timer_request,
3568     (dump_func)dump_set_timer_request,
3569     (dump_func)dump_cancel_timer_request,
3570     (dump_func)dump_get_timer_info_request,
3571     (dump_func)dump_get_thread_context_request,
3572     (dump_func)dump_set_thread_context_request,
3573     (dump_func)dump_get_selector_entry_request,
3574     (dump_func)dump_add_atom_request,
3575     (dump_func)dump_delete_atom_request,
3576     (dump_func)dump_find_atom_request,
3577     (dump_func)dump_get_atom_information_request,
3578     (dump_func)dump_set_atom_information_request,
3579     (dump_func)dump_empty_atom_table_request,
3580     (dump_func)dump_init_atom_table_request,
3581     (dump_func)dump_get_msg_queue_request,
3582     (dump_func)dump_set_queue_fd_request,
3583     (dump_func)dump_set_queue_mask_request,
3584     (dump_func)dump_get_queue_status_request,
3585     (dump_func)dump_get_process_idle_event_request,
3586     (dump_func)dump_send_message_request,
3587     (dump_func)dump_post_quit_message_request,
3588     (dump_func)dump_send_hardware_message_request,
3589     (dump_func)dump_get_message_request,
3590     (dump_func)dump_reply_message_request,
3591     (dump_func)dump_accept_hardware_message_request,
3592     (dump_func)dump_get_message_reply_request,
3593     (dump_func)dump_set_win_timer_request,
3594     (dump_func)dump_kill_win_timer_request,
3595     (dump_func)dump_get_serial_info_request,
3596     (dump_func)dump_set_serial_info_request,
3597     (dump_func)dump_register_async_request,
3598     (dump_func)dump_cancel_async_request,
3599     (dump_func)dump_ioctl_request,
3600     (dump_func)dump_create_named_pipe_request,
3601     (dump_func)dump_connect_named_pipe_request,
3602     (dump_func)dump_wait_named_pipe_request,
3603     (dump_func)dump_get_named_pipe_info_request,
3604     (dump_func)dump_create_window_request,
3605     (dump_func)dump_destroy_window_request,
3606     (dump_func)dump_get_desktop_window_request,
3607     (dump_func)dump_set_window_owner_request,
3608     (dump_func)dump_get_window_info_request,
3609     (dump_func)dump_set_window_info_request,
3610     (dump_func)dump_set_parent_request,
3611     (dump_func)dump_get_window_parents_request,
3612     (dump_func)dump_get_window_children_request,
3613     (dump_func)dump_get_window_children_from_point_request,
3614     (dump_func)dump_get_window_tree_request,
3615     (dump_func)dump_set_window_pos_request,
3616     (dump_func)dump_get_window_rectangles_request,
3617     (dump_func)dump_get_window_text_request,
3618     (dump_func)dump_set_window_text_request,
3619     (dump_func)dump_get_windows_offset_request,
3620     (dump_func)dump_get_visible_region_request,
3621     (dump_func)dump_get_window_region_request,
3622     (dump_func)dump_set_window_region_request,
3623     (dump_func)dump_get_update_region_request,
3624     (dump_func)dump_update_window_zorder_request,
3625     (dump_func)dump_redraw_window_request,
3626     (dump_func)dump_set_window_property_request,
3627     (dump_func)dump_remove_window_property_request,
3628     (dump_func)dump_get_window_property_request,
3629     (dump_func)dump_get_window_properties_request,
3630     (dump_func)dump_create_winstation_request,
3631     (dump_func)dump_open_winstation_request,
3632     (dump_func)dump_close_winstation_request,
3633     (dump_func)dump_get_process_winstation_request,
3634     (dump_func)dump_set_process_winstation_request,
3635     (dump_func)dump_create_desktop_request,
3636     (dump_func)dump_open_desktop_request,
3637     (dump_func)dump_close_desktop_request,
3638     (dump_func)dump_get_thread_desktop_request,
3639     (dump_func)dump_set_thread_desktop_request,
3640     (dump_func)dump_set_user_object_info_request,
3641     (dump_func)dump_attach_thread_input_request,
3642     (dump_func)dump_get_thread_input_request,
3643     (dump_func)dump_get_last_input_time_request,
3644     (dump_func)dump_get_key_state_request,
3645     (dump_func)dump_set_key_state_request,
3646     (dump_func)dump_set_foreground_window_request,
3647     (dump_func)dump_set_focus_window_request,
3648     (dump_func)dump_set_active_window_request,
3649     (dump_func)dump_set_capture_window_request,
3650     (dump_func)dump_set_caret_window_request,
3651     (dump_func)dump_set_caret_info_request,
3652     (dump_func)dump_set_hook_request,
3653     (dump_func)dump_remove_hook_request,
3654     (dump_func)dump_start_hook_chain_request,
3655     (dump_func)dump_finish_hook_chain_request,
3656     (dump_func)dump_get_hook_info_request,
3657     (dump_func)dump_create_class_request,
3658     (dump_func)dump_destroy_class_request,
3659     (dump_func)dump_set_class_info_request,
3660     (dump_func)dump_set_clipboard_info_request,
3661     (dump_func)dump_open_token_request,
3662     (dump_func)dump_set_global_windows_request,
3663     (dump_func)dump_adjust_token_privileges_request,
3664     (dump_func)dump_get_token_privileges_request,
3665     (dump_func)dump_check_token_privileges_request,
3666     (dump_func)dump_duplicate_token_request,
3667     (dump_func)dump_access_check_request,
3668     (dump_func)dump_get_token_user_request,
3669     (dump_func)dump_get_token_groups_request,
3670     (dump_func)dump_set_security_object_request,
3671     (dump_func)dump_create_mailslot_request,
3672     (dump_func)dump_set_mailslot_info_request,
3673     (dump_func)dump_create_directory_request,
3674     (dump_func)dump_open_directory_request,
3675     (dump_func)dump_create_symlink_request,
3676     (dump_func)dump_open_symlink_request,
3677     (dump_func)dump_query_symlink_request,
3678     (dump_func)dump_get_object_info_request,
3679     (dump_func)dump_get_token_impersonation_level_request,
3680     (dump_func)dump_allocate_locally_unique_id_request,
3681 };
3682
3683 static const dump_func reply_dumpers[REQ_NB_REQUESTS] = {
3684     (dump_func)dump_new_process_reply,
3685     (dump_func)dump_get_new_process_info_reply,
3686     (dump_func)dump_new_thread_reply,
3687     (dump_func)dump_get_startup_info_reply,
3688     (dump_func)0,
3689     (dump_func)dump_init_thread_reply,
3690     (dump_func)dump_terminate_process_reply,
3691     (dump_func)dump_terminate_thread_reply,
3692     (dump_func)dump_get_process_info_reply,
3693     (dump_func)0,
3694     (dump_func)dump_get_thread_info_reply,
3695     (dump_func)0,
3696     (dump_func)dump_get_dll_info_reply,
3697     (dump_func)dump_suspend_thread_reply,
3698     (dump_func)dump_resume_thread_reply,
3699     (dump_func)0,
3700     (dump_func)0,
3701     (dump_func)dump_queue_apc_reply,
3702     (dump_func)dump_get_apc_reply,
3703     (dump_func)dump_get_apc_result_reply,
3704     (dump_func)0,
3705     (dump_func)dump_set_handle_info_reply,
3706     (dump_func)dump_dup_handle_reply,
3707     (dump_func)dump_open_process_reply,
3708     (dump_func)dump_open_thread_reply,
3709     (dump_func)dump_select_reply,
3710     (dump_func)dump_create_event_reply,
3711     (dump_func)0,
3712     (dump_func)dump_open_event_reply,
3713     (dump_func)dump_create_mutex_reply,
3714     (dump_func)dump_release_mutex_reply,
3715     (dump_func)dump_open_mutex_reply,
3716     (dump_func)dump_create_semaphore_reply,
3717     (dump_func)dump_release_semaphore_reply,
3718     (dump_func)dump_open_semaphore_reply,
3719     (dump_func)dump_create_file_reply,
3720     (dump_func)dump_open_file_object_reply,
3721     (dump_func)dump_alloc_file_handle_reply,
3722     (dump_func)dump_get_handle_fd_reply,
3723     (dump_func)dump_flush_file_reply,
3724     (dump_func)dump_lock_file_reply,
3725     (dump_func)0,
3726     (dump_func)dump_create_socket_reply,
3727     (dump_func)dump_accept_socket_reply,
3728     (dump_func)0,
3729     (dump_func)dump_get_socket_event_reply,
3730     (dump_func)0,
3731     (dump_func)0,
3732     (dump_func)dump_alloc_console_reply,
3733     (dump_func)0,
3734     (dump_func)dump_get_console_renderer_events_reply,
3735     (dump_func)dump_open_console_reply,
3736     (dump_func)dump_get_console_wait_event_reply,
3737     (dump_func)dump_get_console_mode_reply,
3738     (dump_func)0,
3739     (dump_func)0,
3740     (dump_func)dump_get_console_input_info_reply,
3741     (dump_func)0,
3742     (dump_func)dump_get_console_input_history_reply,
3743     (dump_func)dump_create_console_output_reply,
3744     (dump_func)0,
3745     (dump_func)dump_get_console_output_info_reply,
3746     (dump_func)dump_write_console_input_reply,
3747     (dump_func)dump_read_console_input_reply,
3748     (dump_func)dump_write_console_output_reply,
3749     (dump_func)dump_fill_console_output_reply,
3750     (dump_func)dump_read_console_output_reply,
3751     (dump_func)0,
3752     (dump_func)0,
3753     (dump_func)0,
3754     (dump_func)dump_read_change_reply,
3755     (dump_func)dump_create_mapping_reply,
3756     (dump_func)dump_open_mapping_reply,
3757     (dump_func)dump_get_mapping_info_reply,
3758     (dump_func)dump_create_snapshot_reply,
3759     (dump_func)dump_next_process_reply,
3760     (dump_func)dump_next_thread_reply,
3761     (dump_func)dump_next_module_reply,
3762     (dump_func)dump_wait_debug_event_reply,
3763     (dump_func)dump_queue_exception_event_reply,
3764     (dump_func)dump_get_exception_status_reply,
3765     (dump_func)0,
3766     (dump_func)0,
3767     (dump_func)0,
3768     (dump_func)dump_debug_break_reply,
3769     (dump_func)0,
3770     (dump_func)dump_read_process_memory_reply,
3771     (dump_func)0,
3772     (dump_func)dump_create_key_reply,
3773     (dump_func)dump_open_key_reply,
3774     (dump_func)0,
3775     (dump_func)0,
3776     (dump_func)dump_enum_key_reply,
3777     (dump_func)0,
3778     (dump_func)dump_get_key_value_reply,
3779     (dump_func)dump_enum_key_value_reply,
3780     (dump_func)0,
3781     (dump_func)0,
3782     (dump_func)0,
3783     (dump_func)0,
3784     (dump_func)0,
3785     (dump_func)dump_create_timer_reply,
3786     (dump_func)dump_open_timer_reply,
3787     (dump_func)dump_set_timer_reply,
3788     (dump_func)dump_cancel_timer_reply,
3789     (dump_func)dump_get_timer_info_reply,
3790     (dump_func)dump_get_thread_context_reply,
3791     (dump_func)dump_set_thread_context_reply,
3792     (dump_func)dump_get_selector_entry_reply,
3793     (dump_func)dump_add_atom_reply,
3794     (dump_func)0,
3795     (dump_func)dump_find_atom_reply,
3796     (dump_func)dump_get_atom_information_reply,
3797     (dump_func)0,
3798     (dump_func)0,
3799     (dump_func)dump_init_atom_table_reply,
3800     (dump_func)dump_get_msg_queue_reply,
3801     (dump_func)0,
3802     (dump_func)dump_set_queue_mask_reply,
3803     (dump_func)dump_get_queue_status_reply,
3804     (dump_func)dump_get_process_idle_event_reply,
3805     (dump_func)0,
3806     (dump_func)0,
3807     (dump_func)0,
3808     (dump_func)dump_get_message_reply,
3809     (dump_func)0,
3810     (dump_func)0,
3811     (dump_func)dump_get_message_reply_reply,
3812     (dump_func)dump_set_win_timer_reply,
3813     (dump_func)0,
3814     (dump_func)dump_get_serial_info_reply,
3815     (dump_func)0,
3816     (dump_func)0,
3817     (dump_func)0,
3818     (dump_func)dump_ioctl_reply,
3819     (dump_func)dump_create_named_pipe_reply,
3820     (dump_func)0,
3821     (dump_func)0,
3822     (dump_func)dump_get_named_pipe_info_reply,
3823     (dump_func)dump_create_window_reply,
3824     (dump_func)0,
3825     (dump_func)dump_get_desktop_window_reply,
3826     (dump_func)dump_set_window_owner_reply,
3827     (dump_func)dump_get_window_info_reply,
3828     (dump_func)dump_set_window_info_reply,
3829     (dump_func)dump_set_parent_reply,
3830     (dump_func)dump_get_window_parents_reply,
3831     (dump_func)dump_get_window_children_reply,
3832     (dump_func)dump_get_window_children_from_point_reply,
3833     (dump_func)dump_get_window_tree_reply,
3834     (dump_func)dump_set_window_pos_reply,
3835     (dump_func)dump_get_window_rectangles_reply,
3836     (dump_func)dump_get_window_text_reply,
3837     (dump_func)0,
3838     (dump_func)dump_get_windows_offset_reply,
3839     (dump_func)dump_get_visible_region_reply,
3840     (dump_func)dump_get_window_region_reply,
3841     (dump_func)0,
3842     (dump_func)dump_get_update_region_reply,
3843     (dump_func)0,
3844     (dump_func)0,
3845     (dump_func)0,
3846     (dump_func)dump_remove_window_property_reply,
3847     (dump_func)dump_get_window_property_reply,
3848     (dump_func)dump_get_window_properties_reply,
3849     (dump_func)dump_create_winstation_reply,
3850     (dump_func)dump_open_winstation_reply,
3851     (dump_func)0,
3852     (dump_func)dump_get_process_winstation_reply,
3853     (dump_func)0,
3854     (dump_func)dump_create_desktop_reply,
3855     (dump_func)dump_open_desktop_reply,
3856     (dump_func)0,
3857     (dump_func)dump_get_thread_desktop_reply,
3858     (dump_func)0,
3859     (dump_func)dump_set_user_object_info_reply,
3860     (dump_func)0,
3861     (dump_func)dump_get_thread_input_reply,
3862     (dump_func)dump_get_last_input_time_reply,
3863     (dump_func)dump_get_key_state_reply,
3864     (dump_func)0,
3865     (dump_func)dump_set_foreground_window_reply,
3866     (dump_func)dump_set_focus_window_reply,
3867     (dump_func)dump_set_active_window_reply,
3868     (dump_func)dump_set_capture_window_reply,
3869     (dump_func)dump_set_caret_window_reply,
3870     (dump_func)dump_set_caret_info_reply,
3871     (dump_func)dump_set_hook_reply,
3872     (dump_func)dump_remove_hook_reply,
3873     (dump_func)dump_start_hook_chain_reply,
3874     (dump_func)0,
3875     (dump_func)dump_get_hook_info_reply,
3876     (dump_func)0,
3877     (dump_func)dump_destroy_class_reply,
3878     (dump_func)dump_set_class_info_reply,
3879     (dump_func)dump_set_clipboard_info_reply,
3880     (dump_func)dump_open_token_reply,
3881     (dump_func)dump_set_global_windows_reply,
3882     (dump_func)dump_adjust_token_privileges_reply,
3883     (dump_func)dump_get_token_privileges_reply,
3884     (dump_func)dump_check_token_privileges_reply,
3885     (dump_func)dump_duplicate_token_reply,
3886     (dump_func)dump_access_check_reply,
3887     (dump_func)dump_get_token_user_reply,
3888     (dump_func)dump_get_token_groups_reply,
3889     (dump_func)0,
3890     (dump_func)dump_create_mailslot_reply,
3891     (dump_func)dump_set_mailslot_info_reply,
3892     (dump_func)dump_create_directory_reply,
3893     (dump_func)dump_open_directory_reply,
3894     (dump_func)dump_create_symlink_reply,
3895     (dump_func)dump_open_symlink_reply,
3896     (dump_func)dump_query_symlink_reply,
3897     (dump_func)dump_get_object_info_reply,
3898     (dump_func)dump_get_token_impersonation_level_reply,
3899     (dump_func)dump_allocate_locally_unique_id_reply,
3900 };
3901
3902 static const char * const req_names[REQ_NB_REQUESTS] = {
3903     "new_process",
3904     "get_new_process_info",
3905     "new_thread",
3906     "get_startup_info",
3907     "init_process_done",
3908     "init_thread",
3909     "terminate_process",
3910     "terminate_thread",
3911     "get_process_info",
3912     "set_process_info",
3913     "get_thread_info",
3914     "set_thread_info",
3915     "get_dll_info",
3916     "suspend_thread",
3917     "resume_thread",
3918     "load_dll",
3919     "unload_dll",
3920     "queue_apc",
3921     "get_apc",
3922     "get_apc_result",
3923     "close_handle",
3924     "set_handle_info",
3925     "dup_handle",
3926     "open_process",
3927     "open_thread",
3928     "select",
3929     "create_event",
3930     "event_op",
3931     "open_event",
3932     "create_mutex",
3933     "release_mutex",
3934     "open_mutex",
3935     "create_semaphore",
3936     "release_semaphore",
3937     "open_semaphore",
3938     "create_file",
3939     "open_file_object",
3940     "alloc_file_handle",
3941     "get_handle_fd",
3942     "flush_file",
3943     "lock_file",
3944     "unlock_file",
3945     "create_socket",
3946     "accept_socket",
3947     "set_socket_event",
3948     "get_socket_event",
3949     "enable_socket_event",
3950     "set_socket_deferred",
3951     "alloc_console",
3952     "free_console",
3953     "get_console_renderer_events",
3954     "open_console",
3955     "get_console_wait_event",
3956     "get_console_mode",
3957     "set_console_mode",
3958     "set_console_input_info",
3959     "get_console_input_info",
3960     "append_console_input_history",
3961     "get_console_input_history",
3962     "create_console_output",
3963     "set_console_output_info",
3964     "get_console_output_info",
3965     "write_console_input",
3966     "read_console_input",
3967     "write_console_output",
3968     "fill_console_output",
3969     "read_console_output",
3970     "move_console_output",
3971     "send_console_signal",
3972     "read_directory_changes",
3973     "read_change",
3974     "create_mapping",
3975     "open_mapping",
3976     "get_mapping_info",
3977     "create_snapshot",
3978     "next_process",
3979     "next_thread",
3980     "next_module",
3981     "wait_debug_event",
3982     "queue_exception_event",
3983     "get_exception_status",
3984     "output_debug_string",
3985     "continue_debug_event",
3986     "debug_process",
3987     "debug_break",
3988     "set_debugger_kill_on_exit",
3989     "read_process_memory",
3990     "write_process_memory",
3991     "create_key",
3992     "open_key",
3993     "delete_key",
3994     "flush_key",
3995     "enum_key",
3996     "set_key_value",
3997     "get_key_value",
3998     "enum_key_value",
3999     "delete_key_value",
4000     "load_registry",
4001     "unload_registry",
4002     "save_registry",
4003     "set_registry_notification",
4004     "create_timer",
4005     "open_timer",
4006     "set_timer",
4007     "cancel_timer",
4008     "get_timer_info",
4009     "get_thread_context",
4010     "set_thread_context",
4011     "get_selector_entry",
4012     "add_atom",
4013     "delete_atom",
4014     "find_atom",
4015     "get_atom_information",
4016     "set_atom_information",
4017     "empty_atom_table",
4018     "init_atom_table",
4019     "get_msg_queue",
4020     "set_queue_fd",
4021     "set_queue_mask",
4022     "get_queue_status",
4023     "get_process_idle_event",
4024     "send_message",
4025     "post_quit_message",
4026     "send_hardware_message",
4027     "get_message",
4028     "reply_message",
4029     "accept_hardware_message",
4030     "get_message_reply",
4031     "set_win_timer",
4032     "kill_win_timer",
4033     "get_serial_info",
4034     "set_serial_info",
4035     "register_async",
4036     "cancel_async",
4037     "ioctl",
4038     "create_named_pipe",
4039     "connect_named_pipe",
4040     "wait_named_pipe",
4041     "get_named_pipe_info",
4042     "create_window",
4043     "destroy_window",
4044     "get_desktop_window",
4045     "set_window_owner",
4046     "get_window_info",
4047     "set_window_info",
4048     "set_parent",
4049     "get_window_parents",
4050     "get_window_children",
4051     "get_window_children_from_point",
4052     "get_window_tree",
4053     "set_window_pos",
4054     "get_window_rectangles",
4055     "get_window_text",
4056     "set_window_text",
4057     "get_windows_offset",
4058     "get_visible_region",
4059     "get_window_region",
4060     "set_window_region",
4061     "get_update_region",
4062     "update_window_zorder",
4063     "redraw_window",
4064     "set_window_property",
4065     "remove_window_property",
4066     "get_window_property",
4067     "get_window_properties",
4068     "create_winstation",
4069     "open_winstation",
4070     "close_winstation",
4071     "get_process_winstation",
4072     "set_process_winstation",
4073     "create_desktop",
4074     "open_desktop",
4075     "close_desktop",
4076     "get_thread_desktop",
4077     "set_thread_desktop",
4078     "set_user_object_info",
4079     "attach_thread_input",
4080     "get_thread_input",
4081     "get_last_input_time",
4082     "get_key_state",
4083     "set_key_state",
4084     "set_foreground_window",
4085     "set_focus_window",
4086     "set_active_window",
4087     "set_capture_window",
4088     "set_caret_window",
4089     "set_caret_info",
4090     "set_hook",
4091     "remove_hook",
4092     "start_hook_chain",
4093     "finish_hook_chain",
4094     "get_hook_info",
4095     "create_class",
4096     "destroy_class",
4097     "set_class_info",
4098     "set_clipboard_info",
4099     "open_token",
4100     "set_global_windows",
4101     "adjust_token_privileges",
4102     "get_token_privileges",
4103     "check_token_privileges",
4104     "duplicate_token",
4105     "access_check",
4106     "get_token_user",
4107     "get_token_groups",
4108     "set_security_object",
4109     "create_mailslot",
4110     "set_mailslot_info",
4111     "create_directory",
4112     "open_directory",
4113     "create_symlink",
4114     "open_symlink",
4115     "query_symlink",
4116     "get_object_info",
4117     "get_token_impersonation_level",
4118     "allocate_locally_unique_id",
4119 };
4120
4121 static const struct
4122 {
4123     const char  *name;
4124     unsigned int value;
4125 } status_names[] =
4126 {
4127     { "ABANDONED_WAIT_0",            STATUS_ABANDONED_WAIT_0 },
4128     { "ACCESS_DENIED",               STATUS_ACCESS_DENIED },
4129     { "ACCESS_VIOLATION",            STATUS_ACCESS_VIOLATION },
4130     { "ALERTED",                     STATUS_ALERTED },
4131     { "ALIAS_EXISTS",                STATUS_ALIAS_EXISTS },
4132     { "BAD_DEVICE_TYPE",             STATUS_BAD_DEVICE_TYPE },
4133     { "BAD_IMPERSONATION_LEVEL",     STATUS_BAD_IMPERSONATION_LEVEL },
4134     { "BREAKPOINT",                  STATUS_BREAKPOINT },
4135     { "BUFFER_OVERFLOW",             STATUS_BUFFER_OVERFLOW },
4136     { "BUFFER_TOO_SMALL",            STATUS_BUFFER_TOO_SMALL },
4137     { "CANCELLED",                   STATUS_CANCELLED },
4138     { "CANT_OPEN_ANONYMOUS",         STATUS_CANT_OPEN_ANONYMOUS },
4139     { "CHILD_MUST_BE_VOLATILE",      STATUS_CHILD_MUST_BE_VOLATILE },
4140     { "DEVICE_BUSY",                 STATUS_DEVICE_BUSY },
4141     { "DIRECTORY_NOT_EMPTY",         STATUS_DIRECTORY_NOT_EMPTY },
4142     { "DISK_FULL",                   STATUS_DISK_FULL },
4143     { "DLL_NOT_FOUND",               STATUS_DLL_NOT_FOUND },
4144     { "ERROR_CLASS_ALREADY_EXISTS",  0xc0010000 | ERROR_CLASS_ALREADY_EXISTS },
4145     { "ERROR_CLASS_DOES_NOT_EXIST",  0xc0010000 | ERROR_CLASS_DOES_NOT_EXIST },
4146     { "ERROR_CLASS_HAS_WINDOWS",     0xc0010000 | ERROR_CLASS_HAS_WINDOWS },
4147     { "ERROR_CLIPBOARD_NOT_OPEN",    0xc0010000 | ERROR_CLIPBOARD_NOT_OPEN },
4148     { "ERROR_INVALID_INDEX",         0xc0010000 | ERROR_INVALID_INDEX },
4149     { "ERROR_INVALID_WINDOW_HANDLE", 0xc0010000 | ERROR_INVALID_WINDOW_HANDLE },
4150     { "FILE_IS_A_DIRECTORY",         STATUS_FILE_IS_A_DIRECTORY },
4151     { "FILE_LOCK_CONFLICT",          STATUS_FILE_LOCK_CONFLICT },
4152     { "GENERIC_NOT_MAPPED",          STATUS_GENERIC_NOT_MAPPED },
4153     { "HANDLES_CLOSED",              STATUS_HANDLES_CLOSED },
4154     { "HANDLE_NOT_CLOSABLE",         STATUS_HANDLE_NOT_CLOSABLE },
4155     { "ILLEGAL_FUNCTION",            STATUS_ILLEGAL_FUNCTION },
4156     { "INSTANCE_NOT_AVAILABLE",      STATUS_INSTANCE_NOT_AVAILABLE },
4157     { "INVALID_CID",                 STATUS_INVALID_CID },
4158     { "INVALID_FILE_FOR_SECTION",    STATUS_INVALID_FILE_FOR_SECTION },
4159     { "INVALID_HANDLE",              STATUS_INVALID_HANDLE },
4160     { "INVALID_PARAMETER",           STATUS_INVALID_PARAMETER },
4161     { "INVALID_SECURITY_DESCR",      STATUS_INVALID_SECURITY_DESCR },
4162     { "IO_TIMEOUT",                  STATUS_IO_TIMEOUT },
4163     { "KEY_DELETED",                 STATUS_KEY_DELETED },
4164     { "MAPPED_FILE_SIZE_ZERO",       STATUS_MAPPED_FILE_SIZE_ZERO },
4165     { "MEDIA_WRITE_PROTECTED",       STATUS_MEDIA_WRITE_PROTECTED },
4166     { "MUTANT_NOT_OWNED",            STATUS_MUTANT_NOT_OWNED },
4167     { "NAME_TOO_LONG",               STATUS_NAME_TOO_LONG },
4168     { "NOTIFY_ENUM_DIR",             STATUS_NOTIFY_ENUM_DIR },
4169     { "NOT_ALL_ASSIGNED",            STATUS_NOT_ALL_ASSIGNED },
4170     { "NOT_A_DIRECTORY",             STATUS_NOT_A_DIRECTORY },
4171     { "NOT_IMPLEMENTED",             STATUS_NOT_IMPLEMENTED },
4172     { "NOT_REGISTRY_FILE",           STATUS_NOT_REGISTRY_FILE },
4173     { "NOT_SUPPORTED",               STATUS_NOT_SUPPORTED },
4174     { "NO_DATA_DETECTED",            STATUS_NO_DATA_DETECTED },
4175     { "NO_IMPERSONATION_TOKEN",      STATUS_NO_IMPERSONATION_TOKEN },
4176     { "NO_MEMORY",                   STATUS_NO_MEMORY },
4177     { "NO_MORE_ENTRIES",             STATUS_NO_MORE_ENTRIES },
4178     { "NO_MORE_FILES",               STATUS_NO_MORE_FILES },
4179     { "NO_SUCH_DEVICE",              STATUS_NO_SUCH_DEVICE },
4180     { "NO_SUCH_FILE",                STATUS_NO_SUCH_FILE },
4181     { "NO_TOKEN",                    STATUS_NO_TOKEN },
4182     { "OBJECT_NAME_COLLISION",       STATUS_OBJECT_NAME_COLLISION },
4183     { "OBJECT_NAME_EXISTS",          STATUS_OBJECT_NAME_EXISTS },
4184     { "OBJECT_NAME_INVALID",         STATUS_OBJECT_NAME_INVALID },
4185     { "OBJECT_NAME_NOT_FOUND",       STATUS_OBJECT_NAME_NOT_FOUND },
4186     { "OBJECT_PATH_INVALID",         STATUS_OBJECT_PATH_INVALID },
4187     { "OBJECT_PATH_NOT_FOUND",       STATUS_OBJECT_PATH_NOT_FOUND },
4188     { "OBJECT_PATH_SYNTAX_BAD",      STATUS_OBJECT_PATH_SYNTAX_BAD },
4189     { "OBJECT_TYPE_MISMATCH",        STATUS_OBJECT_TYPE_MISMATCH },
4190     { "PENDING",                     STATUS_PENDING },
4191     { "PIPE_BUSY",                   STATUS_PIPE_BUSY },
4192     { "PIPE_CONNECTED",              STATUS_PIPE_CONNECTED },
4193     { "PIPE_DISCONNECTED",           STATUS_PIPE_DISCONNECTED },
4194     { "PIPE_LISTENING",              STATUS_PIPE_LISTENING },
4195     { "PIPE_NOT_AVAILABLE",          STATUS_PIPE_NOT_AVAILABLE },
4196     { "PRIVILEGE_NOT_HELD",          STATUS_PRIVILEGE_NOT_HELD },
4197     { "PROCESS_IS_TERMINATING",      STATUS_PROCESS_IS_TERMINATING },
4198     { "SECTION_TOO_BIG",             STATUS_SECTION_TOO_BIG },
4199     { "SEMAPHORE_LIMIT_EXCEEDED",    STATUS_SEMAPHORE_LIMIT_EXCEEDED },
4200     { "SHARING_VIOLATION",           STATUS_SHARING_VIOLATION },
4201     { "SUSPEND_COUNT_EXCEEDED",      STATUS_SUSPEND_COUNT_EXCEEDED },
4202     { "THREAD_IS_TERMINATING",       STATUS_THREAD_IS_TERMINATING },
4203     { "TIMEOUT",                     STATUS_TIMEOUT },
4204     { "TOO_MANY_OPENED_FILES",       STATUS_TOO_MANY_OPENED_FILES },
4205     { "UNSUCCESSFUL",                STATUS_UNSUCCESSFUL },
4206     { "USER_APC",                    STATUS_USER_APC },
4207     { "VOLUME_DISMOUNTED",           STATUS_VOLUME_DISMOUNTED },
4208     { "WAS_LOCKED",                  STATUS_WAS_LOCKED },
4209     { NULL, 0 }
4210 };
4211
4212 /* ### make_requests end ### */
4213 /* Everything above this line is generated automatically by tools/make_requests */
4214
4215 static const char *get_status_name( unsigned int status )
4216 {
4217     int i;
4218     static char buffer[10];
4219
4220     if (status)
4221     {
4222         for (i = 0; status_names[i].name; i++)
4223             if (status_names[i].value == status) return status_names[i].name;
4224     }
4225     sprintf( buffer, "%x", status );
4226     return buffer;
4227 }
4228
4229 void trace_request(void)
4230 {
4231     enum request req = current->req.request_header.req;
4232     if (req < REQ_NB_REQUESTS)
4233     {
4234         fprintf( stderr, "%04x: %s(", current->id, req_names[req] );
4235         if (req_dumpers[req])
4236         {
4237             cur_data = get_req_data();
4238             cur_size = get_req_data_size();
4239             req_dumpers[req]( &current->req );
4240         }
4241         fprintf( stderr, " )\n" );
4242     }
4243     else fprintf( stderr, "%04x: %d(?)\n", current->id, req );
4244 }
4245
4246 void trace_reply( enum request req, const union generic_reply *reply )
4247 {
4248     if (req < REQ_NB_REQUESTS)
4249     {
4250         fprintf( stderr, "%04x: %s() = %s",
4251                  current->id, req_names[req], get_status_name(current->error) );
4252         if (reply_dumpers[req])
4253         {
4254             fprintf( stderr, " {" );
4255             cur_data = current->reply_data;
4256             cur_size = reply->reply_header.reply_size;
4257             reply_dumpers[req]( reply );
4258             fprintf( stderr, " }" );
4259         }
4260         fputc( '\n', stderr );
4261     }
4262     else fprintf( stderr, "%04x: %d() = %s\n",
4263                   current->id, req, get_status_name(current->error) );
4264 }