ok() does not support '%S'. Store the Ansi version, convert to Unicode
[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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  */
20
21 #include "config.h"
22 #include "wine/port.h"
23
24 #include <ctype.h>
25 #include <stdio.h>
26 #include <sys/types.h>
27 #include <sys/uio.h>
28
29 #include "windef.h"
30 #include "winbase.h"
31 #include "wincon.h"
32 #include "request.h"
33 #include "unicode.h"
34
35 static int cur_pos;
36 static const void *cur_data;
37 static int cur_size;
38
39 /* utility functions */
40
41 inline static void remove_data( size_t size )
42 {
43     cur_data = (const char *)cur_data + size;
44     cur_size -= size;
45 }
46
47 static void dump_uints( const int *ptr, int len )
48 {
49     fputc( '{', stderr );
50     while (len > 0)
51     {
52         fprintf( stderr, "%08x", *ptr++ );
53         if (--len) fputc( ',', stderr );
54     }
55     fputc( '}', stderr );
56 }
57
58 static void dump_rectangle( const rectangle_t *rect )
59 {
60     fprintf( stderr, "{%d,%d;%d,%d}",
61              rect->left, rect->top, rect->right, rect->bottom );
62 }
63
64 static void dump_char_info( const char_info_t *info )
65 {
66     fprintf( stderr, "{'" );
67     dump_strW( &info->ch, 1, stderr, "\'\'" );
68     fprintf( stderr, "',%04x}", info->attr );
69 }
70
71 static void dump_context( const CONTEXT *context )
72 {
73 #ifdef __i386__
74     fprintf( stderr, "{flags=%08lx,eax=%08lx,ebx=%08lx,ecx=%08lx,edx=%08lx,esi=%08lx,edi=%08lx,"
75              "ebp=%08lx,eip=%08lx,esp=%08lx,eflags=%08lx,cs=%04lx,ds=%04lx,es=%04lx,"
76              "fs=%04lx,gs=%04lx,dr0=%08lx,dr1=%08lx,dr2=%08lx,dr3=%08lx,dr6=%08lx,dr7=%08lx,",
77              context->ContextFlags, context->Eax, context->Ebx, context->Ecx, context->Edx,
78              context->Esi, context->Edi, context->Ebp, context->Eip, context->Esp, context->EFlags,
79              context->SegCs, context->SegDs, context->SegEs, context->SegFs, context->SegGs,
80              context->Dr0, context->Dr1, context->Dr2, context->Dr3, context->Dr6, context->Dr7 );
81     fprintf( stderr, "float=" );
82     dump_uints( (int *)&context->FloatSave, sizeof(context->FloatSave) / sizeof(int) );
83     fprintf( stderr, "}" );
84 #else
85     dump_uints( (int *)context, sizeof(*context) / sizeof(int) );
86 #endif
87 }
88
89 static void dump_exc_record( const EXCEPTION_RECORD *rec )
90 {
91     int i;
92     fprintf( stderr, "{code=%lx,flags=%lx,rec=%p,addr=%p,params={",
93              rec->ExceptionCode, rec->ExceptionFlags, rec->ExceptionRecord,
94              rec->ExceptionAddress );
95     for (i = 0; i < min(rec->NumberParameters,EXCEPTION_MAXIMUM_PARAMETERS); i++)
96     {
97         if (i) fputc( ',', stderr );
98         fprintf( stderr, "%lx", rec->ExceptionInformation[i] );
99     }
100     fputc( '}', stderr );
101 }
102
103 static void dump_varargs_ints( size_t size )
104 {
105     const int *data = cur_data;
106     size_t len = size / sizeof(*data);
107
108     fputc( '{', stderr );
109     while (len > 0)
110     {
111         fprintf( stderr, "%d", *data++ );
112         if (--len) fputc( ',', stderr );
113     }
114     fputc( '}', stderr );
115     remove_data( size );
116 }
117
118 static void dump_varargs_handles( size_t size )
119 {
120     const obj_handle_t *data = cur_data;
121     size_t len = size / sizeof(*data);
122
123     fputc( '{', stderr );
124     while (len > 0)
125     {
126         fprintf( stderr, "%p", *data++ );
127         if (--len) fputc( ',', stderr );
128     }
129     fputc( '}', stderr );
130     remove_data( size );
131 }
132
133 static void dump_varargs_ptrs( size_t size )
134 {
135     void * const *data = cur_data;
136     size_t len = size / sizeof(*data);
137
138     fputc( '{', stderr );
139     while (len > 0)
140     {
141         fprintf( stderr, "%p", *data++ );
142         if (--len) fputc( ',', stderr );
143     }
144     fputc( '}', stderr );
145     remove_data( size );
146 }
147
148 static void dump_varargs_user_handles( size_t size )
149 {
150     const user_handle_t *data = cur_data;
151     size_t len = size / sizeof(*data);
152
153     fputc( '{', stderr );
154     while (len > 0)
155     {
156         fprintf( stderr, "%p", *data++ );
157         if (--len) fputc( ',', stderr );
158     }
159     fputc( '}', stderr );
160     remove_data( size );
161 }
162
163 static void dump_varargs_bytes( size_t size )
164 {
165     const unsigned char *data = cur_data;
166     size_t len = size;
167
168     fputc( '{', stderr );
169     while (len > 0)
170     {
171         fprintf( stderr, "%02x", *data++ );
172         if (--len) fputc( ',', stderr );
173     }
174     fputc( '}', stderr );
175     remove_data( size );
176 }
177
178 static void dump_varargs_string( size_t size )
179 {
180     fprintf( stderr, "\"%.*s\"", (int)size, (char *)cur_data );
181     remove_data( size );
182 }
183
184 static void dump_varargs_unicode_str( size_t size )
185 {
186     fprintf( stderr, "L\"" );
187     dump_strW( cur_data, size / sizeof(WCHAR), stderr, "\"\"" );
188     fputc( '\"', stderr );
189     remove_data( size );
190 }
191
192 static void dump_varargs_context( size_t size )
193 {
194     dump_context( cur_data );
195     remove_data( size );
196 }
197
198 static void dump_varargs_exc_event( size_t size )
199 {
200     const CONTEXT *ptr = cur_data;
201     fprintf( stderr, "{context=" );
202     dump_context( ptr );
203     fprintf( stderr, ",rec=" );
204     dump_exc_record( (EXCEPTION_RECORD *)(ptr + 1) );
205     fputc( '}', stderr );
206     remove_data( size );
207 }
208
209 static void dump_varargs_debug_event( size_t size )
210 {
211     const debug_event_t *event = cur_data;
212
213     if (!size)
214     {
215         fprintf( stderr, "{}" );
216         return;
217     }
218     switch(event->code)
219     {
220     case EXCEPTION_DEBUG_EVENT:
221         fprintf( stderr, "{exception," );
222         dump_exc_record( &event->info.exception.record );
223         fprintf( stderr, ",first=%d}", event->info.exception.first );
224         break;
225     case CREATE_THREAD_DEBUG_EVENT:
226         fprintf( stderr, "{create_thread,thread=%p,teb=%p,start=%p}",
227                  event->info.create_thread.handle, event->info.create_thread.teb,
228                  event->info.create_thread.start );
229         break;
230     case CREATE_PROCESS_DEBUG_EVENT:
231         fprintf( stderr, "{create_process,file=%p,process=%p,thread=%p,base=%p,offset=%d,"
232                          "size=%d,teb=%p,start=%p,name=%p,unicode=%d}",
233                  event->info.create_process.file, event->info.create_process.process,
234                  event->info.create_process.thread, event->info.create_process.base,
235                  event->info.create_process.dbg_offset, event->info.create_process.dbg_size,
236                  event->info.create_process.teb, event->info.create_process.start,
237                  event->info.create_process.name, event->info.create_process.unicode );
238         break;
239     case EXIT_THREAD_DEBUG_EVENT:
240         fprintf( stderr, "{exit_thread,code=%d}", event->info.exit.exit_code );
241         break;
242     case EXIT_PROCESS_DEBUG_EVENT:
243         fprintf( stderr, "{exit_process,code=%d}", event->info.exit.exit_code );
244         break;
245     case LOAD_DLL_DEBUG_EVENT:
246         fprintf( stderr, "{load_dll,file=%p,base=%p,offset=%d,size=%d,name=%p,unicode=%d}",
247                  event->info.load_dll.handle, event->info.load_dll.base,
248                  event->info.load_dll.dbg_offset, event->info.load_dll.dbg_size,
249                  event->info.load_dll.name, event->info.load_dll.unicode );
250         break;
251     case UNLOAD_DLL_DEBUG_EVENT:
252         fprintf( stderr, "{unload_dll,base=%p}", event->info.unload_dll.base );
253         break;
254     case OUTPUT_DEBUG_STRING_EVENT:
255         fprintf( stderr, "{output_string,data=%p,unicode=%d,len=%d}",
256                  event->info.output_string.string, event->info.output_string.unicode,
257                  event->info.output_string.length );
258         break;
259     case RIP_EVENT:
260         fprintf( stderr, "{rip,err=%d,type=%d}",
261                  event->info.rip_info.error, event->info.rip_info.type );
262         break;
263     case 0:  /* zero is the code returned on timeouts */
264         fprintf( stderr, "{}" );
265         break;
266     default:
267         fprintf( stderr, "{code=??? (%d)}", event->code );
268         break;
269     }
270     remove_data( size );
271 }
272
273 static void dump_varargs_startup_info( size_t size )
274 {
275     const startup_info_t *ptr = cur_data;
276     startup_info_t info;
277
278     if (size < sizeof(info.size))
279     {
280         fprintf( stderr, "{}" );
281         return;
282     }
283     if (size > ptr->size) size = ptr->size;
284     memset( &info, 0, sizeof(info) );
285     memcpy( &info, ptr, min( size, sizeof(info) ));
286
287     fprintf( stderr, "{size=%d", info.size );
288     fprintf( stderr, ",x=%d", info.x );
289     fprintf( stderr, ",y=%d", info.y );
290     fprintf( stderr, ",cx=%d", info.cx );
291     fprintf( stderr, ",cy=%d", info.cy );
292     fprintf( stderr, ",x_chars=%d", info.x_chars );
293     fprintf( stderr, ",y_chars=%d", info.y_chars );
294     fprintf( stderr, ",attr=%d", info.attribute );
295     fprintf( stderr, ",cmd_show=%d", info.cmd_show );
296     fprintf( stderr, ",flags=%x", info.flags );
297     remove_data( size );
298     fprintf( stderr, ",filename=" );
299     /* FIXME: these should be unicode */
300     dump_varargs_string( min(cur_size,info.filename_len) );
301     fprintf( stderr, ",cmdline=" );
302     dump_varargs_string( min(cur_size,info.cmdline_len) );
303     fprintf( stderr, ",desktop=" );
304     dump_varargs_string( min(cur_size,info.desktop_len) );
305     fprintf( stderr, ",title=" );
306     dump_varargs_string( min(cur_size,info.title_len) );
307     fputc( '}', stderr );
308 }
309
310 static void dump_varargs_input_records( size_t size )
311 {
312     const INPUT_RECORD *rec = cur_data;
313     size_t len = size / sizeof(*rec);
314
315     fputc( '{', stderr );
316     while (len > 0)
317     {
318         fprintf( stderr, "{%04x,...}", rec->EventType );
319         rec++;
320         if (--len) fputc( ',', stderr );
321     }
322     fputc( '}', stderr );
323     remove_data( size );
324 }
325
326 static void dump_varargs_properties( size_t size )
327 {
328     const property_data_t *prop = cur_data;
329     size_t len = size / sizeof(*prop);
330
331     fputc( '{', stderr );
332     while (len > 0)
333     {
334         fprintf( stderr, "{atom=%04x,str=%d,handle=%p}",
335                  prop->atom, prop->string, prop->handle );
336         prop++;
337         if (--len) fputc( ',', stderr );
338     }
339     fputc( '}', stderr );
340     remove_data( size );
341 }
342
343 typedef void (*dump_func)( const void *req );
344
345 /* Everything below this line is generated automatically by tools/make_requests */
346 /* ### make_requests begin ### */
347
348 static void dump_new_process_request( const struct new_process_request *req )
349 {
350     fprintf( stderr, " inherit_all=%d,", req->inherit_all );
351     fprintf( stderr, " use_handles=%d,", req->use_handles );
352     fprintf( stderr, " create_flags=%d,", req->create_flags );
353     fprintf( stderr, " exe_file=%p,", req->exe_file );
354     fprintf( stderr, " hstdin=%p,", req->hstdin );
355     fprintf( stderr, " hstdout=%p,", req->hstdout );
356     fprintf( stderr, " hstderr=%p,", req->hstderr );
357     fprintf( stderr, " info=" );
358     dump_varargs_startup_info( cur_size );
359 }
360
361 static void dump_new_process_reply( const struct new_process_reply *req )
362 {
363     fprintf( stderr, " info=%p", req->info );
364 }
365
366 static void dump_get_new_process_info_request( const struct get_new_process_info_request *req )
367 {
368     fprintf( stderr, " info=%p,", req->info );
369     fprintf( stderr, " pinherit=%d,", req->pinherit );
370     fprintf( stderr, " tinherit=%d", req->tinherit );
371 }
372
373 static void dump_get_new_process_info_reply( const struct get_new_process_info_reply *req )
374 {
375     fprintf( stderr, " pid=%08x,", req->pid );
376     fprintf( stderr, " phandle=%p,", req->phandle );
377     fprintf( stderr, " tid=%08x,", req->tid );
378     fprintf( stderr, " thandle=%p,", req->thandle );
379     fprintf( stderr, " success=%d", req->success );
380 }
381
382 static void dump_new_thread_request( const struct new_thread_request *req )
383 {
384     fprintf( stderr, " suspend=%d,", req->suspend );
385     fprintf( stderr, " inherit=%d,", req->inherit );
386     fprintf( stderr, " request_fd=%d", req->request_fd );
387 }
388
389 static void dump_new_thread_reply( const struct new_thread_reply *req )
390 {
391     fprintf( stderr, " tid=%08x,", req->tid );
392     fprintf( stderr, " handle=%p", req->handle );
393 }
394
395 static void dump_boot_done_request( const struct boot_done_request *req )
396 {
397     fprintf( stderr, " debug_level=%d", req->debug_level );
398 }
399
400 static void dump_init_process_request( const struct init_process_request *req )
401 {
402     fprintf( stderr, " ldt_copy=%p,", req->ldt_copy );
403     fprintf( stderr, " ppid=%d", req->ppid );
404 }
405
406 static void dump_init_process_reply( const struct init_process_reply *req )
407 {
408     fprintf( stderr, " create_flags=%d,", req->create_flags );
409     fprintf( stderr, " server_start=%08x,", req->server_start );
410     fprintf( stderr, " info_size=%d,", req->info_size );
411     fprintf( stderr, " exe_file=%p,", req->exe_file );
412     fprintf( stderr, " hstdin=%p,", req->hstdin );
413     fprintf( stderr, " hstdout=%p,", req->hstdout );
414     fprintf( stderr, " hstderr=%p", req->hstderr );
415 }
416
417 static void dump_get_startup_info_request( const struct get_startup_info_request *req )
418 {
419 }
420
421 static void dump_get_startup_info_reply( const struct get_startup_info_reply *req )
422 {
423     fprintf( stderr, " info=" );
424     dump_varargs_startup_info( cur_size );
425 }
426
427 static void dump_init_process_done_request( const struct init_process_done_request *req )
428 {
429     fprintf( stderr, " module=%p,", req->module );
430     fprintf( stderr, " module_size=%d,", req->module_size );
431     fprintf( stderr, " entry=%p,", req->entry );
432     fprintf( stderr, " name=%p,", req->name );
433     fprintf( stderr, " exe_file=%p,", req->exe_file );
434     fprintf( stderr, " gui=%d,", req->gui );
435     fprintf( stderr, " filename=" );
436     dump_varargs_string( cur_size );
437 }
438
439 static void dump_init_process_done_reply( const struct init_process_done_reply *req )
440 {
441     fprintf( stderr, " debugged=%d", req->debugged );
442 }
443
444 static void dump_init_thread_request( const struct init_thread_request *req )
445 {
446     fprintf( stderr, " unix_pid=%d,", req->unix_pid );
447     fprintf( stderr, " teb=%p,", req->teb );
448     fprintf( stderr, " entry=%p,", req->entry );
449     fprintf( stderr, " reply_fd=%d,", req->reply_fd );
450     fprintf( stderr, " wait_fd=%d", req->wait_fd );
451 }
452
453 static void dump_init_thread_reply( const struct init_thread_reply *req )
454 {
455     fprintf( stderr, " pid=%08x,", req->pid );
456     fprintf( stderr, " tid=%08x,", req->tid );
457     fprintf( stderr, " boot=%d,", req->boot );
458     fprintf( stderr, " version=%d", req->version );
459 }
460
461 static void dump_terminate_process_request( const struct terminate_process_request *req )
462 {
463     fprintf( stderr, " handle=%p,", req->handle );
464     fprintf( stderr, " exit_code=%d", req->exit_code );
465 }
466
467 static void dump_terminate_process_reply( const struct terminate_process_reply *req )
468 {
469     fprintf( stderr, " self=%d", req->self );
470 }
471
472 static void dump_terminate_thread_request( const struct terminate_thread_request *req )
473 {
474     fprintf( stderr, " handle=%p,", req->handle );
475     fprintf( stderr, " exit_code=%d", req->exit_code );
476 }
477
478 static void dump_terminate_thread_reply( const struct terminate_thread_reply *req )
479 {
480     fprintf( stderr, " self=%d,", req->self );
481     fprintf( stderr, " last=%d", req->last );
482 }
483
484 static void dump_get_process_info_request( const struct get_process_info_request *req )
485 {
486     fprintf( stderr, " handle=%p", req->handle );
487 }
488
489 static void dump_get_process_info_reply( const struct get_process_info_reply *req )
490 {
491     fprintf( stderr, " pid=%08x,", req->pid );
492     fprintf( stderr, " debugged=%d,", req->debugged );
493     fprintf( stderr, " exit_code=%d,", req->exit_code );
494     fprintf( stderr, " priority=%d,", req->priority );
495     fprintf( stderr, " process_affinity=%d,", req->process_affinity );
496     fprintf( stderr, " system_affinity=%d", req->system_affinity );
497 }
498
499 static void dump_set_process_info_request( const struct set_process_info_request *req )
500 {
501     fprintf( stderr, " handle=%p,", req->handle );
502     fprintf( stderr, " mask=%d,", req->mask );
503     fprintf( stderr, " priority=%d,", req->priority );
504     fprintf( stderr, " affinity=%d", req->affinity );
505 }
506
507 static void dump_get_thread_info_request( const struct get_thread_info_request *req )
508 {
509     fprintf( stderr, " handle=%p,", req->handle );
510     fprintf( stderr, " tid_in=%08x", req->tid_in );
511 }
512
513 static void dump_get_thread_info_reply( const struct get_thread_info_reply *req )
514 {
515     fprintf( stderr, " tid=%08x,", req->tid );
516     fprintf( stderr, " teb=%p,", req->teb );
517     fprintf( stderr, " exit_code=%d,", req->exit_code );
518     fprintf( stderr, " priority=%d,", req->priority );
519     fprintf( stderr, " creation_time=%ld,", req->creation_time );
520     fprintf( stderr, " exit_time=%ld", req->exit_time );
521 }
522
523 static void dump_set_thread_info_request( const struct set_thread_info_request *req )
524 {
525     fprintf( stderr, " handle=%p,", req->handle );
526     fprintf( stderr, " mask=%d,", req->mask );
527     fprintf( stderr, " priority=%d,", req->priority );
528     fprintf( stderr, " affinity=%d", req->affinity );
529 }
530
531 static void dump_get_dll_info_request( const struct get_dll_info_request *req )
532 {
533     fprintf( stderr, " handle=%p,", req->handle );
534     fprintf( stderr, " base_address=%p", req->base_address );
535 }
536
537 static void dump_get_dll_info_reply( const struct get_dll_info_reply *req )
538 {
539     fprintf( stderr, " size=%d,", req->size );
540     fprintf( stderr, " entry_point=%p,", req->entry_point );
541     fprintf( stderr, " filename=" );
542     dump_varargs_string( cur_size );
543 }
544
545 static void dump_suspend_thread_request( const struct suspend_thread_request *req )
546 {
547     fprintf( stderr, " handle=%p", req->handle );
548 }
549
550 static void dump_suspend_thread_reply( const struct suspend_thread_reply *req )
551 {
552     fprintf( stderr, " count=%d", req->count );
553 }
554
555 static void dump_resume_thread_request( const struct resume_thread_request *req )
556 {
557     fprintf( stderr, " handle=%p", req->handle );
558 }
559
560 static void dump_resume_thread_reply( const struct resume_thread_reply *req )
561 {
562     fprintf( stderr, " count=%d", req->count );
563 }
564
565 static void dump_load_dll_request( const struct load_dll_request *req )
566 {
567     fprintf( stderr, " handle=%p,", req->handle );
568     fprintf( stderr, " base=%p,", req->base );
569     fprintf( stderr, " size=%d,", req->size );
570     fprintf( stderr, " dbg_offset=%d,", req->dbg_offset );
571     fprintf( stderr, " dbg_size=%d,", req->dbg_size );
572     fprintf( stderr, " name=%p,", req->name );
573     fprintf( stderr, " filename=" );
574     dump_varargs_string( cur_size );
575 }
576
577 static void dump_unload_dll_request( const struct unload_dll_request *req )
578 {
579     fprintf( stderr, " base=%p", req->base );
580 }
581
582 static void dump_queue_apc_request( const struct queue_apc_request *req )
583 {
584     fprintf( stderr, " handle=%p,", req->handle );
585     fprintf( stderr, " user=%d,", req->user );
586     fprintf( stderr, " func=%p,", req->func );
587     fprintf( stderr, " param=%p", req->param );
588 }
589
590 static void dump_get_apc_request( const struct get_apc_request *req )
591 {
592     fprintf( stderr, " alertable=%d", req->alertable );
593 }
594
595 static void dump_get_apc_reply( const struct get_apc_reply *req )
596 {
597     fprintf( stderr, " func=%p,", req->func );
598     fprintf( stderr, " type=%d,", req->type );
599     fprintf( stderr, " args=" );
600     dump_varargs_ptrs( cur_size );
601 }
602
603 static void dump_close_handle_request( const struct close_handle_request *req )
604 {
605     fprintf( stderr, " handle=%p", req->handle );
606 }
607
608 static void dump_close_handle_reply( const struct close_handle_reply *req )
609 {
610     fprintf( stderr, " fd=%d", req->fd );
611 }
612
613 static void dump_set_handle_info_request( const struct set_handle_info_request *req )
614 {
615     fprintf( stderr, " handle=%p,", req->handle );
616     fprintf( stderr, " flags=%d,", req->flags );
617     fprintf( stderr, " mask=%d,", req->mask );
618     fprintf( stderr, " fd=%d", req->fd );
619 }
620
621 static void dump_set_handle_info_reply( const struct set_handle_info_reply *req )
622 {
623     fprintf( stderr, " old_flags=%d,", req->old_flags );
624     fprintf( stderr, " cur_fd=%d", req->cur_fd );
625 }
626
627 static void dump_dup_handle_request( const struct dup_handle_request *req )
628 {
629     fprintf( stderr, " src_process=%p,", req->src_process );
630     fprintf( stderr, " src_handle=%p,", req->src_handle );
631     fprintf( stderr, " dst_process=%p,", req->dst_process );
632     fprintf( stderr, " access=%08x,", req->access );
633     fprintf( stderr, " inherit=%d,", req->inherit );
634     fprintf( stderr, " options=%d", req->options );
635 }
636
637 static void dump_dup_handle_reply( const struct dup_handle_reply *req )
638 {
639     fprintf( stderr, " handle=%p,", req->handle );
640     fprintf( stderr, " fd=%d", req->fd );
641 }
642
643 static void dump_open_process_request( const struct open_process_request *req )
644 {
645     fprintf( stderr, " pid=%08x,", req->pid );
646     fprintf( stderr, " access=%08x,", req->access );
647     fprintf( stderr, " inherit=%d", req->inherit );
648 }
649
650 static void dump_open_process_reply( const struct open_process_reply *req )
651 {
652     fprintf( stderr, " handle=%p", req->handle );
653 }
654
655 static void dump_open_thread_request( const struct open_thread_request *req )
656 {
657     fprintf( stderr, " tid=%08x,", req->tid );
658     fprintf( stderr, " access=%08x,", req->access );
659     fprintf( stderr, " inherit=%d", req->inherit );
660 }
661
662 static void dump_open_thread_reply( const struct open_thread_reply *req )
663 {
664     fprintf( stderr, " handle=%p", req->handle );
665 }
666
667 static void dump_select_request( const struct select_request *req )
668 {
669     fprintf( stderr, " flags=%d,", req->flags );
670     fprintf( stderr, " cookie=%p,", req->cookie );
671     fprintf( stderr, " sec=%d,", req->sec );
672     fprintf( stderr, " usec=%d,", req->usec );
673     fprintf( stderr, " handles=" );
674     dump_varargs_handles( cur_size );
675 }
676
677 static void dump_create_event_request( const struct create_event_request *req )
678 {
679     fprintf( stderr, " manual_reset=%d,", req->manual_reset );
680     fprintf( stderr, " initial_state=%d,", req->initial_state );
681     fprintf( stderr, " inherit=%d,", req->inherit );
682     fprintf( stderr, " name=" );
683     dump_varargs_unicode_str( cur_size );
684 }
685
686 static void dump_create_event_reply( const struct create_event_reply *req )
687 {
688     fprintf( stderr, " handle=%p", req->handle );
689 }
690
691 static void dump_event_op_request( const struct event_op_request *req )
692 {
693     fprintf( stderr, " handle=%p,", req->handle );
694     fprintf( stderr, " op=%d", req->op );
695 }
696
697 static void dump_open_event_request( const struct open_event_request *req )
698 {
699     fprintf( stderr, " access=%08x,", req->access );
700     fprintf( stderr, " inherit=%d,", req->inherit );
701     fprintf( stderr, " name=" );
702     dump_varargs_unicode_str( cur_size );
703 }
704
705 static void dump_open_event_reply( const struct open_event_reply *req )
706 {
707     fprintf( stderr, " handle=%p", req->handle );
708 }
709
710 static void dump_create_mutex_request( const struct create_mutex_request *req )
711 {
712     fprintf( stderr, " owned=%d,", req->owned );
713     fprintf( stderr, " inherit=%d,", req->inherit );
714     fprintf( stderr, " name=" );
715     dump_varargs_unicode_str( cur_size );
716 }
717
718 static void dump_create_mutex_reply( const struct create_mutex_reply *req )
719 {
720     fprintf( stderr, " handle=%p", req->handle );
721 }
722
723 static void dump_release_mutex_request( const struct release_mutex_request *req )
724 {
725     fprintf( stderr, " handle=%p", req->handle );
726 }
727
728 static void dump_open_mutex_request( const struct open_mutex_request *req )
729 {
730     fprintf( stderr, " access=%08x,", req->access );
731     fprintf( stderr, " inherit=%d,", req->inherit );
732     fprintf( stderr, " name=" );
733     dump_varargs_unicode_str( cur_size );
734 }
735
736 static void dump_open_mutex_reply( const struct open_mutex_reply *req )
737 {
738     fprintf( stderr, " handle=%p", req->handle );
739 }
740
741 static void dump_create_semaphore_request( const struct create_semaphore_request *req )
742 {
743     fprintf( stderr, " initial=%08x,", req->initial );
744     fprintf( stderr, " max=%08x,", req->max );
745     fprintf( stderr, " inherit=%d,", req->inherit );
746     fprintf( stderr, " name=" );
747     dump_varargs_unicode_str( cur_size );
748 }
749
750 static void dump_create_semaphore_reply( const struct create_semaphore_reply *req )
751 {
752     fprintf( stderr, " handle=%p", req->handle );
753 }
754
755 static void dump_release_semaphore_request( const struct release_semaphore_request *req )
756 {
757     fprintf( stderr, " handle=%p,", req->handle );
758     fprintf( stderr, " count=%08x", req->count );
759 }
760
761 static void dump_release_semaphore_reply( const struct release_semaphore_reply *req )
762 {
763     fprintf( stderr, " prev_count=%08x", req->prev_count );
764 }
765
766 static void dump_open_semaphore_request( const struct open_semaphore_request *req )
767 {
768     fprintf( stderr, " access=%08x,", req->access );
769     fprintf( stderr, " inherit=%d,", req->inherit );
770     fprintf( stderr, " name=" );
771     dump_varargs_unicode_str( cur_size );
772 }
773
774 static void dump_open_semaphore_reply( const struct open_semaphore_reply *req )
775 {
776     fprintf( stderr, " handle=%p", req->handle );
777 }
778
779 static void dump_create_file_request( const struct create_file_request *req )
780 {
781     fprintf( stderr, " access=%08x,", req->access );
782     fprintf( stderr, " inherit=%d,", req->inherit );
783     fprintf( stderr, " sharing=%08x,", req->sharing );
784     fprintf( stderr, " create=%d,", req->create );
785     fprintf( stderr, " attrs=%08x,", req->attrs );
786     fprintf( stderr, " drive_type=%d,", req->drive_type );
787     fprintf( stderr, " filename=" );
788     dump_varargs_string( cur_size );
789 }
790
791 static void dump_create_file_reply( const struct create_file_reply *req )
792 {
793     fprintf( stderr, " handle=%p", req->handle );
794 }
795
796 static void dump_alloc_file_handle_request( const struct alloc_file_handle_request *req )
797 {
798     fprintf( stderr, " access=%08x,", req->access );
799     fprintf( stderr, " inherit=%d,", req->inherit );
800     fprintf( stderr, " fd=%d", req->fd );
801 }
802
803 static void dump_alloc_file_handle_reply( const struct alloc_file_handle_reply *req )
804 {
805     fprintf( stderr, " handle=%p", req->handle );
806 }
807
808 static void dump_get_handle_fd_request( const struct get_handle_fd_request *req )
809 {
810     fprintf( stderr, " handle=%p,", req->handle );
811     fprintf( stderr, " access=%08x", req->access );
812 }
813
814 static void dump_get_handle_fd_reply( const struct get_handle_fd_reply *req )
815 {
816     fprintf( stderr, " fd=%d,", req->fd );
817     fprintf( stderr, " type=%d,", req->type );
818     fprintf( stderr, " flags=%d", req->flags );
819 }
820
821 static void dump_set_file_pointer_request( const struct set_file_pointer_request *req )
822 {
823     fprintf( stderr, " handle=%p,", req->handle );
824     fprintf( stderr, " low=%d,", req->low );
825     fprintf( stderr, " high=%d,", req->high );
826     fprintf( stderr, " whence=%d", req->whence );
827 }
828
829 static void dump_set_file_pointer_reply( const struct set_file_pointer_reply *req )
830 {
831     fprintf( stderr, " new_low=%d,", req->new_low );
832     fprintf( stderr, " new_high=%d", req->new_high );
833 }
834
835 static void dump_truncate_file_request( const struct truncate_file_request *req )
836 {
837     fprintf( stderr, " handle=%p", req->handle );
838 }
839
840 static void dump_set_file_time_request( const struct set_file_time_request *req )
841 {
842     fprintf( stderr, " handle=%p,", req->handle );
843     fprintf( stderr, " access_time=%ld,", req->access_time );
844     fprintf( stderr, " write_time=%ld", req->write_time );
845 }
846
847 static void dump_flush_file_request( const struct flush_file_request *req )
848 {
849     fprintf( stderr, " handle=%p", req->handle );
850 }
851
852 static void dump_get_file_info_request( const struct get_file_info_request *req )
853 {
854     fprintf( stderr, " handle=%p", req->handle );
855 }
856
857 static void dump_get_file_info_reply( const struct get_file_info_reply *req )
858 {
859     fprintf( stderr, " type=%d,", req->type );
860     fprintf( stderr, " attr=%d,", req->attr );
861     fprintf( stderr, " access_time=%ld,", req->access_time );
862     fprintf( stderr, " write_time=%ld,", req->write_time );
863     fprintf( stderr, " size_high=%d,", req->size_high );
864     fprintf( stderr, " size_low=%d,", req->size_low );
865     fprintf( stderr, " links=%d,", req->links );
866     fprintf( stderr, " index_high=%d,", req->index_high );
867     fprintf( stderr, " index_low=%d,", req->index_low );
868     fprintf( stderr, " serial=%08x", req->serial );
869 }
870
871 static void dump_lock_file_request( const struct lock_file_request *req )
872 {
873     fprintf( stderr, " handle=%p,", req->handle );
874     fprintf( stderr, " offset_low=%08x,", req->offset_low );
875     fprintf( stderr, " offset_high=%08x,", req->offset_high );
876     fprintf( stderr, " count_low=%08x,", req->count_low );
877     fprintf( stderr, " count_high=%08x", req->count_high );
878 }
879
880 static void dump_unlock_file_request( const struct unlock_file_request *req )
881 {
882     fprintf( stderr, " handle=%p,", req->handle );
883     fprintf( stderr, " offset_low=%08x,", req->offset_low );
884     fprintf( stderr, " offset_high=%08x,", req->offset_high );
885     fprintf( stderr, " count_low=%08x,", req->count_low );
886     fprintf( stderr, " count_high=%08x", req->count_high );
887 }
888
889 static void dump_create_pipe_request( const struct create_pipe_request *req )
890 {
891     fprintf( stderr, " inherit=%d", req->inherit );
892 }
893
894 static void dump_create_pipe_reply( const struct create_pipe_reply *req )
895 {
896     fprintf( stderr, " handle_read=%p,", req->handle_read );
897     fprintf( stderr, " handle_write=%p", req->handle_write );
898 }
899
900 static void dump_create_socket_request( const struct create_socket_request *req )
901 {
902     fprintf( stderr, " access=%08x,", req->access );
903     fprintf( stderr, " inherit=%d,", req->inherit );
904     fprintf( stderr, " family=%d,", req->family );
905     fprintf( stderr, " type=%d,", req->type );
906     fprintf( stderr, " protocol=%d,", req->protocol );
907     fprintf( stderr, " flags=%08x", req->flags );
908 }
909
910 static void dump_create_socket_reply( const struct create_socket_reply *req )
911 {
912     fprintf( stderr, " handle=%p", req->handle );
913 }
914
915 static void dump_accept_socket_request( const struct accept_socket_request *req )
916 {
917     fprintf( stderr, " lhandle=%p,", req->lhandle );
918     fprintf( stderr, " access=%08x,", req->access );
919     fprintf( stderr, " inherit=%d", req->inherit );
920 }
921
922 static void dump_accept_socket_reply( const struct accept_socket_reply *req )
923 {
924     fprintf( stderr, " handle=%p", req->handle );
925 }
926
927 static void dump_set_socket_event_request( const struct set_socket_event_request *req )
928 {
929     fprintf( stderr, " handle=%p,", req->handle );
930     fprintf( stderr, " mask=%08x,", req->mask );
931     fprintf( stderr, " event=%p,", req->event );
932     fprintf( stderr, " window=%p,", req->window );
933     fprintf( stderr, " msg=%08x", req->msg );
934 }
935
936 static void dump_get_socket_event_request( const struct get_socket_event_request *req )
937 {
938     fprintf( stderr, " handle=%p,", req->handle );
939     fprintf( stderr, " service=%d,", req->service );
940     fprintf( stderr, " c_event=%p", req->c_event );
941 }
942
943 static void dump_get_socket_event_reply( const struct get_socket_event_reply *req )
944 {
945     fprintf( stderr, " mask=%08x,", req->mask );
946     fprintf( stderr, " pmask=%08x,", req->pmask );
947     fprintf( stderr, " state=%08x,", req->state );
948     fprintf( stderr, " errors=" );
949     dump_varargs_ints( cur_size );
950 }
951
952 static void dump_enable_socket_event_request( const struct enable_socket_event_request *req )
953 {
954     fprintf( stderr, " handle=%p,", req->handle );
955     fprintf( stderr, " mask=%08x,", req->mask );
956     fprintf( stderr, " sstate=%08x,", req->sstate );
957     fprintf( stderr, " cstate=%08x", req->cstate );
958 }
959
960 static void dump_set_socket_deferred_request( const struct set_socket_deferred_request *req )
961 {
962     fprintf( stderr, " handle=%p,", req->handle );
963     fprintf( stderr, " deferred=%p", req->deferred );
964 }
965
966 static void dump_alloc_console_request( const struct alloc_console_request *req )
967 {
968     fprintf( stderr, " access=%08x,", req->access );
969     fprintf( stderr, " inherit=%d,", req->inherit );
970     fprintf( stderr, " pid=%08x", req->pid );
971 }
972
973 static void dump_alloc_console_reply( const struct alloc_console_reply *req )
974 {
975     fprintf( stderr, " handle_in=%p,", req->handle_in );
976     fprintf( stderr, " event=%p", req->event );
977 }
978
979 static void dump_free_console_request( const struct free_console_request *req )
980 {
981 }
982
983 static void dump_get_console_renderer_events_request( const struct get_console_renderer_events_request *req )
984 {
985     fprintf( stderr, " handle=%p", req->handle );
986 }
987
988 static void dump_get_console_renderer_events_reply( const struct get_console_renderer_events_reply *req )
989 {
990     fprintf( stderr, " data=" );
991     dump_varargs_bytes( cur_size );
992 }
993
994 static void dump_open_console_request( const struct open_console_request *req )
995 {
996     fprintf( stderr, " from=%d,", req->from );
997     fprintf( stderr, " access=%08x,", req->access );
998     fprintf( stderr, " inherit=%d,", req->inherit );
999     fprintf( stderr, " share=%d", req->share );
1000 }
1001
1002 static void dump_open_console_reply( const struct open_console_reply *req )
1003 {
1004     fprintf( stderr, " handle=%p", req->handle );
1005 }
1006
1007 static void dump_get_console_mode_request( const struct get_console_mode_request *req )
1008 {
1009     fprintf( stderr, " handle=%p", req->handle );
1010 }
1011
1012 static void dump_get_console_mode_reply( const struct get_console_mode_reply *req )
1013 {
1014     fprintf( stderr, " mode=%d", req->mode );
1015 }
1016
1017 static void dump_set_console_mode_request( const struct set_console_mode_request *req )
1018 {
1019     fprintf( stderr, " handle=%p,", req->handle );
1020     fprintf( stderr, " mode=%d", req->mode );
1021 }
1022
1023 static void dump_set_console_input_info_request( const struct set_console_input_info_request *req )
1024 {
1025     fprintf( stderr, " handle=%p,", req->handle );
1026     fprintf( stderr, " mask=%d,", req->mask );
1027     fprintf( stderr, " active_sb=%p,", req->active_sb );
1028     fprintf( stderr, " history_mode=%d,", req->history_mode );
1029     fprintf( stderr, " history_size=%d,", req->history_size );
1030     fprintf( stderr, " edition_mode=%d,", req->edition_mode );
1031     fprintf( stderr, " title=" );
1032     dump_varargs_unicode_str( cur_size );
1033 }
1034
1035 static void dump_get_console_input_info_request( const struct get_console_input_info_request *req )
1036 {
1037     fprintf( stderr, " handle=%p", req->handle );
1038 }
1039
1040 static void dump_get_console_input_info_reply( const struct get_console_input_info_reply *req )
1041 {
1042     fprintf( stderr, " history_mode=%d,", req->history_mode );
1043     fprintf( stderr, " history_size=%d,", req->history_size );
1044     fprintf( stderr, " history_index=%d,", req->history_index );
1045     fprintf( stderr, " edition_mode=%d,", req->edition_mode );
1046     fprintf( stderr, " title=" );
1047     dump_varargs_unicode_str( cur_size );
1048 }
1049
1050 static void dump_append_console_input_history_request( const struct append_console_input_history_request *req )
1051 {
1052     fprintf( stderr, " handle=%p,", req->handle );
1053     fprintf( stderr, " line=" );
1054     dump_varargs_unicode_str( cur_size );
1055 }
1056
1057 static void dump_get_console_input_history_request( const struct get_console_input_history_request *req )
1058 {
1059     fprintf( stderr, " handle=%p,", req->handle );
1060     fprintf( stderr, " index=%d", req->index );
1061 }
1062
1063 static void dump_get_console_input_history_reply( const struct get_console_input_history_reply *req )
1064 {
1065     fprintf( stderr, " total=%d,", req->total );
1066     fprintf( stderr, " line=" );
1067     dump_varargs_unicode_str( cur_size );
1068 }
1069
1070 static void dump_create_console_output_request( const struct create_console_output_request *req )
1071 {
1072     fprintf( stderr, " handle_in=%p,", req->handle_in );
1073     fprintf( stderr, " access=%d,", req->access );
1074     fprintf( stderr, " share=%d,", req->share );
1075     fprintf( stderr, " inherit=%d", req->inherit );
1076 }
1077
1078 static void dump_create_console_output_reply( const struct create_console_output_reply *req )
1079 {
1080     fprintf( stderr, " handle_out=%p", req->handle_out );
1081 }
1082
1083 static void dump_set_console_output_info_request( const struct set_console_output_info_request *req )
1084 {
1085     fprintf( stderr, " handle=%p,", req->handle );
1086     fprintf( stderr, " mask=%d,", req->mask );
1087     fprintf( stderr, " cursor_size=%d,", req->cursor_size );
1088     fprintf( stderr, " cursor_visible=%d,", req->cursor_visible );
1089     fprintf( stderr, " cursor_x=%d,", req->cursor_x );
1090     fprintf( stderr, " cursor_y=%d,", req->cursor_y );
1091     fprintf( stderr, " width=%d,", req->width );
1092     fprintf( stderr, " height=%d,", req->height );
1093     fprintf( stderr, " attr=%d,", req->attr );
1094     fprintf( stderr, " win_left=%d,", req->win_left );
1095     fprintf( stderr, " win_top=%d,", req->win_top );
1096     fprintf( stderr, " win_right=%d,", req->win_right );
1097     fprintf( stderr, " win_bottom=%d,", req->win_bottom );
1098     fprintf( stderr, " max_width=%d,", req->max_width );
1099     fprintf( stderr, " max_height=%d", req->max_height );
1100 }
1101
1102 static void dump_get_console_output_info_request( const struct get_console_output_info_request *req )
1103 {
1104     fprintf( stderr, " handle=%p", req->handle );
1105 }
1106
1107 static void dump_get_console_output_info_reply( const struct get_console_output_info_reply *req )
1108 {
1109     fprintf( stderr, " cursor_size=%d,", req->cursor_size );
1110     fprintf( stderr, " cursor_visible=%d,", req->cursor_visible );
1111     fprintf( stderr, " cursor_x=%d,", req->cursor_x );
1112     fprintf( stderr, " cursor_y=%d,", req->cursor_y );
1113     fprintf( stderr, " width=%d,", req->width );
1114     fprintf( stderr, " height=%d,", req->height );
1115     fprintf( stderr, " attr=%d,", req->attr );
1116     fprintf( stderr, " win_left=%d,", req->win_left );
1117     fprintf( stderr, " win_top=%d,", req->win_top );
1118     fprintf( stderr, " win_right=%d,", req->win_right );
1119     fprintf( stderr, " win_bottom=%d,", req->win_bottom );
1120     fprintf( stderr, " max_width=%d,", req->max_width );
1121     fprintf( stderr, " max_height=%d", req->max_height );
1122 }
1123
1124 static void dump_write_console_input_request( const struct write_console_input_request *req )
1125 {
1126     fprintf( stderr, " handle=%p,", req->handle );
1127     fprintf( stderr, " rec=" );
1128     dump_varargs_input_records( cur_size );
1129 }
1130
1131 static void dump_write_console_input_reply( const struct write_console_input_reply *req )
1132 {
1133     fprintf( stderr, " written=%d", req->written );
1134 }
1135
1136 static void dump_read_console_input_request( const struct read_console_input_request *req )
1137 {
1138     fprintf( stderr, " handle=%p,", req->handle );
1139     fprintf( stderr, " flush=%d", req->flush );
1140 }
1141
1142 static void dump_read_console_input_reply( const struct read_console_input_reply *req )
1143 {
1144     fprintf( stderr, " read=%d,", req->read );
1145     fprintf( stderr, " rec=" );
1146     dump_varargs_input_records( cur_size );
1147 }
1148
1149 static void dump_write_console_output_request( const struct write_console_output_request *req )
1150 {
1151     fprintf( stderr, " handle=%p,", req->handle );
1152     fprintf( stderr, " x=%d,", req->x );
1153     fprintf( stderr, " y=%d,", req->y );
1154     fprintf( stderr, " mode=%d,", req->mode );
1155     fprintf( stderr, " wrap=%d,", req->wrap );
1156     fprintf( stderr, " data=" );
1157     dump_varargs_bytes( cur_size );
1158 }
1159
1160 static void dump_write_console_output_reply( const struct write_console_output_reply *req )
1161 {
1162     fprintf( stderr, " written=%d,", req->written );
1163     fprintf( stderr, " width=%d,", req->width );
1164     fprintf( stderr, " height=%d", req->height );
1165 }
1166
1167 static void dump_fill_console_output_request( const struct fill_console_output_request *req )
1168 {
1169     fprintf( stderr, " handle=%p,", req->handle );
1170     fprintf( stderr, " x=%d,", req->x );
1171     fprintf( stderr, " y=%d,", req->y );
1172     fprintf( stderr, " mode=%d,", req->mode );
1173     fprintf( stderr, " count=%d,", req->count );
1174     fprintf( stderr, " wrap=%d,", req->wrap );
1175     fprintf( stderr, " data=" );
1176     dump_char_info( &req->data );
1177 }
1178
1179 static void dump_fill_console_output_reply( const struct fill_console_output_reply *req )
1180 {
1181     fprintf( stderr, " written=%d", req->written );
1182 }
1183
1184 static void dump_read_console_output_request( const struct read_console_output_request *req )
1185 {
1186     fprintf( stderr, " handle=%p,", req->handle );
1187     fprintf( stderr, " x=%d,", req->x );
1188     fprintf( stderr, " y=%d,", req->y );
1189     fprintf( stderr, " mode=%d,", req->mode );
1190     fprintf( stderr, " wrap=%d", req->wrap );
1191 }
1192
1193 static void dump_read_console_output_reply( const struct read_console_output_reply *req )
1194 {
1195     fprintf( stderr, " width=%d,", req->width );
1196     fprintf( stderr, " height=%d,", req->height );
1197     fprintf( stderr, " data=" );
1198     dump_varargs_bytes( cur_size );
1199 }
1200
1201 static void dump_move_console_output_request( const struct move_console_output_request *req )
1202 {
1203     fprintf( stderr, " handle=%p,", req->handle );
1204     fprintf( stderr, " x_src=%d,", req->x_src );
1205     fprintf( stderr, " y_src=%d,", req->y_src );
1206     fprintf( stderr, " x_dst=%d,", req->x_dst );
1207     fprintf( stderr, " y_dst=%d,", req->y_dst );
1208     fprintf( stderr, " w=%d,", req->w );
1209     fprintf( stderr, " h=%d", req->h );
1210 }
1211
1212 static void dump_send_console_signal_request( const struct send_console_signal_request *req )
1213 {
1214     fprintf( stderr, " signal=%d,", req->signal );
1215     fprintf( stderr, " group_id=%08x", req->group_id );
1216 }
1217
1218 static void dump_create_change_notification_request( const struct create_change_notification_request *req )
1219 {
1220     fprintf( stderr, " subtree=%d,", req->subtree );
1221     fprintf( stderr, " filter=%d", req->filter );
1222 }
1223
1224 static void dump_create_change_notification_reply( const struct create_change_notification_reply *req )
1225 {
1226     fprintf( stderr, " handle=%p", req->handle );
1227 }
1228
1229 static void dump_create_mapping_request( const struct create_mapping_request *req )
1230 {
1231     fprintf( stderr, " size_high=%d,", req->size_high );
1232     fprintf( stderr, " size_low=%d,", req->size_low );
1233     fprintf( stderr, " protect=%d,", req->protect );
1234     fprintf( stderr, " access=%08x,", req->access );
1235     fprintf( stderr, " inherit=%d,", req->inherit );
1236     fprintf( stderr, " file_handle=%p,", req->file_handle );
1237     fprintf( stderr, " name=" );
1238     dump_varargs_unicode_str( cur_size );
1239 }
1240
1241 static void dump_create_mapping_reply( const struct create_mapping_reply *req )
1242 {
1243     fprintf( stderr, " handle=%p", req->handle );
1244 }
1245
1246 static void dump_open_mapping_request( const struct open_mapping_request *req )
1247 {
1248     fprintf( stderr, " access=%08x,", req->access );
1249     fprintf( stderr, " inherit=%d,", req->inherit );
1250     fprintf( stderr, " name=" );
1251     dump_varargs_unicode_str( cur_size );
1252 }
1253
1254 static void dump_open_mapping_reply( const struct open_mapping_reply *req )
1255 {
1256     fprintf( stderr, " handle=%p", req->handle );
1257 }
1258
1259 static void dump_get_mapping_info_request( const struct get_mapping_info_request *req )
1260 {
1261     fprintf( stderr, " handle=%p", req->handle );
1262 }
1263
1264 static void dump_get_mapping_info_reply( const struct get_mapping_info_reply *req )
1265 {
1266     fprintf( stderr, " size_high=%d,", req->size_high );
1267     fprintf( stderr, " size_low=%d,", req->size_low );
1268     fprintf( stderr, " protect=%d,", req->protect );
1269     fprintf( stderr, " header_size=%d,", req->header_size );
1270     fprintf( stderr, " base=%p,", req->base );
1271     fprintf( stderr, " shared_file=%p,", req->shared_file );
1272     fprintf( stderr, " shared_size=%d,", req->shared_size );
1273     fprintf( stderr, " drive_type=%d", req->drive_type );
1274 }
1275
1276 static void dump_create_device_request( const struct create_device_request *req )
1277 {
1278     fprintf( stderr, " access=%08x,", req->access );
1279     fprintf( stderr, " inherit=%d,", req->inherit );
1280     fprintf( stderr, " id=%d", req->id );
1281 }
1282
1283 static void dump_create_device_reply( const struct create_device_reply *req )
1284 {
1285     fprintf( stderr, " handle=%p", req->handle );
1286 }
1287
1288 static void dump_create_snapshot_request( const struct create_snapshot_request *req )
1289 {
1290     fprintf( stderr, " inherit=%d,", req->inherit );
1291     fprintf( stderr, " flags=%d,", req->flags );
1292     fprintf( stderr, " pid=%08x", req->pid );
1293 }
1294
1295 static void dump_create_snapshot_reply( const struct create_snapshot_reply *req )
1296 {
1297     fprintf( stderr, " handle=%p", req->handle );
1298 }
1299
1300 static void dump_next_process_request( const struct next_process_request *req )
1301 {
1302     fprintf( stderr, " handle=%p,", req->handle );
1303     fprintf( stderr, " reset=%d", req->reset );
1304 }
1305
1306 static void dump_next_process_reply( const struct next_process_reply *req )
1307 {
1308     fprintf( stderr, " count=%d,", req->count );
1309     fprintf( stderr, " pid=%08x,", req->pid );
1310     fprintf( stderr, " ppid=%08x,", req->ppid );
1311     fprintf( stderr, " heap=%p,", req->heap );
1312     fprintf( stderr, " module=%p,", req->module );
1313     fprintf( stderr, " threads=%d,", req->threads );
1314     fprintf( stderr, " priority=%d,", req->priority );
1315     fprintf( stderr, " filename=" );
1316     dump_varargs_string( cur_size );
1317 }
1318
1319 static void dump_next_thread_request( const struct next_thread_request *req )
1320 {
1321     fprintf( stderr, " handle=%p,", req->handle );
1322     fprintf( stderr, " reset=%d", req->reset );
1323 }
1324
1325 static void dump_next_thread_reply( const struct next_thread_reply *req )
1326 {
1327     fprintf( stderr, " count=%d,", req->count );
1328     fprintf( stderr, " pid=%08x,", req->pid );
1329     fprintf( stderr, " tid=%08x,", req->tid );
1330     fprintf( stderr, " base_pri=%d,", req->base_pri );
1331     fprintf( stderr, " delta_pri=%d", req->delta_pri );
1332 }
1333
1334 static void dump_next_module_request( const struct next_module_request *req )
1335 {
1336     fprintf( stderr, " handle=%p,", req->handle );
1337     fprintf( stderr, " reset=%d", req->reset );
1338 }
1339
1340 static void dump_next_module_reply( const struct next_module_reply *req )
1341 {
1342     fprintf( stderr, " pid=%08x,", req->pid );
1343     fprintf( stderr, " base=%p,", req->base );
1344     fprintf( stderr, " size=%d,", req->size );
1345     fprintf( stderr, " filename=" );
1346     dump_varargs_string( cur_size );
1347 }
1348
1349 static void dump_wait_debug_event_request( const struct wait_debug_event_request *req )
1350 {
1351     fprintf( stderr, " get_handle=%d", req->get_handle );
1352 }
1353
1354 static void dump_wait_debug_event_reply( const struct wait_debug_event_reply *req )
1355 {
1356     fprintf( stderr, " pid=%08x,", req->pid );
1357     fprintf( stderr, " tid=%08x,", req->tid );
1358     fprintf( stderr, " wait=%p,", req->wait );
1359     fprintf( stderr, " event=" );
1360     dump_varargs_debug_event( cur_size );
1361 }
1362
1363 static void dump_queue_exception_event_request( const struct queue_exception_event_request *req )
1364 {
1365     fprintf( stderr, " first=%d,", req->first );
1366     fprintf( stderr, " record=" );
1367     dump_varargs_exc_event( cur_size );
1368 }
1369
1370 static void dump_queue_exception_event_reply( const struct queue_exception_event_reply *req )
1371 {
1372     fprintf( stderr, " handle=%p", req->handle );
1373 }
1374
1375 static void dump_get_exception_status_request( const struct get_exception_status_request *req )
1376 {
1377     fprintf( stderr, " handle=%p", req->handle );
1378 }
1379
1380 static void dump_get_exception_status_reply( const struct get_exception_status_reply *req )
1381 {
1382     fprintf( stderr, " status=%d,", req->status );
1383     fprintf( stderr, " context=" );
1384     dump_varargs_context( cur_size );
1385 }
1386
1387 static void dump_output_debug_string_request( const struct output_debug_string_request *req )
1388 {
1389     fprintf( stderr, " string=%p,", req->string );
1390     fprintf( stderr, " unicode=%d,", req->unicode );
1391     fprintf( stderr, " length=%d", req->length );
1392 }
1393
1394 static void dump_continue_debug_event_request( const struct continue_debug_event_request *req )
1395 {
1396     fprintf( stderr, " pid=%08x,", req->pid );
1397     fprintf( stderr, " tid=%08x,", req->tid );
1398     fprintf( stderr, " status=%d", req->status );
1399 }
1400
1401 static void dump_debug_process_request( const struct debug_process_request *req )
1402 {
1403     fprintf( stderr, " pid=%08x,", req->pid );
1404     fprintf( stderr, " attach=%d", req->attach );
1405 }
1406
1407 static void dump_debug_break_request( const struct debug_break_request *req )
1408 {
1409     fprintf( stderr, " handle=%p", req->handle );
1410 }
1411
1412 static void dump_debug_break_reply( const struct debug_break_reply *req )
1413 {
1414     fprintf( stderr, " self=%d", req->self );
1415 }
1416
1417 static void dump_set_debugger_kill_on_exit_request( const struct set_debugger_kill_on_exit_request *req )
1418 {
1419     fprintf( stderr, " kill_on_exit=%d", req->kill_on_exit );
1420 }
1421
1422 static void dump_read_process_memory_request( const struct read_process_memory_request *req )
1423 {
1424     fprintf( stderr, " handle=%p,", req->handle );
1425     fprintf( stderr, " addr=%p", req->addr );
1426 }
1427
1428 static void dump_read_process_memory_reply( const struct read_process_memory_reply *req )
1429 {
1430     fprintf( stderr, " data=" );
1431     dump_varargs_bytes( cur_size );
1432 }
1433
1434 static void dump_write_process_memory_request( const struct write_process_memory_request *req )
1435 {
1436     fprintf( stderr, " handle=%p,", req->handle );
1437     fprintf( stderr, " addr=%p,", req->addr );
1438     fprintf( stderr, " first_mask=%08x,", req->first_mask );
1439     fprintf( stderr, " last_mask=%08x,", req->last_mask );
1440     fprintf( stderr, " data=" );
1441     dump_varargs_bytes( cur_size );
1442 }
1443
1444 static void dump_create_key_request( const struct create_key_request *req )
1445 {
1446     fprintf( stderr, " parent=%p,", req->parent );
1447     fprintf( stderr, " access=%08x,", req->access );
1448     fprintf( stderr, " options=%08x,", req->options );
1449     fprintf( stderr, " modif=%ld,", req->modif );
1450     fprintf( stderr, " namelen=%d,", req->namelen );
1451     fprintf( stderr, " name=" );
1452     dump_varargs_unicode_str( min(cur_size,req->namelen) );
1453     fputc( ',', stderr );
1454     fprintf( stderr, " class=" );
1455     dump_varargs_unicode_str( cur_size );
1456 }
1457
1458 static void dump_create_key_reply( const struct create_key_reply *req )
1459 {
1460     fprintf( stderr, " hkey=%p,", req->hkey );
1461     fprintf( stderr, " created=%d", req->created );
1462 }
1463
1464 static void dump_open_key_request( const struct open_key_request *req )
1465 {
1466     fprintf( stderr, " parent=%p,", req->parent );
1467     fprintf( stderr, " access=%08x,", req->access );
1468     fprintf( stderr, " name=" );
1469     dump_varargs_unicode_str( cur_size );
1470 }
1471
1472 static void dump_open_key_reply( const struct open_key_reply *req )
1473 {
1474     fprintf( stderr, " hkey=%p", req->hkey );
1475 }
1476
1477 static void dump_delete_key_request( const struct delete_key_request *req )
1478 {
1479     fprintf( stderr, " hkey=%p", req->hkey );
1480 }
1481
1482 static void dump_enum_key_request( const struct enum_key_request *req )
1483 {
1484     fprintf( stderr, " hkey=%p,", req->hkey );
1485     fprintf( stderr, " index=%d,", req->index );
1486     fprintf( stderr, " info_class=%d", req->info_class );
1487 }
1488
1489 static void dump_enum_key_reply( const struct enum_key_reply *req )
1490 {
1491     fprintf( stderr, " subkeys=%d,", req->subkeys );
1492     fprintf( stderr, " max_subkey=%d,", req->max_subkey );
1493     fprintf( stderr, " max_class=%d,", req->max_class );
1494     fprintf( stderr, " values=%d,", req->values );
1495     fprintf( stderr, " max_value=%d,", req->max_value );
1496     fprintf( stderr, " max_data=%d,", req->max_data );
1497     fprintf( stderr, " modif=%ld,", req->modif );
1498     fprintf( stderr, " total=%d,", req->total );
1499     fprintf( stderr, " namelen=%d,", req->namelen );
1500     fprintf( stderr, " name=" );
1501     dump_varargs_unicode_str( min(cur_size,req->namelen) );
1502     fputc( ',', stderr );
1503     fprintf( stderr, " class=" );
1504     dump_varargs_unicode_str( cur_size );
1505 }
1506
1507 static void dump_set_key_value_request( const struct set_key_value_request *req )
1508 {
1509     fprintf( stderr, " hkey=%p,", req->hkey );
1510     fprintf( stderr, " type=%d,", req->type );
1511     fprintf( stderr, " namelen=%d,", req->namelen );
1512     fprintf( stderr, " name=" );
1513     dump_varargs_unicode_str( min(cur_size,req->namelen) );
1514     fputc( ',', stderr );
1515     fprintf( stderr, " data=" );
1516     dump_varargs_bytes( cur_size );
1517 }
1518
1519 static void dump_get_key_value_request( const struct get_key_value_request *req )
1520 {
1521     fprintf( stderr, " hkey=%p,", req->hkey );
1522     fprintf( stderr, " name=" );
1523     dump_varargs_unicode_str( cur_size );
1524 }
1525
1526 static void dump_get_key_value_reply( const struct get_key_value_reply *req )
1527 {
1528     fprintf( stderr, " type=%d,", req->type );
1529     fprintf( stderr, " total=%d,", req->total );
1530     fprintf( stderr, " data=" );
1531     dump_varargs_bytes( cur_size );
1532 }
1533
1534 static void dump_enum_key_value_request( const struct enum_key_value_request *req )
1535 {
1536     fprintf( stderr, " hkey=%p,", req->hkey );
1537     fprintf( stderr, " index=%d,", req->index );
1538     fprintf( stderr, " info_class=%d", req->info_class );
1539 }
1540
1541 static void dump_enum_key_value_reply( const struct enum_key_value_reply *req )
1542 {
1543     fprintf( stderr, " type=%d,", req->type );
1544     fprintf( stderr, " total=%d,", req->total );
1545     fprintf( stderr, " namelen=%d,", req->namelen );
1546     fprintf( stderr, " name=" );
1547     dump_varargs_unicode_str( min(cur_size,req->namelen) );
1548     fputc( ',', stderr );
1549     fprintf( stderr, " data=" );
1550     dump_varargs_bytes( cur_size );
1551 }
1552
1553 static void dump_delete_key_value_request( const struct delete_key_value_request *req )
1554 {
1555     fprintf( stderr, " hkey=%p,", req->hkey );
1556     fprintf( stderr, " name=" );
1557     dump_varargs_unicode_str( cur_size );
1558 }
1559
1560 static void dump_load_registry_request( const struct load_registry_request *req )
1561 {
1562     fprintf( stderr, " hkey=%p,", req->hkey );
1563     fprintf( stderr, " file=%p,", req->file );
1564     fprintf( stderr, " name=" );
1565     dump_varargs_unicode_str( cur_size );
1566 }
1567
1568 static void dump_save_registry_request( const struct save_registry_request *req )
1569 {
1570     fprintf( stderr, " hkey=%p,", req->hkey );
1571     fprintf( stderr, " file=%p", req->file );
1572 }
1573
1574 static void dump_save_registry_atexit_request( const struct save_registry_atexit_request *req )
1575 {
1576     fprintf( stderr, " hkey=%p,", req->hkey );
1577     fprintf( stderr, " file=" );
1578     dump_varargs_string( cur_size );
1579 }
1580
1581 static void dump_set_registry_levels_request( const struct set_registry_levels_request *req )
1582 {
1583     fprintf( stderr, " current=%d,", req->current );
1584     fprintf( stderr, " saving=%d,", req->saving );
1585     fprintf( stderr, " period=%d", req->period );
1586 }
1587
1588 static void dump_set_registry_notification_request( const struct set_registry_notification_request *req )
1589 {
1590     fprintf( stderr, " hkey=%p,", req->hkey );
1591     fprintf( stderr, " event=%p,", req->event );
1592     fprintf( stderr, " subtree=%d,", req->subtree );
1593     fprintf( stderr, " filter=%08x", req->filter );
1594 }
1595
1596 static void dump_create_timer_request( const struct create_timer_request *req )
1597 {
1598     fprintf( stderr, " inherit=%d,", req->inherit );
1599     fprintf( stderr, " manual=%d,", req->manual );
1600     fprintf( stderr, " name=" );
1601     dump_varargs_unicode_str( cur_size );
1602 }
1603
1604 static void dump_create_timer_reply( const struct create_timer_reply *req )
1605 {
1606     fprintf( stderr, " handle=%p", req->handle );
1607 }
1608
1609 static void dump_open_timer_request( const struct open_timer_request *req )
1610 {
1611     fprintf( stderr, " access=%08x,", req->access );
1612     fprintf( stderr, " inherit=%d,", req->inherit );
1613     fprintf( stderr, " name=" );
1614     dump_varargs_unicode_str( cur_size );
1615 }
1616
1617 static void dump_open_timer_reply( const struct open_timer_reply *req )
1618 {
1619     fprintf( stderr, " handle=%p", req->handle );
1620 }
1621
1622 static void dump_set_timer_request( const struct set_timer_request *req )
1623 {
1624     fprintf( stderr, " handle=%p,", req->handle );
1625     fprintf( stderr, " sec=%d,", req->sec );
1626     fprintf( stderr, " usec=%d,", req->usec );
1627     fprintf( stderr, " period=%d,", req->period );
1628     fprintf( stderr, " callback=%p,", req->callback );
1629     fprintf( stderr, " arg=%p", req->arg );
1630 }
1631
1632 static void dump_cancel_timer_request( const struct cancel_timer_request *req )
1633 {
1634     fprintf( stderr, " handle=%p", req->handle );
1635 }
1636
1637 static void dump_get_thread_context_request( const struct get_thread_context_request *req )
1638 {
1639     fprintf( stderr, " handle=%p,", req->handle );
1640     fprintf( stderr, " flags=%08x", req->flags );
1641 }
1642
1643 static void dump_get_thread_context_reply( const struct get_thread_context_reply *req )
1644 {
1645     fprintf( stderr, " context=" );
1646     dump_varargs_context( cur_size );
1647 }
1648
1649 static void dump_set_thread_context_request( const struct set_thread_context_request *req )
1650 {
1651     fprintf( stderr, " handle=%p,", req->handle );
1652     fprintf( stderr, " flags=%08x,", req->flags );
1653     fprintf( stderr, " context=" );
1654     dump_varargs_context( cur_size );
1655 }
1656
1657 static void dump_get_selector_entry_request( const struct get_selector_entry_request *req )
1658 {
1659     fprintf( stderr, " handle=%p,", req->handle );
1660     fprintf( stderr, " entry=%d", req->entry );
1661 }
1662
1663 static void dump_get_selector_entry_reply( const struct get_selector_entry_reply *req )
1664 {
1665     fprintf( stderr, " base=%08x,", req->base );
1666     fprintf( stderr, " limit=%08x,", req->limit );
1667     fprintf( stderr, " flags=%02x", req->flags );
1668 }
1669
1670 static void dump_add_atom_request( const struct add_atom_request *req )
1671 {
1672     fprintf( stderr, " local=%d,", req->local );
1673     fprintf( stderr, " name=" );
1674     dump_varargs_unicode_str( cur_size );
1675 }
1676
1677 static void dump_add_atom_reply( const struct add_atom_reply *req )
1678 {
1679     fprintf( stderr, " atom=%04x", req->atom );
1680 }
1681
1682 static void dump_delete_atom_request( const struct delete_atom_request *req )
1683 {
1684     fprintf( stderr, " atom=%04x,", req->atom );
1685     fprintf( stderr, " local=%d", req->local );
1686 }
1687
1688 static void dump_find_atom_request( const struct find_atom_request *req )
1689 {
1690     fprintf( stderr, " local=%d,", req->local );
1691     fprintf( stderr, " name=" );
1692     dump_varargs_unicode_str( cur_size );
1693 }
1694
1695 static void dump_find_atom_reply( const struct find_atom_reply *req )
1696 {
1697     fprintf( stderr, " atom=%04x", req->atom );
1698 }
1699
1700 static void dump_get_atom_name_request( const struct get_atom_name_request *req )
1701 {
1702     fprintf( stderr, " atom=%04x,", req->atom );
1703     fprintf( stderr, " local=%d", req->local );
1704 }
1705
1706 static void dump_get_atom_name_reply( const struct get_atom_name_reply *req )
1707 {
1708     fprintf( stderr, " count=%d,", req->count );
1709     fprintf( stderr, " name=" );
1710     dump_varargs_unicode_str( cur_size );
1711 }
1712
1713 static void dump_init_atom_table_request( const struct init_atom_table_request *req )
1714 {
1715     fprintf( stderr, " entries=%d", req->entries );
1716 }
1717
1718 static void dump_get_msg_queue_request( const struct get_msg_queue_request *req )
1719 {
1720 }
1721
1722 static void dump_get_msg_queue_reply( const struct get_msg_queue_reply *req )
1723 {
1724     fprintf( stderr, " handle=%p", req->handle );
1725 }
1726
1727 static void dump_set_queue_mask_request( const struct set_queue_mask_request *req )
1728 {
1729     fprintf( stderr, " wake_mask=%08x,", req->wake_mask );
1730     fprintf( stderr, " changed_mask=%08x,", req->changed_mask );
1731     fprintf( stderr, " skip_wait=%d", req->skip_wait );
1732 }
1733
1734 static void dump_set_queue_mask_reply( const struct set_queue_mask_reply *req )
1735 {
1736     fprintf( stderr, " wake_bits=%08x,", req->wake_bits );
1737     fprintf( stderr, " changed_bits=%08x", req->changed_bits );
1738 }
1739
1740 static void dump_get_queue_status_request( const struct get_queue_status_request *req )
1741 {
1742     fprintf( stderr, " clear=%d", req->clear );
1743 }
1744
1745 static void dump_get_queue_status_reply( const struct get_queue_status_reply *req )
1746 {
1747     fprintf( stderr, " wake_bits=%08x,", req->wake_bits );
1748     fprintf( stderr, " changed_bits=%08x", req->changed_bits );
1749 }
1750
1751 static void dump_wait_input_idle_request( const struct wait_input_idle_request *req )
1752 {
1753     fprintf( stderr, " handle=%p,", req->handle );
1754     fprintf( stderr, " timeout=%d", req->timeout );
1755 }
1756
1757 static void dump_wait_input_idle_reply( const struct wait_input_idle_reply *req )
1758 {
1759     fprintf( stderr, " event=%p", req->event );
1760 }
1761
1762 static void dump_send_message_request( const struct send_message_request *req )
1763 {
1764     fprintf( stderr, " id=%08x,", req->id );
1765     fprintf( stderr, " type=%d,", req->type );
1766     fprintf( stderr, " win=%p,", req->win );
1767     fprintf( stderr, " msg=%08x,", req->msg );
1768     fprintf( stderr, " wparam=%08x,", req->wparam );
1769     fprintf( stderr, " lparam=%08x,", req->lparam );
1770     fprintf( stderr, " x=%d,", req->x );
1771     fprintf( stderr, " y=%d,", req->y );
1772     fprintf( stderr, " time=%08x,", req->time );
1773     fprintf( stderr, " info=%08x,", req->info );
1774     fprintf( stderr, " timeout=%d,", req->timeout );
1775     fprintf( stderr, " data=" );
1776     dump_varargs_bytes( cur_size );
1777 }
1778
1779 static void dump_get_message_request( const struct get_message_request *req )
1780 {
1781     fprintf( stderr, " flags=%d,", req->flags );
1782     fprintf( stderr, " get_win=%p,", req->get_win );
1783     fprintf( stderr, " get_first=%08x,", req->get_first );
1784     fprintf( stderr, " get_last=%08x", req->get_last );
1785 }
1786
1787 static void dump_get_message_reply( const struct get_message_reply *req )
1788 {
1789     fprintf( stderr, " type=%d,", req->type );
1790     fprintf( stderr, " win=%p,", req->win );
1791     fprintf( stderr, " msg=%08x,", req->msg );
1792     fprintf( stderr, " wparam=%08x,", req->wparam );
1793     fprintf( stderr, " lparam=%08x,", req->lparam );
1794     fprintf( stderr, " x=%d,", req->x );
1795     fprintf( stderr, " y=%d,", req->y );
1796     fprintf( stderr, " time=%08x,", req->time );
1797     fprintf( stderr, " info=%08x,", req->info );
1798     fprintf( stderr, " total=%d,", req->total );
1799     fprintf( stderr, " data=" );
1800     dump_varargs_bytes( cur_size );
1801 }
1802
1803 static void dump_reply_message_request( const struct reply_message_request *req )
1804 {
1805     fprintf( stderr, " result=%08x,", req->result );
1806     fprintf( stderr, " remove=%d,", req->remove );
1807     fprintf( stderr, " data=" );
1808     dump_varargs_bytes( cur_size );
1809 }
1810
1811 static void dump_get_message_reply_request( const struct get_message_reply_request *req )
1812 {
1813     fprintf( stderr, " cancel=%d", req->cancel );
1814 }
1815
1816 static void dump_get_message_reply_reply( const struct get_message_reply_reply *req )
1817 {
1818     fprintf( stderr, " result=%08x,", req->result );
1819     fprintf( stderr, " data=" );
1820     dump_varargs_bytes( cur_size );
1821 }
1822
1823 static void dump_set_win_timer_request( const struct set_win_timer_request *req )
1824 {
1825     fprintf( stderr, " win=%p,", req->win );
1826     fprintf( stderr, " msg=%08x,", req->msg );
1827     fprintf( stderr, " id=%08x,", req->id );
1828     fprintf( stderr, " rate=%08x,", req->rate );
1829     fprintf( stderr, " lparam=%08x", req->lparam );
1830 }
1831
1832 static void dump_kill_win_timer_request( const struct kill_win_timer_request *req )
1833 {
1834     fprintf( stderr, " win=%p,", req->win );
1835     fprintf( stderr, " msg=%08x,", req->msg );
1836     fprintf( stderr, " id=%08x", req->id );
1837 }
1838
1839 static void dump_create_serial_request( const struct create_serial_request *req )
1840 {
1841     fprintf( stderr, " access=%08x,", req->access );
1842     fprintf( stderr, " inherit=%d,", req->inherit );
1843     fprintf( stderr, " attributes=%08x,", req->attributes );
1844     fprintf( stderr, " sharing=%08x,", req->sharing );
1845     fprintf( stderr, " name=" );
1846     dump_varargs_string( cur_size );
1847 }
1848
1849 static void dump_create_serial_reply( const struct create_serial_reply *req )
1850 {
1851     fprintf( stderr, " handle=%p", req->handle );
1852 }
1853
1854 static void dump_get_serial_info_request( const struct get_serial_info_request *req )
1855 {
1856     fprintf( stderr, " handle=%p", req->handle );
1857 }
1858
1859 static void dump_get_serial_info_reply( const struct get_serial_info_reply *req )
1860 {
1861     fprintf( stderr, " readinterval=%08x,", req->readinterval );
1862     fprintf( stderr, " readconst=%08x,", req->readconst );
1863     fprintf( stderr, " readmult=%08x,", req->readmult );
1864     fprintf( stderr, " writeconst=%08x,", req->writeconst );
1865     fprintf( stderr, " writemult=%08x,", req->writemult );
1866     fprintf( stderr, " eventmask=%08x,", req->eventmask );
1867     fprintf( stderr, " commerror=%08x", req->commerror );
1868 }
1869
1870 static void dump_set_serial_info_request( const struct set_serial_info_request *req )
1871 {
1872     fprintf( stderr, " handle=%p,", req->handle );
1873     fprintf( stderr, " flags=%d,", req->flags );
1874     fprintf( stderr, " readinterval=%08x,", req->readinterval );
1875     fprintf( stderr, " readconst=%08x,", req->readconst );
1876     fprintf( stderr, " readmult=%08x,", req->readmult );
1877     fprintf( stderr, " writeconst=%08x,", req->writeconst );
1878     fprintf( stderr, " writemult=%08x,", req->writemult );
1879     fprintf( stderr, " eventmask=%08x,", req->eventmask );
1880     fprintf( stderr, " commerror=%08x", req->commerror );
1881 }
1882
1883 static void dump_register_async_request( const struct register_async_request *req )
1884 {
1885     fprintf( stderr, " handle=%p,", req->handle );
1886     fprintf( stderr, " type=%d,", req->type );
1887     fprintf( stderr, " overlapped=%p,", req->overlapped );
1888     fprintf( stderr, " count=%d,", req->count );
1889     fprintf( stderr, " status=%08x", req->status );
1890 }
1891
1892 static void dump_create_named_pipe_request( const struct create_named_pipe_request *req )
1893 {
1894     fprintf( stderr, " openmode=%08x,", req->openmode );
1895     fprintf( stderr, " pipemode=%08x,", req->pipemode );
1896     fprintf( stderr, " maxinstances=%08x,", req->maxinstances );
1897     fprintf( stderr, " outsize=%08x,", req->outsize );
1898     fprintf( stderr, " insize=%08x,", req->insize );
1899     fprintf( stderr, " timeout=%08x,", req->timeout );
1900     fprintf( stderr, " name=" );
1901     dump_varargs_unicode_str( cur_size );
1902 }
1903
1904 static void dump_create_named_pipe_reply( const struct create_named_pipe_reply *req )
1905 {
1906     fprintf( stderr, " handle=%p", req->handle );
1907 }
1908
1909 static void dump_open_named_pipe_request( const struct open_named_pipe_request *req )
1910 {
1911     fprintf( stderr, " access=%08x,", req->access );
1912     fprintf( stderr, " name=" );
1913     dump_varargs_unicode_str( cur_size );
1914 }
1915
1916 static void dump_open_named_pipe_reply( const struct open_named_pipe_reply *req )
1917 {
1918     fprintf( stderr, " handle=%p", req->handle );
1919 }
1920
1921 static void dump_connect_named_pipe_request( const struct connect_named_pipe_request *req )
1922 {
1923     fprintf( stderr, " handle=%p,", req->handle );
1924     fprintf( stderr, " overlapped=%p,", req->overlapped );
1925     fprintf( stderr, " func=%p", req->func );
1926 }
1927
1928 static void dump_wait_named_pipe_request( const struct wait_named_pipe_request *req )
1929 {
1930     fprintf( stderr, " timeout=%08x,", req->timeout );
1931     fprintf( stderr, " overlapped=%p,", req->overlapped );
1932     fprintf( stderr, " func=%p,", req->func );
1933     fprintf( stderr, " name=" );
1934     dump_varargs_unicode_str( cur_size );
1935 }
1936
1937 static void dump_disconnect_named_pipe_request( const struct disconnect_named_pipe_request *req )
1938 {
1939     fprintf( stderr, " handle=%p", req->handle );
1940 }
1941
1942 static void dump_get_named_pipe_info_request( const struct get_named_pipe_info_request *req )
1943 {
1944     fprintf( stderr, " handle=%p", req->handle );
1945 }
1946
1947 static void dump_get_named_pipe_info_reply( const struct get_named_pipe_info_reply *req )
1948 {
1949     fprintf( stderr, " flags=%08x,", req->flags );
1950     fprintf( stderr, " maxinstances=%08x,", req->maxinstances );
1951     fprintf( stderr, " outsize=%08x,", req->outsize );
1952     fprintf( stderr, " insize=%08x", req->insize );
1953 }
1954
1955 static void dump_create_smb_request( const struct create_smb_request *req )
1956 {
1957     fprintf( stderr, " fd=%d,", req->fd );
1958     fprintf( stderr, " tree_id=%08x,", req->tree_id );
1959     fprintf( stderr, " user_id=%08x,", req->user_id );
1960     fprintf( stderr, " file_id=%08x,", req->file_id );
1961     fprintf( stderr, " dialect=%08x", req->dialect );
1962 }
1963
1964 static void dump_create_smb_reply( const struct create_smb_reply *req )
1965 {
1966     fprintf( stderr, " handle=%p", req->handle );
1967 }
1968
1969 static void dump_get_smb_info_request( const struct get_smb_info_request *req )
1970 {
1971     fprintf( stderr, " handle=%p,", req->handle );
1972     fprintf( stderr, " flags=%08x,", req->flags );
1973     fprintf( stderr, " offset=%08x", req->offset );
1974 }
1975
1976 static void dump_get_smb_info_reply( const struct get_smb_info_reply *req )
1977 {
1978     fprintf( stderr, " tree_id=%08x,", req->tree_id );
1979     fprintf( stderr, " user_id=%08x,", req->user_id );
1980     fprintf( stderr, " dialect=%08x,", req->dialect );
1981     fprintf( stderr, " file_id=%08x,", req->file_id );
1982     fprintf( stderr, " offset=%08x", req->offset );
1983 }
1984
1985 static void dump_create_window_request( const struct create_window_request *req )
1986 {
1987     fprintf( stderr, " parent=%p,", req->parent );
1988     fprintf( stderr, " owner=%p,", req->owner );
1989     fprintf( stderr, " atom=%04x", req->atom );
1990 }
1991
1992 static void dump_create_window_reply( const struct create_window_reply *req )
1993 {
1994     fprintf( stderr, " handle=%p", req->handle );
1995 }
1996
1997 static void dump_link_window_request( const struct link_window_request *req )
1998 {
1999     fprintf( stderr, " handle=%p,", req->handle );
2000     fprintf( stderr, " parent=%p,", req->parent );
2001     fprintf( stderr, " previous=%p", req->previous );
2002 }
2003
2004 static void dump_link_window_reply( const struct link_window_reply *req )
2005 {
2006     fprintf( stderr, " full_parent=%p", req->full_parent );
2007 }
2008
2009 static void dump_destroy_window_request( const struct destroy_window_request *req )
2010 {
2011     fprintf( stderr, " handle=%p", req->handle );
2012 }
2013
2014 static void dump_set_window_owner_request( const struct set_window_owner_request *req )
2015 {
2016     fprintf( stderr, " handle=%p,", req->handle );
2017     fprintf( stderr, " owner=%p", req->owner );
2018 }
2019
2020 static void dump_set_window_owner_reply( const struct set_window_owner_reply *req )
2021 {
2022     fprintf( stderr, " full_owner=%p,", req->full_owner );
2023     fprintf( stderr, " prev_owner=%p", req->prev_owner );
2024 }
2025
2026 static void dump_get_window_info_request( const struct get_window_info_request *req )
2027 {
2028     fprintf( stderr, " handle=%p", req->handle );
2029 }
2030
2031 static void dump_get_window_info_reply( const struct get_window_info_reply *req )
2032 {
2033     fprintf( stderr, " full_handle=%p,", req->full_handle );
2034     fprintf( stderr, " last_active=%p,", req->last_active );
2035     fprintf( stderr, " pid=%08x,", req->pid );
2036     fprintf( stderr, " tid=%08x,", req->tid );
2037     fprintf( stderr, " atom=%04x", req->atom );
2038 }
2039
2040 static void dump_set_window_info_request( const struct set_window_info_request *req )
2041 {
2042     fprintf( stderr, " handle=%p,", req->handle );
2043     fprintf( stderr, " flags=%08x,", req->flags );
2044     fprintf( stderr, " style=%08x,", req->style );
2045     fprintf( stderr, " ex_style=%08x,", req->ex_style );
2046     fprintf( stderr, " id=%08x,", req->id );
2047     fprintf( stderr, " instance=%p,", req->instance );
2048     fprintf( stderr, " user_data=%p", req->user_data );
2049 }
2050
2051 static void dump_set_window_info_reply( const struct set_window_info_reply *req )
2052 {
2053     fprintf( stderr, " old_style=%08x,", req->old_style );
2054     fprintf( stderr, " old_ex_style=%08x,", req->old_ex_style );
2055     fprintf( stderr, " old_id=%08x,", req->old_id );
2056     fprintf( stderr, " old_instance=%p,", req->old_instance );
2057     fprintf( stderr, " old_user_data=%p", req->old_user_data );
2058 }
2059
2060 static void dump_get_window_parents_request( const struct get_window_parents_request *req )
2061 {
2062     fprintf( stderr, " handle=%p", req->handle );
2063 }
2064
2065 static void dump_get_window_parents_reply( const struct get_window_parents_reply *req )
2066 {
2067     fprintf( stderr, " count=%d,", req->count );
2068     fprintf( stderr, " parents=" );
2069     dump_varargs_user_handles( cur_size );
2070 }
2071
2072 static void dump_get_window_children_request( const struct get_window_children_request *req )
2073 {
2074     fprintf( stderr, " parent=%p,", req->parent );
2075     fprintf( stderr, " atom=%04x,", req->atom );
2076     fprintf( stderr, " tid=%08x", req->tid );
2077 }
2078
2079 static void dump_get_window_children_reply( const struct get_window_children_reply *req )
2080 {
2081     fprintf( stderr, " count=%d,", req->count );
2082     fprintf( stderr, " children=" );
2083     dump_varargs_user_handles( cur_size );
2084 }
2085
2086 static void dump_get_window_tree_request( const struct get_window_tree_request *req )
2087 {
2088     fprintf( stderr, " handle=%p", req->handle );
2089 }
2090
2091 static void dump_get_window_tree_reply( const struct get_window_tree_reply *req )
2092 {
2093     fprintf( stderr, " parent=%p,", req->parent );
2094     fprintf( stderr, " owner=%p,", req->owner );
2095     fprintf( stderr, " next_sibling=%p,", req->next_sibling );
2096     fprintf( stderr, " prev_sibling=%p,", req->prev_sibling );
2097     fprintf( stderr, " first_sibling=%p,", req->first_sibling );
2098     fprintf( stderr, " last_sibling=%p,", req->last_sibling );
2099     fprintf( stderr, " first_child=%p,", req->first_child );
2100     fprintf( stderr, " last_child=%p", req->last_child );
2101 }
2102
2103 static void dump_set_window_rectangles_request( const struct set_window_rectangles_request *req )
2104 {
2105     fprintf( stderr, " handle=%p,", req->handle );
2106     fprintf( stderr, " window=" );
2107     dump_rectangle( &req->window );
2108     fprintf( stderr, "," );
2109     fprintf( stderr, " client=" );
2110     dump_rectangle( &req->client );
2111 }
2112
2113 static void dump_get_window_rectangles_request( const struct get_window_rectangles_request *req )
2114 {
2115     fprintf( stderr, " handle=%p", req->handle );
2116 }
2117
2118 static void dump_get_window_rectangles_reply( const struct get_window_rectangles_reply *req )
2119 {
2120     fprintf( stderr, " window=" );
2121     dump_rectangle( &req->window );
2122     fprintf( stderr, "," );
2123     fprintf( stderr, " client=" );
2124     dump_rectangle( &req->client );
2125 }
2126
2127 static void dump_get_window_text_request( const struct get_window_text_request *req )
2128 {
2129     fprintf( stderr, " handle=%p", req->handle );
2130 }
2131
2132 static void dump_get_window_text_reply( const struct get_window_text_reply *req )
2133 {
2134     fprintf( stderr, " text=" );
2135     dump_varargs_unicode_str( cur_size );
2136 }
2137
2138 static void dump_set_window_text_request( const struct set_window_text_request *req )
2139 {
2140     fprintf( stderr, " handle=%p,", req->handle );
2141     fprintf( stderr, " text=" );
2142     dump_varargs_unicode_str( cur_size );
2143 }
2144
2145 static void dump_inc_window_paint_count_request( const struct inc_window_paint_count_request *req )
2146 {
2147     fprintf( stderr, " handle=%p,", req->handle );
2148     fprintf( stderr, " incr=%d", req->incr );
2149 }
2150
2151 static void dump_get_windows_offset_request( const struct get_windows_offset_request *req )
2152 {
2153     fprintf( stderr, " from=%p,", req->from );
2154     fprintf( stderr, " to=%p", req->to );
2155 }
2156
2157 static void dump_get_windows_offset_reply( const struct get_windows_offset_reply *req )
2158 {
2159     fprintf( stderr, " x=%d,", req->x );
2160     fprintf( stderr, " y=%d", req->y );
2161 }
2162
2163 static void dump_set_window_property_request( const struct set_window_property_request *req )
2164 {
2165     fprintf( stderr, " window=%p,", req->window );
2166     fprintf( stderr, " atom=%04x,", req->atom );
2167     fprintf( stderr, " string=%d,", req->string );
2168     fprintf( stderr, " handle=%p", req->handle );
2169 }
2170
2171 static void dump_remove_window_property_request( const struct remove_window_property_request *req )
2172 {
2173     fprintf( stderr, " window=%p,", req->window );
2174     fprintf( stderr, " atom=%04x", req->atom );
2175 }
2176
2177 static void dump_remove_window_property_reply( const struct remove_window_property_reply *req )
2178 {
2179     fprintf( stderr, " handle=%p", req->handle );
2180 }
2181
2182 static void dump_get_window_property_request( const struct get_window_property_request *req )
2183 {
2184     fprintf( stderr, " window=%p,", req->window );
2185     fprintf( stderr, " atom=%04x", req->atom );
2186 }
2187
2188 static void dump_get_window_property_reply( const struct get_window_property_reply *req )
2189 {
2190     fprintf( stderr, " handle=%p", req->handle );
2191 }
2192
2193 static void dump_get_window_properties_request( const struct get_window_properties_request *req )
2194 {
2195     fprintf( stderr, " window=%p", req->window );
2196 }
2197
2198 static void dump_get_window_properties_reply( const struct get_window_properties_reply *req )
2199 {
2200     fprintf( stderr, " total=%d,", req->total );
2201     fprintf( stderr, " props=" );
2202     dump_varargs_properties( cur_size );
2203 }
2204
2205 static void dump_attach_thread_input_request( const struct attach_thread_input_request *req )
2206 {
2207     fprintf( stderr, " tid_from=%08x,", req->tid_from );
2208     fprintf( stderr, " tid_to=%08x,", req->tid_to );
2209     fprintf( stderr, " attach=%d", req->attach );
2210 }
2211
2212 static void dump_get_thread_input_request( const struct get_thread_input_request *req )
2213 {
2214     fprintf( stderr, " tid=%08x", req->tid );
2215 }
2216
2217 static void dump_get_thread_input_reply( const struct get_thread_input_reply *req )
2218 {
2219     fprintf( stderr, " focus=%p,", req->focus );
2220     fprintf( stderr, " capture=%p,", req->capture );
2221     fprintf( stderr, " active=%p,", req->active );
2222     fprintf( stderr, " foreground=%p,", req->foreground );
2223     fprintf( stderr, " menu_owner=%p,", req->menu_owner );
2224     fprintf( stderr, " move_size=%p,", req->move_size );
2225     fprintf( stderr, " caret=%p,", req->caret );
2226     fprintf( stderr, " rect=" );
2227     dump_rectangle( &req->rect );
2228 }
2229
2230 static void dump_get_key_state_request( const struct get_key_state_request *req )
2231 {
2232     fprintf( stderr, " tid=%08x,", req->tid );
2233     fprintf( stderr, " key=%d", req->key );
2234 }
2235
2236 static void dump_get_key_state_reply( const struct get_key_state_reply *req )
2237 {
2238     fprintf( stderr, " state=%02x,", req->state );
2239     fprintf( stderr, " keystate=" );
2240     dump_varargs_bytes( cur_size );
2241 }
2242
2243 static void dump_set_key_state_request( const struct set_key_state_request *req )
2244 {
2245     fprintf( stderr, " tid=%08x,", req->tid );
2246     fprintf( stderr, " keystate=" );
2247     dump_varargs_bytes( cur_size );
2248 }
2249
2250 static void dump_set_foreground_window_request( const struct set_foreground_window_request *req )
2251 {
2252     fprintf( stderr, " handle=%p", req->handle );
2253 }
2254
2255 static void dump_set_foreground_window_reply( const struct set_foreground_window_reply *req )
2256 {
2257     fprintf( stderr, " previous=%p,", req->previous );
2258     fprintf( stderr, " send_msg_old=%d,", req->send_msg_old );
2259     fprintf( stderr, " send_msg_new=%d", req->send_msg_new );
2260 }
2261
2262 static void dump_set_focus_window_request( const struct set_focus_window_request *req )
2263 {
2264     fprintf( stderr, " handle=%p", req->handle );
2265 }
2266
2267 static void dump_set_focus_window_reply( const struct set_focus_window_reply *req )
2268 {
2269     fprintf( stderr, " previous=%p", req->previous );
2270 }
2271
2272 static void dump_set_active_window_request( const struct set_active_window_request *req )
2273 {
2274     fprintf( stderr, " handle=%p", req->handle );
2275 }
2276
2277 static void dump_set_active_window_reply( const struct set_active_window_reply *req )
2278 {
2279     fprintf( stderr, " previous=%p", req->previous );
2280 }
2281
2282 static void dump_set_capture_window_request( const struct set_capture_window_request *req )
2283 {
2284     fprintf( stderr, " handle=%p,", req->handle );
2285     fprintf( stderr, " flags=%08x", req->flags );
2286 }
2287
2288 static void dump_set_capture_window_reply( const struct set_capture_window_reply *req )
2289 {
2290     fprintf( stderr, " previous=%p,", req->previous );
2291     fprintf( stderr, " full_handle=%p", req->full_handle );
2292 }
2293
2294 static void dump_set_caret_window_request( const struct set_caret_window_request *req )
2295 {
2296     fprintf( stderr, " handle=%p,", req->handle );
2297     fprintf( stderr, " width=%d,", req->width );
2298     fprintf( stderr, " height=%d", req->height );
2299 }
2300
2301 static void dump_set_caret_window_reply( const struct set_caret_window_reply *req )
2302 {
2303     fprintf( stderr, " previous=%p,", req->previous );
2304     fprintf( stderr, " old_rect=" );
2305     dump_rectangle( &req->old_rect );
2306     fprintf( stderr, "," );
2307     fprintf( stderr, " old_hide=%d,", req->old_hide );
2308     fprintf( stderr, " old_state=%d", req->old_state );
2309 }
2310
2311 static void dump_set_caret_info_request( const struct set_caret_info_request *req )
2312 {
2313     fprintf( stderr, " flags=%08x,", req->flags );
2314     fprintf( stderr, " handle=%p,", req->handle );
2315     fprintf( stderr, " x=%d,", req->x );
2316     fprintf( stderr, " y=%d,", req->y );
2317     fprintf( stderr, " hide=%d,", req->hide );
2318     fprintf( stderr, " state=%d", req->state );
2319 }
2320
2321 static void dump_set_caret_info_reply( const struct set_caret_info_reply *req )
2322 {
2323     fprintf( stderr, " full_handle=%p,", req->full_handle );
2324     fprintf( stderr, " old_rect=" );
2325     dump_rectangle( &req->old_rect );
2326     fprintf( stderr, "," );
2327     fprintf( stderr, " old_hide=%d,", req->old_hide );
2328     fprintf( stderr, " old_state=%d", req->old_state );
2329 }
2330
2331 static void dump_set_hook_request( const struct set_hook_request *req )
2332 {
2333     fprintf( stderr, " id=%d,", req->id );
2334     fprintf( stderr, " tid=%08x,", req->tid );
2335     fprintf( stderr, " proc=%p,", req->proc );
2336     fprintf( stderr, " unicode=%d,", req->unicode );
2337     fprintf( stderr, " module=" );
2338     dump_varargs_unicode_str( cur_size );
2339 }
2340
2341 static void dump_set_hook_reply( const struct set_hook_reply *req )
2342 {
2343     fprintf( stderr, " handle=%p", req->handle );
2344 }
2345
2346 static void dump_remove_hook_request( const struct remove_hook_request *req )
2347 {
2348     fprintf( stderr, " handle=%p,", req->handle );
2349     fprintf( stderr, " id=%d,", req->id );
2350     fprintf( stderr, " proc=%p", req->proc );
2351 }
2352
2353 static void dump_start_hook_chain_request( const struct start_hook_chain_request *req )
2354 {
2355     fprintf( stderr, " id=%d", req->id );
2356 }
2357
2358 static void dump_start_hook_chain_reply( const struct start_hook_chain_reply *req )
2359 {
2360     fprintf( stderr, " handle=%p,", req->handle );
2361     fprintf( stderr, " proc=%p,", req->proc );
2362     fprintf( stderr, " unicode=%d,", req->unicode );
2363     fprintf( stderr, " module=" );
2364     dump_varargs_unicode_str( cur_size );
2365 }
2366
2367 static void dump_finish_hook_chain_request( const struct finish_hook_chain_request *req )
2368 {
2369     fprintf( stderr, " id=%d", req->id );
2370 }
2371
2372 static void dump_get_next_hook_request( const struct get_next_hook_request *req )
2373 {
2374     fprintf( stderr, " handle=%p", req->handle );
2375 }
2376
2377 static void dump_get_next_hook_reply( const struct get_next_hook_reply *req )
2378 {
2379     fprintf( stderr, " next=%p,", req->next );
2380     fprintf( stderr, " id=%d,", req->id );
2381     fprintf( stderr, " proc=%p,", req->proc );
2382     fprintf( stderr, " prev_unicode=%d,", req->prev_unicode );
2383     fprintf( stderr, " next_unicode=%d,", req->next_unicode );
2384     fprintf( stderr, " module=" );
2385     dump_varargs_unicode_str( cur_size );
2386 }
2387
2388 static const dump_func req_dumpers[REQ_NB_REQUESTS] = {
2389     (dump_func)dump_new_process_request,
2390     (dump_func)dump_get_new_process_info_request,
2391     (dump_func)dump_new_thread_request,
2392     (dump_func)dump_boot_done_request,
2393     (dump_func)dump_init_process_request,
2394     (dump_func)dump_get_startup_info_request,
2395     (dump_func)dump_init_process_done_request,
2396     (dump_func)dump_init_thread_request,
2397     (dump_func)dump_terminate_process_request,
2398     (dump_func)dump_terminate_thread_request,
2399     (dump_func)dump_get_process_info_request,
2400     (dump_func)dump_set_process_info_request,
2401     (dump_func)dump_get_thread_info_request,
2402     (dump_func)dump_set_thread_info_request,
2403     (dump_func)dump_get_dll_info_request,
2404     (dump_func)dump_suspend_thread_request,
2405     (dump_func)dump_resume_thread_request,
2406     (dump_func)dump_load_dll_request,
2407     (dump_func)dump_unload_dll_request,
2408     (dump_func)dump_queue_apc_request,
2409     (dump_func)dump_get_apc_request,
2410     (dump_func)dump_close_handle_request,
2411     (dump_func)dump_set_handle_info_request,
2412     (dump_func)dump_dup_handle_request,
2413     (dump_func)dump_open_process_request,
2414     (dump_func)dump_open_thread_request,
2415     (dump_func)dump_select_request,
2416     (dump_func)dump_create_event_request,
2417     (dump_func)dump_event_op_request,
2418     (dump_func)dump_open_event_request,
2419     (dump_func)dump_create_mutex_request,
2420     (dump_func)dump_release_mutex_request,
2421     (dump_func)dump_open_mutex_request,
2422     (dump_func)dump_create_semaphore_request,
2423     (dump_func)dump_release_semaphore_request,
2424     (dump_func)dump_open_semaphore_request,
2425     (dump_func)dump_create_file_request,
2426     (dump_func)dump_alloc_file_handle_request,
2427     (dump_func)dump_get_handle_fd_request,
2428     (dump_func)dump_set_file_pointer_request,
2429     (dump_func)dump_truncate_file_request,
2430     (dump_func)dump_set_file_time_request,
2431     (dump_func)dump_flush_file_request,
2432     (dump_func)dump_get_file_info_request,
2433     (dump_func)dump_lock_file_request,
2434     (dump_func)dump_unlock_file_request,
2435     (dump_func)dump_create_pipe_request,
2436     (dump_func)dump_create_socket_request,
2437     (dump_func)dump_accept_socket_request,
2438     (dump_func)dump_set_socket_event_request,
2439     (dump_func)dump_get_socket_event_request,
2440     (dump_func)dump_enable_socket_event_request,
2441     (dump_func)dump_set_socket_deferred_request,
2442     (dump_func)dump_alloc_console_request,
2443     (dump_func)dump_free_console_request,
2444     (dump_func)dump_get_console_renderer_events_request,
2445     (dump_func)dump_open_console_request,
2446     (dump_func)dump_get_console_mode_request,
2447     (dump_func)dump_set_console_mode_request,
2448     (dump_func)dump_set_console_input_info_request,
2449     (dump_func)dump_get_console_input_info_request,
2450     (dump_func)dump_append_console_input_history_request,
2451     (dump_func)dump_get_console_input_history_request,
2452     (dump_func)dump_create_console_output_request,
2453     (dump_func)dump_set_console_output_info_request,
2454     (dump_func)dump_get_console_output_info_request,
2455     (dump_func)dump_write_console_input_request,
2456     (dump_func)dump_read_console_input_request,
2457     (dump_func)dump_write_console_output_request,
2458     (dump_func)dump_fill_console_output_request,
2459     (dump_func)dump_read_console_output_request,
2460     (dump_func)dump_move_console_output_request,
2461     (dump_func)dump_send_console_signal_request,
2462     (dump_func)dump_create_change_notification_request,
2463     (dump_func)dump_create_mapping_request,
2464     (dump_func)dump_open_mapping_request,
2465     (dump_func)dump_get_mapping_info_request,
2466     (dump_func)dump_create_device_request,
2467     (dump_func)dump_create_snapshot_request,
2468     (dump_func)dump_next_process_request,
2469     (dump_func)dump_next_thread_request,
2470     (dump_func)dump_next_module_request,
2471     (dump_func)dump_wait_debug_event_request,
2472     (dump_func)dump_queue_exception_event_request,
2473     (dump_func)dump_get_exception_status_request,
2474     (dump_func)dump_output_debug_string_request,
2475     (dump_func)dump_continue_debug_event_request,
2476     (dump_func)dump_debug_process_request,
2477     (dump_func)dump_debug_break_request,
2478     (dump_func)dump_set_debugger_kill_on_exit_request,
2479     (dump_func)dump_read_process_memory_request,
2480     (dump_func)dump_write_process_memory_request,
2481     (dump_func)dump_create_key_request,
2482     (dump_func)dump_open_key_request,
2483     (dump_func)dump_delete_key_request,
2484     (dump_func)dump_enum_key_request,
2485     (dump_func)dump_set_key_value_request,
2486     (dump_func)dump_get_key_value_request,
2487     (dump_func)dump_enum_key_value_request,
2488     (dump_func)dump_delete_key_value_request,
2489     (dump_func)dump_load_registry_request,
2490     (dump_func)dump_save_registry_request,
2491     (dump_func)dump_save_registry_atexit_request,
2492     (dump_func)dump_set_registry_levels_request,
2493     (dump_func)dump_set_registry_notification_request,
2494     (dump_func)dump_create_timer_request,
2495     (dump_func)dump_open_timer_request,
2496     (dump_func)dump_set_timer_request,
2497     (dump_func)dump_cancel_timer_request,
2498     (dump_func)dump_get_thread_context_request,
2499     (dump_func)dump_set_thread_context_request,
2500     (dump_func)dump_get_selector_entry_request,
2501     (dump_func)dump_add_atom_request,
2502     (dump_func)dump_delete_atom_request,
2503     (dump_func)dump_find_atom_request,
2504     (dump_func)dump_get_atom_name_request,
2505     (dump_func)dump_init_atom_table_request,
2506     (dump_func)dump_get_msg_queue_request,
2507     (dump_func)dump_set_queue_mask_request,
2508     (dump_func)dump_get_queue_status_request,
2509     (dump_func)dump_wait_input_idle_request,
2510     (dump_func)dump_send_message_request,
2511     (dump_func)dump_get_message_request,
2512     (dump_func)dump_reply_message_request,
2513     (dump_func)dump_get_message_reply_request,
2514     (dump_func)dump_set_win_timer_request,
2515     (dump_func)dump_kill_win_timer_request,
2516     (dump_func)dump_create_serial_request,
2517     (dump_func)dump_get_serial_info_request,
2518     (dump_func)dump_set_serial_info_request,
2519     (dump_func)dump_register_async_request,
2520     (dump_func)dump_create_named_pipe_request,
2521     (dump_func)dump_open_named_pipe_request,
2522     (dump_func)dump_connect_named_pipe_request,
2523     (dump_func)dump_wait_named_pipe_request,
2524     (dump_func)dump_disconnect_named_pipe_request,
2525     (dump_func)dump_get_named_pipe_info_request,
2526     (dump_func)dump_create_smb_request,
2527     (dump_func)dump_get_smb_info_request,
2528     (dump_func)dump_create_window_request,
2529     (dump_func)dump_link_window_request,
2530     (dump_func)dump_destroy_window_request,
2531     (dump_func)dump_set_window_owner_request,
2532     (dump_func)dump_get_window_info_request,
2533     (dump_func)dump_set_window_info_request,
2534     (dump_func)dump_get_window_parents_request,
2535     (dump_func)dump_get_window_children_request,
2536     (dump_func)dump_get_window_tree_request,
2537     (dump_func)dump_set_window_rectangles_request,
2538     (dump_func)dump_get_window_rectangles_request,
2539     (dump_func)dump_get_window_text_request,
2540     (dump_func)dump_set_window_text_request,
2541     (dump_func)dump_inc_window_paint_count_request,
2542     (dump_func)dump_get_windows_offset_request,
2543     (dump_func)dump_set_window_property_request,
2544     (dump_func)dump_remove_window_property_request,
2545     (dump_func)dump_get_window_property_request,
2546     (dump_func)dump_get_window_properties_request,
2547     (dump_func)dump_attach_thread_input_request,
2548     (dump_func)dump_get_thread_input_request,
2549     (dump_func)dump_get_key_state_request,
2550     (dump_func)dump_set_key_state_request,
2551     (dump_func)dump_set_foreground_window_request,
2552     (dump_func)dump_set_focus_window_request,
2553     (dump_func)dump_set_active_window_request,
2554     (dump_func)dump_set_capture_window_request,
2555     (dump_func)dump_set_caret_window_request,
2556     (dump_func)dump_set_caret_info_request,
2557     (dump_func)dump_set_hook_request,
2558     (dump_func)dump_remove_hook_request,
2559     (dump_func)dump_start_hook_chain_request,
2560     (dump_func)dump_finish_hook_chain_request,
2561     (dump_func)dump_get_next_hook_request,
2562 };
2563
2564 static const dump_func reply_dumpers[REQ_NB_REQUESTS] = {
2565     (dump_func)dump_new_process_reply,
2566     (dump_func)dump_get_new_process_info_reply,
2567     (dump_func)dump_new_thread_reply,
2568     (dump_func)0,
2569     (dump_func)dump_init_process_reply,
2570     (dump_func)dump_get_startup_info_reply,
2571     (dump_func)dump_init_process_done_reply,
2572     (dump_func)dump_init_thread_reply,
2573     (dump_func)dump_terminate_process_reply,
2574     (dump_func)dump_terminate_thread_reply,
2575     (dump_func)dump_get_process_info_reply,
2576     (dump_func)0,
2577     (dump_func)dump_get_thread_info_reply,
2578     (dump_func)0,
2579     (dump_func)dump_get_dll_info_reply,
2580     (dump_func)dump_suspend_thread_reply,
2581     (dump_func)dump_resume_thread_reply,
2582     (dump_func)0,
2583     (dump_func)0,
2584     (dump_func)0,
2585     (dump_func)dump_get_apc_reply,
2586     (dump_func)dump_close_handle_reply,
2587     (dump_func)dump_set_handle_info_reply,
2588     (dump_func)dump_dup_handle_reply,
2589     (dump_func)dump_open_process_reply,
2590     (dump_func)dump_open_thread_reply,
2591     (dump_func)0,
2592     (dump_func)dump_create_event_reply,
2593     (dump_func)0,
2594     (dump_func)dump_open_event_reply,
2595     (dump_func)dump_create_mutex_reply,
2596     (dump_func)0,
2597     (dump_func)dump_open_mutex_reply,
2598     (dump_func)dump_create_semaphore_reply,
2599     (dump_func)dump_release_semaphore_reply,
2600     (dump_func)dump_open_semaphore_reply,
2601     (dump_func)dump_create_file_reply,
2602     (dump_func)dump_alloc_file_handle_reply,
2603     (dump_func)dump_get_handle_fd_reply,
2604     (dump_func)dump_set_file_pointer_reply,
2605     (dump_func)0,
2606     (dump_func)0,
2607     (dump_func)0,
2608     (dump_func)dump_get_file_info_reply,
2609     (dump_func)0,
2610     (dump_func)0,
2611     (dump_func)dump_create_pipe_reply,
2612     (dump_func)dump_create_socket_reply,
2613     (dump_func)dump_accept_socket_reply,
2614     (dump_func)0,
2615     (dump_func)dump_get_socket_event_reply,
2616     (dump_func)0,
2617     (dump_func)0,
2618     (dump_func)dump_alloc_console_reply,
2619     (dump_func)0,
2620     (dump_func)dump_get_console_renderer_events_reply,
2621     (dump_func)dump_open_console_reply,
2622     (dump_func)dump_get_console_mode_reply,
2623     (dump_func)0,
2624     (dump_func)0,
2625     (dump_func)dump_get_console_input_info_reply,
2626     (dump_func)0,
2627     (dump_func)dump_get_console_input_history_reply,
2628     (dump_func)dump_create_console_output_reply,
2629     (dump_func)0,
2630     (dump_func)dump_get_console_output_info_reply,
2631     (dump_func)dump_write_console_input_reply,
2632     (dump_func)dump_read_console_input_reply,
2633     (dump_func)dump_write_console_output_reply,
2634     (dump_func)dump_fill_console_output_reply,
2635     (dump_func)dump_read_console_output_reply,
2636     (dump_func)0,
2637     (dump_func)0,
2638     (dump_func)dump_create_change_notification_reply,
2639     (dump_func)dump_create_mapping_reply,
2640     (dump_func)dump_open_mapping_reply,
2641     (dump_func)dump_get_mapping_info_reply,
2642     (dump_func)dump_create_device_reply,
2643     (dump_func)dump_create_snapshot_reply,
2644     (dump_func)dump_next_process_reply,
2645     (dump_func)dump_next_thread_reply,
2646     (dump_func)dump_next_module_reply,
2647     (dump_func)dump_wait_debug_event_reply,
2648     (dump_func)dump_queue_exception_event_reply,
2649     (dump_func)dump_get_exception_status_reply,
2650     (dump_func)0,
2651     (dump_func)0,
2652     (dump_func)0,
2653     (dump_func)dump_debug_break_reply,
2654     (dump_func)0,
2655     (dump_func)dump_read_process_memory_reply,
2656     (dump_func)0,
2657     (dump_func)dump_create_key_reply,
2658     (dump_func)dump_open_key_reply,
2659     (dump_func)0,
2660     (dump_func)dump_enum_key_reply,
2661     (dump_func)0,
2662     (dump_func)dump_get_key_value_reply,
2663     (dump_func)dump_enum_key_value_reply,
2664     (dump_func)0,
2665     (dump_func)0,
2666     (dump_func)0,
2667     (dump_func)0,
2668     (dump_func)0,
2669     (dump_func)0,
2670     (dump_func)dump_create_timer_reply,
2671     (dump_func)dump_open_timer_reply,
2672     (dump_func)0,
2673     (dump_func)0,
2674     (dump_func)dump_get_thread_context_reply,
2675     (dump_func)0,
2676     (dump_func)dump_get_selector_entry_reply,
2677     (dump_func)dump_add_atom_reply,
2678     (dump_func)0,
2679     (dump_func)dump_find_atom_reply,
2680     (dump_func)dump_get_atom_name_reply,
2681     (dump_func)0,
2682     (dump_func)dump_get_msg_queue_reply,
2683     (dump_func)dump_set_queue_mask_reply,
2684     (dump_func)dump_get_queue_status_reply,
2685     (dump_func)dump_wait_input_idle_reply,
2686     (dump_func)0,
2687     (dump_func)dump_get_message_reply,
2688     (dump_func)0,
2689     (dump_func)dump_get_message_reply_reply,
2690     (dump_func)0,
2691     (dump_func)0,
2692     (dump_func)dump_create_serial_reply,
2693     (dump_func)dump_get_serial_info_reply,
2694     (dump_func)0,
2695     (dump_func)0,
2696     (dump_func)dump_create_named_pipe_reply,
2697     (dump_func)dump_open_named_pipe_reply,
2698     (dump_func)0,
2699     (dump_func)0,
2700     (dump_func)0,
2701     (dump_func)dump_get_named_pipe_info_reply,
2702     (dump_func)dump_create_smb_reply,
2703     (dump_func)dump_get_smb_info_reply,
2704     (dump_func)dump_create_window_reply,
2705     (dump_func)dump_link_window_reply,
2706     (dump_func)0,
2707     (dump_func)dump_set_window_owner_reply,
2708     (dump_func)dump_get_window_info_reply,
2709     (dump_func)dump_set_window_info_reply,
2710     (dump_func)dump_get_window_parents_reply,
2711     (dump_func)dump_get_window_children_reply,
2712     (dump_func)dump_get_window_tree_reply,
2713     (dump_func)0,
2714     (dump_func)dump_get_window_rectangles_reply,
2715     (dump_func)dump_get_window_text_reply,
2716     (dump_func)0,
2717     (dump_func)0,
2718     (dump_func)dump_get_windows_offset_reply,
2719     (dump_func)0,
2720     (dump_func)dump_remove_window_property_reply,
2721     (dump_func)dump_get_window_property_reply,
2722     (dump_func)dump_get_window_properties_reply,
2723     (dump_func)0,
2724     (dump_func)dump_get_thread_input_reply,
2725     (dump_func)dump_get_key_state_reply,
2726     (dump_func)0,
2727     (dump_func)dump_set_foreground_window_reply,
2728     (dump_func)dump_set_focus_window_reply,
2729     (dump_func)dump_set_active_window_reply,
2730     (dump_func)dump_set_capture_window_reply,
2731     (dump_func)dump_set_caret_window_reply,
2732     (dump_func)dump_set_caret_info_reply,
2733     (dump_func)dump_set_hook_reply,
2734     (dump_func)0,
2735     (dump_func)dump_start_hook_chain_reply,
2736     (dump_func)0,
2737     (dump_func)dump_get_next_hook_reply,
2738 };
2739
2740 static const char * const req_names[REQ_NB_REQUESTS] = {
2741     "new_process",
2742     "get_new_process_info",
2743     "new_thread",
2744     "boot_done",
2745     "init_process",
2746     "get_startup_info",
2747     "init_process_done",
2748     "init_thread",
2749     "terminate_process",
2750     "terminate_thread",
2751     "get_process_info",
2752     "set_process_info",
2753     "get_thread_info",
2754     "set_thread_info",
2755     "get_dll_info",
2756     "suspend_thread",
2757     "resume_thread",
2758     "load_dll",
2759     "unload_dll",
2760     "queue_apc",
2761     "get_apc",
2762     "close_handle",
2763     "set_handle_info",
2764     "dup_handle",
2765     "open_process",
2766     "open_thread",
2767     "select",
2768     "create_event",
2769     "event_op",
2770     "open_event",
2771     "create_mutex",
2772     "release_mutex",
2773     "open_mutex",
2774     "create_semaphore",
2775     "release_semaphore",
2776     "open_semaphore",
2777     "create_file",
2778     "alloc_file_handle",
2779     "get_handle_fd",
2780     "set_file_pointer",
2781     "truncate_file",
2782     "set_file_time",
2783     "flush_file",
2784     "get_file_info",
2785     "lock_file",
2786     "unlock_file",
2787     "create_pipe",
2788     "create_socket",
2789     "accept_socket",
2790     "set_socket_event",
2791     "get_socket_event",
2792     "enable_socket_event",
2793     "set_socket_deferred",
2794     "alloc_console",
2795     "free_console",
2796     "get_console_renderer_events",
2797     "open_console",
2798     "get_console_mode",
2799     "set_console_mode",
2800     "set_console_input_info",
2801     "get_console_input_info",
2802     "append_console_input_history",
2803     "get_console_input_history",
2804     "create_console_output",
2805     "set_console_output_info",
2806     "get_console_output_info",
2807     "write_console_input",
2808     "read_console_input",
2809     "write_console_output",
2810     "fill_console_output",
2811     "read_console_output",
2812     "move_console_output",
2813     "send_console_signal",
2814     "create_change_notification",
2815     "create_mapping",
2816     "open_mapping",
2817     "get_mapping_info",
2818     "create_device",
2819     "create_snapshot",
2820     "next_process",
2821     "next_thread",
2822     "next_module",
2823     "wait_debug_event",
2824     "queue_exception_event",
2825     "get_exception_status",
2826     "output_debug_string",
2827     "continue_debug_event",
2828     "debug_process",
2829     "debug_break",
2830     "set_debugger_kill_on_exit",
2831     "read_process_memory",
2832     "write_process_memory",
2833     "create_key",
2834     "open_key",
2835     "delete_key",
2836     "enum_key",
2837     "set_key_value",
2838     "get_key_value",
2839     "enum_key_value",
2840     "delete_key_value",
2841     "load_registry",
2842     "save_registry",
2843     "save_registry_atexit",
2844     "set_registry_levels",
2845     "set_registry_notification",
2846     "create_timer",
2847     "open_timer",
2848     "set_timer",
2849     "cancel_timer",
2850     "get_thread_context",
2851     "set_thread_context",
2852     "get_selector_entry",
2853     "add_atom",
2854     "delete_atom",
2855     "find_atom",
2856     "get_atom_name",
2857     "init_atom_table",
2858     "get_msg_queue",
2859     "set_queue_mask",
2860     "get_queue_status",
2861     "wait_input_idle",
2862     "send_message",
2863     "get_message",
2864     "reply_message",
2865     "get_message_reply",
2866     "set_win_timer",
2867     "kill_win_timer",
2868     "create_serial",
2869     "get_serial_info",
2870     "set_serial_info",
2871     "register_async",
2872     "create_named_pipe",
2873     "open_named_pipe",
2874     "connect_named_pipe",
2875     "wait_named_pipe",
2876     "disconnect_named_pipe",
2877     "get_named_pipe_info",
2878     "create_smb",
2879     "get_smb_info",
2880     "create_window",
2881     "link_window",
2882     "destroy_window",
2883     "set_window_owner",
2884     "get_window_info",
2885     "set_window_info",
2886     "get_window_parents",
2887     "get_window_children",
2888     "get_window_tree",
2889     "set_window_rectangles",
2890     "get_window_rectangles",
2891     "get_window_text",
2892     "set_window_text",
2893     "inc_window_paint_count",
2894     "get_windows_offset",
2895     "set_window_property",
2896     "remove_window_property",
2897     "get_window_property",
2898     "get_window_properties",
2899     "attach_thread_input",
2900     "get_thread_input",
2901     "get_key_state",
2902     "set_key_state",
2903     "set_foreground_window",
2904     "set_focus_window",
2905     "set_active_window",
2906     "set_capture_window",
2907     "set_caret_window",
2908     "set_caret_info",
2909     "set_hook",
2910     "remove_hook",
2911     "start_hook_chain",
2912     "finish_hook_chain",
2913     "get_next_hook",
2914 };
2915
2916 /* ### make_requests end ### */
2917 /* Everything above this line is generated automatically by tools/make_requests */
2918
2919 static const char *get_status_name( unsigned int status )
2920 {
2921 #define NAME(status)  { #status, STATUS_##status }
2922     static const struct
2923     {
2924         const char  *name;
2925         unsigned int value;
2926     } status_names[] =
2927     {
2928         NAME(ACCESS_DENIED),
2929         NAME(ACCESS_VIOLATION),
2930         NAME(BUFFER_OVERFLOW),
2931         NAME(CHILD_MUST_BE_VOLATILE),
2932         NAME(DIRECTORY_NOT_EMPTY),
2933         NAME(DISK_FULL),
2934         NAME(FILE_LOCK_CONFLICT),
2935         NAME(INVALID_FILE_FOR_SECTION),
2936         NAME(INVALID_HANDLE),
2937         NAME(INVALID_PARAMETER),
2938         NAME(KEY_DELETED),
2939         NAME(MEDIA_WRITE_PROTECTED),
2940         NAME(MUTANT_NOT_OWNED),
2941         NAME(NOT_REGISTRY_FILE),
2942         NAME(NO_MEMORY),
2943         NAME(NO_MORE_ENTRIES),
2944         NAME(NO_MORE_FILES),
2945         NAME(NO_SUCH_FILE),
2946         NAME(OBJECT_NAME_COLLISION),
2947         NAME(OBJECT_NAME_INVALID),
2948         NAME(OBJECT_NAME_NOT_FOUND),
2949         NAME(OBJECT_PATH_INVALID),
2950         NAME(OBJECT_TYPE_MISMATCH),
2951         NAME(PENDING),
2952         NAME(PIPE_BROKEN),
2953         NAME(SEMAPHORE_LIMIT_EXCEEDED),
2954         NAME(SHARING_VIOLATION),
2955         NAME(SUSPEND_COUNT_EXCEEDED),
2956         NAME(TIMEOUT),
2957         NAME(TOO_MANY_OPENED_FILES),
2958         NAME(UNSUCCESSFUL),
2959         NAME(USER_APC),
2960         { NULL, 0 }  /* terminator */
2961     };
2962 #undef NAME
2963
2964     int i;
2965     static char buffer[10];
2966
2967     if (status)
2968     {
2969         for (i = 0; status_names[i].name; i++)
2970             if (status_names[i].value == status) return status_names[i].name;
2971     }
2972     sprintf( buffer, "%x", status );
2973     return buffer;
2974 }
2975
2976 void trace_request(void)
2977 {
2978     enum request req = current->req.request_header.req;
2979     if (req < REQ_NB_REQUESTS)
2980     {
2981         fprintf( stderr, "%08x: %s(", (unsigned int)current, req_names[req] );
2982         if (req_dumpers[req])
2983         {
2984             cur_pos = 0;
2985             cur_data = get_req_data();
2986             cur_size = get_req_data_size();
2987             req_dumpers[req]( &current->req );
2988         }
2989         fprintf( stderr, " )\n" );
2990     }
2991     else fprintf( stderr, "%08x: %d(?)\n", (unsigned int)current, req );
2992 }
2993
2994 void trace_reply( enum request req, const union generic_reply *reply )
2995 {
2996     if (req < REQ_NB_REQUESTS)
2997     {
2998         fprintf( stderr, "%08x: %s() = %s",
2999                  (unsigned int)current, req_names[req], get_status_name(current->error) );
3000         if (reply_dumpers[req])
3001         {
3002             fprintf( stderr, " {" );
3003             cur_pos = 0;
3004             cur_data = current->reply_data;
3005             cur_size = reply->reply_header.reply_size;
3006             reply_dumpers[req]( reply );
3007             fprintf( stderr, " }" );
3008         }
3009         fputc( '\n', stderr );
3010     }
3011     else fprintf( stderr, "%08x: %d() = %s\n",
3012                   (unsigned int)current, req, get_status_name(current->error) );
3013 }