Added proper support for storing window parents in the server.
[wine] / server / trace.c
1 /*
2  * Server request tracing
3  *
4  * Copyright (C) 1999 Alexandre Julliard
5  */
6
7 #include <ctype.h>
8 #include <stdio.h>
9 #include <sys/types.h>
10 #include <sys/uio.h>
11
12 #include "config.h"
13 #include "winsock2.h"
14 #include "winnt.h"
15 #include "winbase.h"
16 #include "wincon.h"
17 #include "request.h"
18 #include "unicode.h"
19
20 static int cur_pos;
21
22 /* utility functions */
23
24 static const void *get_data( const void *req )
25 {
26     return (char *)get_req_data(req) + cur_pos;
27 }
28
29 static size_t get_size( const void *req )
30 {
31     return get_req_data_size(req) - cur_pos;
32 }
33
34 static void dump_uints( const int *ptr, int len )
35 {
36     fputc( '{', stderr );
37     while (len > 0)
38     {
39         fprintf( stderr, "%08x", *ptr++ );
40         if (--len) fputc( ',', stderr );
41     }
42     fputc( '}', stderr );
43 }
44
45 static void dump_context( const CONTEXT *context )
46 {
47 #ifdef __i386__
48     fprintf( stderr, "{flags=%08lx,eax=%08lx,ebx=%08lx,ecx=%08lx,edx=%08lx,esi=%08lx,edi=%08lx,"
49              "ebp=%08lx,eip=%08lx,esp=%08lx,eflags=%08lx,cs=%04lx,ds=%04lx,es=%04lx,"
50              "fs=%04lx,gs=%04lx,dr0=%08lx,dr1=%08lx,dr2=%08lx,dr3=%08lx,dr6=%08lx,dr7=%08lx,",
51              context->ContextFlags, context->Eax, context->Ebx, context->Ecx, context->Edx,
52              context->Esi, context->Edi, context->Ebp, context->Eip, context->Esp, context->EFlags,
53              context->SegCs, context->SegDs, context->SegEs, context->SegFs, context->SegGs,
54              context->Dr0, context->Dr1, context->Dr2, context->Dr3, context->Dr6, context->Dr7 );
55     fprintf( stderr, "float=" );
56     dump_uints( (int *)&context->FloatSave, sizeof(context->FloatSave) / sizeof(int) );
57     fprintf( stderr, "}" );
58 #else
59     dump_uints( (int *)context, sizeof(*context) / sizeof(int) );
60 #endif
61 }
62
63 static void dump_exc_record( const EXCEPTION_RECORD *rec )
64 {
65     int i;
66     fprintf( stderr, "{code=%lx,flags=%lx,rec=%p,addr=%p,params={",
67              rec->ExceptionCode, rec->ExceptionFlags, rec->ExceptionRecord,
68              rec->ExceptionAddress );
69     for (i = 0; i < min(rec->NumberParameters,EXCEPTION_MAXIMUM_PARAMETERS); i++)
70     {
71         if (i) fputc( ',', stderr );
72         fprintf( stderr, "%lx", rec->ExceptionInformation[i] );
73     }
74     fputc( '}', stderr );
75 }
76
77 static size_t dump_varargs_ints( const void *req )
78 {
79     const int *data = get_data(req);
80     size_t len = get_size(req) / sizeof(*data);
81
82     fputc( '{', stderr );
83     while (len > 0)
84     {
85         fprintf( stderr, "%d", *data++ );
86         if (--len) fputc( ',', stderr );
87     }
88     fputc( '}', stderr );
89     return get_size(req);
90 }
91
92 static size_t dump_varargs_handles( const void *req )
93 {
94     const handle_t *data = get_data(req);
95     size_t len = get_size(req) / sizeof(*data);
96
97     fputc( '{', stderr );
98     while (len > 0)
99     {
100         fprintf( stderr, "%d", *data++ );
101         if (--len) fputc( ',', stderr );
102     }
103     fputc( '}', stderr );
104     return get_size(req);
105 }
106
107 static size_t dump_varargs_ptrs( const void *req )
108 {
109     void * const *data = get_data(req);
110     size_t len = get_size(req) / sizeof(*data);
111
112     fputc( '{', stderr );
113     while (len > 0)
114     {
115         fprintf( stderr, "%p", *data++ );
116         if (--len) fputc( ',', stderr );
117     }
118     fputc( '}', stderr );
119     return get_size(req);
120 }
121
122 static size_t dump_varargs_user_handles( const void *req )
123 {
124     const user_handle_t *data = get_data(req);
125     size_t len = get_size(req) / sizeof(*data);
126
127     fputc( '{', stderr );
128     while (len > 0)
129     {
130         fprintf( stderr, "%08x", *data++ );
131         if (--len) fputc( ',', stderr );
132     }
133     fputc( '}', stderr );
134     return get_size(req);
135 }
136
137 static size_t dump_varargs_bytes( const void *req )
138 {
139     const unsigned char *data = get_data(req);
140     size_t len = get_size(req);
141
142     fputc( '{', stderr );
143     while (len > 0)
144     {
145         fprintf( stderr, "%02x", *data++ );
146         if (--len) fputc( ',', stderr );
147     }
148     fputc( '}', stderr );
149     return get_size(req);
150 }
151
152 static size_t dump_varargs_string( const void *req )
153 {
154     fprintf( stderr, "\"%.*s\"", (int)get_size(req), (char *)get_data(req) );
155     return get_size(req);
156 }
157
158 static size_t dump_varargs_unicode_len_str( const void *req )
159 {
160     const WCHAR *str = get_data(req);
161     int len = *str++ + sizeof(WCHAR);
162     len = min( len, get_size(req) );
163     fprintf( stderr, "L\"" );
164     if (len >= sizeof(WCHAR)) dump_strW( str, (len / sizeof(WCHAR)) - 1, stderr, "\"\"" );
165     fputc( '\"', stderr );
166     return len;
167 }
168
169 static size_t dump_varargs_unicode_str( const void *req )
170 {
171     fprintf( stderr, "L\"" );
172     dump_strW( get_data(req), get_size(req) / sizeof(WCHAR), stderr, "\"\"" );
173     fputc( '\"', stderr );
174     return get_size(req);
175 }
176
177 static size_t dump_varargs_context( const void *req )
178 {
179     dump_context( get_data(req) );
180     return get_size(req);
181 }
182
183 static size_t dump_varargs_exc_event( const void *req )
184 {
185     const CONTEXT *ptr = get_data(req);
186     fprintf( stderr, "{context=" );
187     dump_context( ptr );
188     fprintf( stderr, ",rec=" );
189     dump_exc_record( (EXCEPTION_RECORD *)(ptr + 1) );
190     fputc( '}', stderr );
191     return get_size(req);
192 }
193
194 static size_t dump_varargs_debug_event( const void *req )
195 {
196     const debug_event_t *event = get_data(req);
197
198     if (!get_size(req))
199     {
200         fprintf( stderr, "{}" );
201         return 0;
202     }
203     switch(event->code)
204     {
205     case EXCEPTION_DEBUG_EVENT:
206         fprintf( stderr, "{exception," );
207         dump_exc_record( &event->info.exception.record );
208         fprintf( stderr, ",first=%d}", event->info.exception.first );
209         break;
210     case CREATE_THREAD_DEBUG_EVENT:
211         fprintf( stderr, "{create_thread,thread=%d,teb=%p,start=%p}",
212                  event->info.create_thread.handle, event->info.create_thread.teb,
213                  event->info.create_thread.start );
214         break;
215     case CREATE_PROCESS_DEBUG_EVENT:
216         fprintf( stderr, "{create_process,file=%d,process=%d,thread=%d,base=%p,offset=%d,"
217                          "size=%d,teb=%p,start=%p,name=%p,unicode=%d}",
218                  event->info.create_process.file, event->info.create_process.process,
219                  event->info.create_process.thread, event->info.create_process.base,
220                  event->info.create_process.dbg_offset, event->info.create_process.dbg_size,
221                  event->info.create_process.teb, event->info.create_process.start,
222                  event->info.create_process.name, event->info.create_process.unicode );
223         break;
224     case EXIT_THREAD_DEBUG_EVENT:
225         fprintf( stderr, "{exit_thread,code=%d}", event->info.exit.exit_code );
226         break;
227     case EXIT_PROCESS_DEBUG_EVENT:
228         fprintf( stderr, "{exit_process,code=%d}", event->info.exit.exit_code );
229         break;
230     case LOAD_DLL_DEBUG_EVENT:
231         fprintf( stderr, "{load_dll,file=%d,base=%p,offset=%d,size=%d,name=%p,unicode=%d}",
232                  event->info.load_dll.handle, event->info.load_dll.base,
233                  event->info.load_dll.dbg_offset, event->info.load_dll.dbg_size,
234                  event->info.load_dll.name, event->info.load_dll.unicode );
235         break;
236     case UNLOAD_DLL_DEBUG_EVENT:
237         fprintf( stderr, "{unload_dll,base=%p}", event->info.unload_dll.base );
238         break;
239     case OUTPUT_DEBUG_STRING_EVENT:
240         fprintf( stderr, "{output_string,data=%p,unicode=%d,len=%d}",
241                  event->info.output_string.string, event->info.output_string.unicode,
242                  event->info.output_string.length );
243         break;
244     case RIP_EVENT:
245         fprintf( stderr, "{rip,err=%d,type=%d}",
246                  event->info.rip_info.error, event->info.rip_info.type );
247         break;
248     case 0:  /* zero is the code returned on timeouts */
249         fprintf( stderr, "{}" );
250         break;
251     default:
252         fprintf( stderr, "{code=??? (%d)}", event->code );
253         break;
254     }
255     return get_size(req);
256 }
257
258 static size_t dump_varargs_input_records( const void *req )
259 {
260     const INPUT_RECORD *rec = get_data(req);
261     size_t len = get_size(req) / sizeof(*rec);
262
263     fputc( '{', stderr );
264     while (len > 0)
265     {
266         fprintf( stderr, "{%04x,...}", rec->EventType );
267         rec++;
268         if (--len) fputc( ',', stderr );
269     }
270     fputc( '}', stderr );
271     return get_size(req);
272 }
273
274 typedef void (*dump_func)( const void *req );
275
276 /* Everything below this line is generated automatically by tools/make_requests */
277 /* ### make_requests begin ### */
278
279 static void dump_new_process_request( const struct new_process_request *req )
280 {
281     fprintf( stderr, " inherit_all=%d,", req->inherit_all );
282     fprintf( stderr, " create_flags=%d,", req->create_flags );
283     fprintf( stderr, " start_flags=%d,", req->start_flags );
284     fprintf( stderr, " exe_file=%d,", req->exe_file );
285     fprintf( stderr, " hstdin=%d,", req->hstdin );
286     fprintf( stderr, " hstdout=%d,", req->hstdout );
287     fprintf( stderr, " hstderr=%d,", req->hstderr );
288     fprintf( stderr, " cmd_show=%d,", req->cmd_show );
289     fprintf( stderr, " filename=" );
290     cur_pos += dump_varargs_string( req );
291 }
292
293 static void dump_new_process_reply( const struct new_process_request *req )
294 {
295     fprintf( stderr, " info=%d", req->info );
296 }
297
298 static void dump_get_new_process_info_request( const struct get_new_process_info_request *req )
299 {
300     fprintf( stderr, " info=%d,", req->info );
301     fprintf( stderr, " pinherit=%d,", req->pinherit );
302     fprintf( stderr, " tinherit=%d", req->tinherit );
303 }
304
305 static void dump_get_new_process_info_reply( const struct get_new_process_info_request *req )
306 {
307     fprintf( stderr, " pid=%p,", req->pid );
308     fprintf( stderr, " phandle=%d,", req->phandle );
309     fprintf( stderr, " tid=%p,", req->tid );
310     fprintf( stderr, " thandle=%d,", req->thandle );
311     fprintf( stderr, " event=%d", req->event );
312 }
313
314 static void dump_new_thread_request( const struct new_thread_request *req )
315 {
316     fprintf( stderr, " suspend=%d,", req->suspend );
317     fprintf( stderr, " inherit=%d,", req->inherit );
318     fprintf( stderr, " request_fd=%d", req->request_fd );
319 }
320
321 static void dump_new_thread_reply( const struct new_thread_request *req )
322 {
323     fprintf( stderr, " tid=%p,", req->tid );
324     fprintf( stderr, " handle=%d", req->handle );
325 }
326
327 static void dump_boot_done_request( const struct boot_done_request *req )
328 {
329     fprintf( stderr, " debug_level=%d", req->debug_level );
330 }
331
332 static void dump_init_process_request( const struct init_process_request *req )
333 {
334     fprintf( stderr, " ldt_copy=%p,", req->ldt_copy );
335     fprintf( stderr, " ppid=%d", req->ppid );
336 }
337
338 static void dump_init_process_reply( const struct init_process_request *req )
339 {
340     fprintf( stderr, " create_flags=%d,", req->create_flags );
341     fprintf( stderr, " start_flags=%d,", req->start_flags );
342     fprintf( stderr, " server_start=%08x,", req->server_start );
343     fprintf( stderr, " exe_file=%d,", req->exe_file );
344     fprintf( stderr, " hstdin=%d,", req->hstdin );
345     fprintf( stderr, " hstdout=%d,", req->hstdout );
346     fprintf( stderr, " hstderr=%d,", req->hstderr );
347     fprintf( stderr, " cmd_show=%d,", req->cmd_show );
348     fprintf( stderr, " filename=" );
349     cur_pos += dump_varargs_string( req );
350 }
351
352 static void dump_init_process_done_request( const struct init_process_done_request *req )
353 {
354     fprintf( stderr, " module=%p,", req->module );
355     fprintf( stderr, " entry=%p,", req->entry );
356     fprintf( stderr, " name=%p,", req->name );
357     fprintf( stderr, " exe_file=%d,", req->exe_file );
358     fprintf( stderr, " gui=%d", req->gui );
359 }
360
361 static void dump_init_process_done_reply( const struct init_process_done_request *req )
362 {
363     fprintf( stderr, " debugged=%d", req->debugged );
364 }
365
366 static void dump_init_thread_request( const struct init_thread_request *req )
367 {
368     fprintf( stderr, " unix_pid=%d,", req->unix_pid );
369     fprintf( stderr, " teb=%p,", req->teb );
370     fprintf( stderr, " entry=%p,", req->entry );
371     fprintf( stderr, " reply_fd=%d,", req->reply_fd );
372     fprintf( stderr, " wait_fd=%d", req->wait_fd );
373 }
374
375 static void dump_init_thread_reply( const struct init_thread_request *req )
376 {
377     fprintf( stderr, " pid=%p,", req->pid );
378     fprintf( stderr, " tid=%p,", req->tid );
379     fprintf( stderr, " boot=%d,", req->boot );
380     fprintf( stderr, " version=%d", req->version );
381 }
382
383 static void dump_set_thread_buffer_request( const struct set_thread_buffer_request *req )
384 {
385     fprintf( stderr, " fd=%d", req->fd );
386 }
387
388 static void dump_set_thread_buffer_reply( const struct set_thread_buffer_request *req )
389 {
390     fprintf( stderr, " offset=%08x,", req->offset );
391     fprintf( stderr, " size=%08x", req->size );
392 }
393
394 static void dump_terminate_process_request( const struct terminate_process_request *req )
395 {
396     fprintf( stderr, " handle=%d,", req->handle );
397     fprintf( stderr, " exit_code=%d", req->exit_code );
398 }
399
400 static void dump_terminate_process_reply( const struct terminate_process_request *req )
401 {
402     fprintf( stderr, " self=%d", req->self );
403 }
404
405 static void dump_terminate_thread_request( const struct terminate_thread_request *req )
406 {
407     fprintf( stderr, " handle=%d,", req->handle );
408     fprintf( stderr, " exit_code=%d", req->exit_code );
409 }
410
411 static void dump_terminate_thread_reply( const struct terminate_thread_request *req )
412 {
413     fprintf( stderr, " self=%d,", req->self );
414     fprintf( stderr, " last=%d", req->last );
415 }
416
417 static void dump_get_process_info_request( const struct get_process_info_request *req )
418 {
419     fprintf( stderr, " handle=%d", req->handle );
420 }
421
422 static void dump_get_process_info_reply( const struct get_process_info_request *req )
423 {
424     fprintf( stderr, " pid=%p,", req->pid );
425     fprintf( stderr, " debugged=%d,", req->debugged );
426     fprintf( stderr, " exit_code=%d,", req->exit_code );
427     fprintf( stderr, " priority=%d,", req->priority );
428     fprintf( stderr, " process_affinity=%d,", req->process_affinity );
429     fprintf( stderr, " system_affinity=%d", req->system_affinity );
430 }
431
432 static void dump_set_process_info_request( const struct set_process_info_request *req )
433 {
434     fprintf( stderr, " handle=%d,", req->handle );
435     fprintf( stderr, " mask=%d,", req->mask );
436     fprintf( stderr, " priority=%d,", req->priority );
437     fprintf( stderr, " affinity=%d", req->affinity );
438 }
439
440 static void dump_get_thread_info_request( const struct get_thread_info_request *req )
441 {
442     fprintf( stderr, " handle=%d,", req->handle );
443     fprintf( stderr, " tid_in=%p", req->tid_in );
444 }
445
446 static void dump_get_thread_info_reply( const struct get_thread_info_request *req )
447 {
448     fprintf( stderr, " tid=%p,", req->tid );
449     fprintf( stderr, " teb=%p,", req->teb );
450     fprintf( stderr, " exit_code=%d,", req->exit_code );
451     fprintf( stderr, " priority=%d", req->priority );
452 }
453
454 static void dump_set_thread_info_request( const struct set_thread_info_request *req )
455 {
456     fprintf( stderr, " handle=%d,", req->handle );
457     fprintf( stderr, " mask=%d,", req->mask );
458     fprintf( stderr, " priority=%d,", req->priority );
459     fprintf( stderr, " affinity=%d", req->affinity );
460 }
461
462 static void dump_suspend_thread_request( const struct suspend_thread_request *req )
463 {
464     fprintf( stderr, " handle=%d", req->handle );
465 }
466
467 static void dump_suspend_thread_reply( const struct suspend_thread_request *req )
468 {
469     fprintf( stderr, " count=%d", req->count );
470 }
471
472 static void dump_resume_thread_request( const struct resume_thread_request *req )
473 {
474     fprintf( stderr, " handle=%d", req->handle );
475 }
476
477 static void dump_resume_thread_reply( const struct resume_thread_request *req )
478 {
479     fprintf( stderr, " count=%d", req->count );
480 }
481
482 static void dump_load_dll_request( const struct load_dll_request *req )
483 {
484     fprintf( stderr, " handle=%d,", req->handle );
485     fprintf( stderr, " base=%p,", req->base );
486     fprintf( stderr, " dbg_offset=%d,", req->dbg_offset );
487     fprintf( stderr, " dbg_size=%d,", req->dbg_size );
488     fprintf( stderr, " name=%p", req->name );
489 }
490
491 static void dump_unload_dll_request( const struct unload_dll_request *req )
492 {
493     fprintf( stderr, " base=%p", req->base );
494 }
495
496 static void dump_queue_apc_request( const struct queue_apc_request *req )
497 {
498     fprintf( stderr, " handle=%d,", req->handle );
499     fprintf( stderr, " user=%d,", req->user );
500     fprintf( stderr, " func=%p,", req->func );
501     fprintf( stderr, " param=%p", req->param );
502 }
503
504 static void dump_get_apc_request( const struct get_apc_request *req )
505 {
506     fprintf( stderr, " alertable=%d", req->alertable );
507 }
508
509 static void dump_get_apc_reply( const struct get_apc_request *req )
510 {
511     fprintf( stderr, " func=%p,", req->func );
512     fprintf( stderr, " type=%d,", req->type );
513     fprintf( stderr, " args=" );
514     cur_pos += dump_varargs_ptrs( req );
515 }
516
517 static void dump_close_handle_request( const struct close_handle_request *req )
518 {
519     fprintf( stderr, " handle=%d", req->handle );
520 }
521
522 static void dump_close_handle_reply( const struct close_handle_request *req )
523 {
524     fprintf( stderr, " fd=%d", req->fd );
525 }
526
527 static void dump_set_handle_info_request( const struct set_handle_info_request *req )
528 {
529     fprintf( stderr, " handle=%d,", req->handle );
530     fprintf( stderr, " flags=%d,", req->flags );
531     fprintf( stderr, " mask=%d,", req->mask );
532     fprintf( stderr, " fd=%d", req->fd );
533 }
534
535 static void dump_set_handle_info_reply( const struct set_handle_info_request *req )
536 {
537     fprintf( stderr, " old_flags=%d,", req->old_flags );
538     fprintf( stderr, " cur_fd=%d", req->cur_fd );
539 }
540
541 static void dump_dup_handle_request( const struct dup_handle_request *req )
542 {
543     fprintf( stderr, " src_process=%d,", req->src_process );
544     fprintf( stderr, " src_handle=%d,", req->src_handle );
545     fprintf( stderr, " dst_process=%d,", req->dst_process );
546     fprintf( stderr, " access=%08x,", req->access );
547     fprintf( stderr, " inherit=%d,", req->inherit );
548     fprintf( stderr, " options=%d", req->options );
549 }
550
551 static void dump_dup_handle_reply( const struct dup_handle_request *req )
552 {
553     fprintf( stderr, " handle=%d,", req->handle );
554     fprintf( stderr, " fd=%d", req->fd );
555 }
556
557 static void dump_open_process_request( const struct open_process_request *req )
558 {
559     fprintf( stderr, " pid=%p,", req->pid );
560     fprintf( stderr, " access=%08x,", req->access );
561     fprintf( stderr, " inherit=%d", req->inherit );
562 }
563
564 static void dump_open_process_reply( const struct open_process_request *req )
565 {
566     fprintf( stderr, " handle=%d", req->handle );
567 }
568
569 static void dump_select_request( const struct select_request *req )
570 {
571     fprintf( stderr, " flags=%d,", req->flags );
572     fprintf( stderr, " cookie=%p,", req->cookie );
573     fprintf( stderr, " sec=%d,", req->sec );
574     fprintf( stderr, " usec=%d,", req->usec );
575     fprintf( stderr, " handles=" );
576     cur_pos += dump_varargs_handles( req );
577 }
578
579 static void dump_create_event_request( const struct create_event_request *req )
580 {
581     fprintf( stderr, " manual_reset=%d,", req->manual_reset );
582     fprintf( stderr, " initial_state=%d,", req->initial_state );
583     fprintf( stderr, " inherit=%d,", req->inherit );
584     fprintf( stderr, " name=" );
585     cur_pos += dump_varargs_unicode_str( req );
586 }
587
588 static void dump_create_event_reply( const struct create_event_request *req )
589 {
590     fprintf( stderr, " handle=%d", req->handle );
591 }
592
593 static void dump_event_op_request( const struct event_op_request *req )
594 {
595     fprintf( stderr, " handle=%d,", req->handle );
596     fprintf( stderr, " op=%d", req->op );
597 }
598
599 static void dump_open_event_request( const struct open_event_request *req )
600 {
601     fprintf( stderr, " access=%08x,", req->access );
602     fprintf( stderr, " inherit=%d,", req->inherit );
603     fprintf( stderr, " name=" );
604     cur_pos += dump_varargs_unicode_str( req );
605 }
606
607 static void dump_open_event_reply( const struct open_event_request *req )
608 {
609     fprintf( stderr, " handle=%d", req->handle );
610 }
611
612 static void dump_create_mutex_request( const struct create_mutex_request *req )
613 {
614     fprintf( stderr, " owned=%d,", req->owned );
615     fprintf( stderr, " inherit=%d,", req->inherit );
616     fprintf( stderr, " name=" );
617     cur_pos += dump_varargs_unicode_str( req );
618 }
619
620 static void dump_create_mutex_reply( const struct create_mutex_request *req )
621 {
622     fprintf( stderr, " handle=%d", req->handle );
623 }
624
625 static void dump_release_mutex_request( const struct release_mutex_request *req )
626 {
627     fprintf( stderr, " handle=%d", req->handle );
628 }
629
630 static void dump_open_mutex_request( const struct open_mutex_request *req )
631 {
632     fprintf( stderr, " access=%08x,", req->access );
633     fprintf( stderr, " inherit=%d,", req->inherit );
634     fprintf( stderr, " name=" );
635     cur_pos += dump_varargs_unicode_str( req );
636 }
637
638 static void dump_open_mutex_reply( const struct open_mutex_request *req )
639 {
640     fprintf( stderr, " handle=%d", req->handle );
641 }
642
643 static void dump_create_semaphore_request( const struct create_semaphore_request *req )
644 {
645     fprintf( stderr, " initial=%08x,", req->initial );
646     fprintf( stderr, " max=%08x,", req->max );
647     fprintf( stderr, " inherit=%d,", req->inherit );
648     fprintf( stderr, " name=" );
649     cur_pos += dump_varargs_unicode_str( req );
650 }
651
652 static void dump_create_semaphore_reply( const struct create_semaphore_request *req )
653 {
654     fprintf( stderr, " handle=%d", req->handle );
655 }
656
657 static void dump_release_semaphore_request( const struct release_semaphore_request *req )
658 {
659     fprintf( stderr, " handle=%d,", req->handle );
660     fprintf( stderr, " count=%08x", req->count );
661 }
662
663 static void dump_release_semaphore_reply( const struct release_semaphore_request *req )
664 {
665     fprintf( stderr, " prev_count=%08x", req->prev_count );
666 }
667
668 static void dump_open_semaphore_request( const struct open_semaphore_request *req )
669 {
670     fprintf( stderr, " access=%08x,", req->access );
671     fprintf( stderr, " inherit=%d,", req->inherit );
672     fprintf( stderr, " name=" );
673     cur_pos += dump_varargs_unicode_str( req );
674 }
675
676 static void dump_open_semaphore_reply( const struct open_semaphore_request *req )
677 {
678     fprintf( stderr, " handle=%d", req->handle );
679 }
680
681 static void dump_create_file_request( const struct create_file_request *req )
682 {
683     fprintf( stderr, " access=%08x,", req->access );
684     fprintf( stderr, " inherit=%d,", req->inherit );
685     fprintf( stderr, " sharing=%08x,", req->sharing );
686     fprintf( stderr, " create=%d,", req->create );
687     fprintf( stderr, " attrs=%08x,", req->attrs );
688     fprintf( stderr, " filename=" );
689     cur_pos += dump_varargs_string( req );
690 }
691
692 static void dump_create_file_reply( const struct create_file_request *req )
693 {
694     fprintf( stderr, " handle=%d", req->handle );
695 }
696
697 static void dump_alloc_file_handle_request( const struct alloc_file_handle_request *req )
698 {
699     fprintf( stderr, " access=%08x,", req->access );
700     fprintf( stderr, " fd=%d", req->fd );
701 }
702
703 static void dump_alloc_file_handle_reply( const struct alloc_file_handle_request *req )
704 {
705     fprintf( stderr, " handle=%d", req->handle );
706 }
707
708 static void dump_get_handle_fd_request( const struct get_handle_fd_request *req )
709 {
710     fprintf( stderr, " handle=%d,", req->handle );
711     fprintf( stderr, " access=%08x", req->access );
712 }
713
714 static void dump_get_handle_fd_reply( const struct get_handle_fd_request *req )
715 {
716     fprintf( stderr, " fd=%d", req->fd );
717 }
718
719 static void dump_set_file_pointer_request( const struct set_file_pointer_request *req )
720 {
721     fprintf( stderr, " handle=%d,", req->handle );
722     fprintf( stderr, " low=%d,", req->low );
723     fprintf( stderr, " high=%d,", req->high );
724     fprintf( stderr, " whence=%d", req->whence );
725 }
726
727 static void dump_set_file_pointer_reply( const struct set_file_pointer_request *req )
728 {
729     fprintf( stderr, " new_low=%d,", req->new_low );
730     fprintf( stderr, " new_high=%d", req->new_high );
731 }
732
733 static void dump_truncate_file_request( const struct truncate_file_request *req )
734 {
735     fprintf( stderr, " handle=%d", req->handle );
736 }
737
738 static void dump_set_file_time_request( const struct set_file_time_request *req )
739 {
740     fprintf( stderr, " handle=%d,", req->handle );
741     fprintf( stderr, " access_time=%ld,", req->access_time );
742     fprintf( stderr, " write_time=%ld", req->write_time );
743 }
744
745 static void dump_flush_file_request( const struct flush_file_request *req )
746 {
747     fprintf( stderr, " handle=%d", req->handle );
748 }
749
750 static void dump_get_file_info_request( const struct get_file_info_request *req )
751 {
752     fprintf( stderr, " handle=%d", req->handle );
753 }
754
755 static void dump_get_file_info_reply( const struct get_file_info_request *req )
756 {
757     fprintf( stderr, " type=%d,", req->type );
758     fprintf( stderr, " attr=%d,", req->attr );
759     fprintf( stderr, " access_time=%ld,", req->access_time );
760     fprintf( stderr, " write_time=%ld,", req->write_time );
761     fprintf( stderr, " size_high=%d,", req->size_high );
762     fprintf( stderr, " size_low=%d,", req->size_low );
763     fprintf( stderr, " links=%d,", req->links );
764     fprintf( stderr, " index_high=%d,", req->index_high );
765     fprintf( stderr, " index_low=%d,", req->index_low );
766     fprintf( stderr, " serial=%08x", req->serial );
767 }
768
769 static void dump_lock_file_request( const struct lock_file_request *req )
770 {
771     fprintf( stderr, " handle=%d,", req->handle );
772     fprintf( stderr, " offset_low=%08x,", req->offset_low );
773     fprintf( stderr, " offset_high=%08x,", req->offset_high );
774     fprintf( stderr, " count_low=%08x,", req->count_low );
775     fprintf( stderr, " count_high=%08x", req->count_high );
776 }
777
778 static void dump_unlock_file_request( const struct unlock_file_request *req )
779 {
780     fprintf( stderr, " handle=%d,", req->handle );
781     fprintf( stderr, " offset_low=%08x,", req->offset_low );
782     fprintf( stderr, " offset_high=%08x,", req->offset_high );
783     fprintf( stderr, " count_low=%08x,", req->count_low );
784     fprintf( stderr, " count_high=%08x", req->count_high );
785 }
786
787 static void dump_create_pipe_request( const struct create_pipe_request *req )
788 {
789     fprintf( stderr, " inherit=%d", req->inherit );
790 }
791
792 static void dump_create_pipe_reply( const struct create_pipe_request *req )
793 {
794     fprintf( stderr, " handle_read=%d,", req->handle_read );
795     fprintf( stderr, " handle_write=%d", req->handle_write );
796 }
797
798 static void dump_create_socket_request( const struct create_socket_request *req )
799 {
800     fprintf( stderr, " access=%08x,", req->access );
801     fprintf( stderr, " inherit=%d,", req->inherit );
802     fprintf( stderr, " family=%d,", req->family );
803     fprintf( stderr, " type=%d,", req->type );
804     fprintf( stderr, " protocol=%d", req->protocol );
805 }
806
807 static void dump_create_socket_reply( const struct create_socket_request *req )
808 {
809     fprintf( stderr, " handle=%d", req->handle );
810 }
811
812 static void dump_accept_socket_request( const struct accept_socket_request *req )
813 {
814     fprintf( stderr, " lhandle=%d,", req->lhandle );
815     fprintf( stderr, " access=%08x,", req->access );
816     fprintf( stderr, " inherit=%d", req->inherit );
817 }
818
819 static void dump_accept_socket_reply( const struct accept_socket_request *req )
820 {
821     fprintf( stderr, " handle=%d", req->handle );
822 }
823
824 static void dump_set_socket_event_request( const struct set_socket_event_request *req )
825 {
826     fprintf( stderr, " handle=%d,", req->handle );
827     fprintf( stderr, " mask=%08x,", req->mask );
828     fprintf( stderr, " event=%d", req->event );
829 }
830
831 static void dump_get_socket_event_request( const struct get_socket_event_request *req )
832 {
833     fprintf( stderr, " handle=%d,", req->handle );
834     fprintf( stderr, " service=%d,", req->service );
835     fprintf( stderr, " s_event=%d,", req->s_event );
836     fprintf( stderr, " c_event=%d", req->c_event );
837 }
838
839 static void dump_get_socket_event_reply( const struct get_socket_event_request *req )
840 {
841     fprintf( stderr, " mask=%08x,", req->mask );
842     fprintf( stderr, " pmask=%08x,", req->pmask );
843     fprintf( stderr, " state=%08x,", req->state );
844     fprintf( stderr, " errors=" );
845     cur_pos += dump_varargs_ints( req );
846 }
847
848 static void dump_enable_socket_event_request( const struct enable_socket_event_request *req )
849 {
850     fprintf( stderr, " handle=%d,", req->handle );
851     fprintf( stderr, " mask=%08x,", req->mask );
852     fprintf( stderr, " sstate=%08x,", req->sstate );
853     fprintf( stderr, " cstate=%08x", req->cstate );
854 }
855
856 static void dump_alloc_console_request( const struct alloc_console_request *req )
857 {
858     fprintf( stderr, " access=%08x,", req->access );
859     fprintf( stderr, " inherit=%d", req->inherit );
860 }
861
862 static void dump_alloc_console_reply( const struct alloc_console_request *req )
863 {
864     fprintf( stderr, " handle_in=%d,", req->handle_in );
865     fprintf( stderr, " handle_out=%d", req->handle_out );
866 }
867
868 static void dump_free_console_request( const struct free_console_request *req )
869 {
870 }
871
872 static void dump_open_console_request( const struct open_console_request *req )
873 {
874     fprintf( stderr, " output=%d,", req->output );
875     fprintf( stderr, " access=%08x,", req->access );
876     fprintf( stderr, " inherit=%d", req->inherit );
877 }
878
879 static void dump_open_console_reply( const struct open_console_request *req )
880 {
881     fprintf( stderr, " handle=%d", req->handle );
882 }
883
884 static void dump_set_console_fd_request( const struct set_console_fd_request *req )
885 {
886     fprintf( stderr, " handle=%d,", req->handle );
887     fprintf( stderr, " fd_in=%d,", req->fd_in );
888     fprintf( stderr, " fd_out=%d,", req->fd_out );
889     fprintf( stderr, " pid=%d", req->pid );
890 }
891
892 static void dump_get_console_mode_request( const struct get_console_mode_request *req )
893 {
894     fprintf( stderr, " handle=%d", req->handle );
895 }
896
897 static void dump_get_console_mode_reply( const struct get_console_mode_request *req )
898 {
899     fprintf( stderr, " mode=%d", req->mode );
900 }
901
902 static void dump_set_console_mode_request( const struct set_console_mode_request *req )
903 {
904     fprintf( stderr, " handle=%d,", req->handle );
905     fprintf( stderr, " mode=%d", req->mode );
906 }
907
908 static void dump_set_console_info_request( const struct set_console_info_request *req )
909 {
910     fprintf( stderr, " handle=%d,", req->handle );
911     fprintf( stderr, " mask=%d,", req->mask );
912     fprintf( stderr, " cursor_size=%d,", req->cursor_size );
913     fprintf( stderr, " cursor_visible=%d,", req->cursor_visible );
914     fprintf( stderr, " title=" );
915     cur_pos += dump_varargs_string( req );
916 }
917
918 static void dump_get_console_info_request( const struct get_console_info_request *req )
919 {
920     fprintf( stderr, " handle=%d", req->handle );
921 }
922
923 static void dump_get_console_info_reply( const struct get_console_info_request *req )
924 {
925     fprintf( stderr, " cursor_size=%d,", req->cursor_size );
926     fprintf( stderr, " cursor_visible=%d,", req->cursor_visible );
927     fprintf( stderr, " pid=%d,", req->pid );
928     fprintf( stderr, " title=" );
929     cur_pos += dump_varargs_string( req );
930 }
931
932 static void dump_write_console_input_request( const struct write_console_input_request *req )
933 {
934     fprintf( stderr, " handle=%d,", req->handle );
935     fprintf( stderr, " rec=" );
936     cur_pos += dump_varargs_input_records( req );
937 }
938
939 static void dump_write_console_input_reply( const struct write_console_input_request *req )
940 {
941     fprintf( stderr, " written=%d", req->written );
942 }
943
944 static void dump_read_console_input_request( const struct read_console_input_request *req )
945 {
946     fprintf( stderr, " handle=%d,", req->handle );
947     fprintf( stderr, " flush=%d", req->flush );
948 }
949
950 static void dump_read_console_input_reply( const struct read_console_input_request *req )
951 {
952     fprintf( stderr, " read=%d,", req->read );
953     fprintf( stderr, " rec=" );
954     cur_pos += dump_varargs_input_records( req );
955 }
956
957 static void dump_create_change_notification_request( const struct create_change_notification_request *req )
958 {
959     fprintf( stderr, " subtree=%d,", req->subtree );
960     fprintf( stderr, " filter=%d", req->filter );
961 }
962
963 static void dump_create_change_notification_reply( const struct create_change_notification_request *req )
964 {
965     fprintf( stderr, " handle=%d", req->handle );
966 }
967
968 static void dump_create_mapping_request( const struct create_mapping_request *req )
969 {
970     fprintf( stderr, " size_high=%d,", req->size_high );
971     fprintf( stderr, " size_low=%d,", req->size_low );
972     fprintf( stderr, " protect=%d,", req->protect );
973     fprintf( stderr, " inherit=%d,", req->inherit );
974     fprintf( stderr, " file_handle=%d,", req->file_handle );
975     fprintf( stderr, " name=" );
976     cur_pos += dump_varargs_unicode_str( req );
977 }
978
979 static void dump_create_mapping_reply( const struct create_mapping_request *req )
980 {
981     fprintf( stderr, " handle=%d", req->handle );
982 }
983
984 static void dump_open_mapping_request( const struct open_mapping_request *req )
985 {
986     fprintf( stderr, " access=%08x,", req->access );
987     fprintf( stderr, " inherit=%d,", req->inherit );
988     fprintf( stderr, " name=" );
989     cur_pos += dump_varargs_unicode_str( req );
990 }
991
992 static void dump_open_mapping_reply( const struct open_mapping_request *req )
993 {
994     fprintf( stderr, " handle=%d", req->handle );
995 }
996
997 static void dump_get_mapping_info_request( const struct get_mapping_info_request *req )
998 {
999     fprintf( stderr, " handle=%d", req->handle );
1000 }
1001
1002 static void dump_get_mapping_info_reply( const struct get_mapping_info_request *req )
1003 {
1004     fprintf( stderr, " size_high=%d,", req->size_high );
1005     fprintf( stderr, " size_low=%d,", req->size_low );
1006     fprintf( stderr, " protect=%d,", req->protect );
1007     fprintf( stderr, " header_size=%d,", req->header_size );
1008     fprintf( stderr, " base=%p,", req->base );
1009     fprintf( stderr, " shared_file=%d,", req->shared_file );
1010     fprintf( stderr, " shared_size=%d", req->shared_size );
1011 }
1012
1013 static void dump_create_device_request( const struct create_device_request *req )
1014 {
1015     fprintf( stderr, " access=%08x,", req->access );
1016     fprintf( stderr, " inherit=%d,", req->inherit );
1017     fprintf( stderr, " id=%d", req->id );
1018 }
1019
1020 static void dump_create_device_reply( const struct create_device_request *req )
1021 {
1022     fprintf( stderr, " handle=%d", req->handle );
1023 }
1024
1025 static void dump_create_snapshot_request( const struct create_snapshot_request *req )
1026 {
1027     fprintf( stderr, " inherit=%d,", req->inherit );
1028     fprintf( stderr, " flags=%d,", req->flags );
1029     fprintf( stderr, " pid=%p", req->pid );
1030 }
1031
1032 static void dump_create_snapshot_reply( const struct create_snapshot_request *req )
1033 {
1034     fprintf( stderr, " handle=%d", req->handle );
1035 }
1036
1037 static void dump_next_process_request( const struct next_process_request *req )
1038 {
1039     fprintf( stderr, " handle=%d,", req->handle );
1040     fprintf( stderr, " reset=%d", req->reset );
1041 }
1042
1043 static void dump_next_process_reply( const struct next_process_request *req )
1044 {
1045     fprintf( stderr, " count=%d,", req->count );
1046     fprintf( stderr, " pid=%p,", req->pid );
1047     fprintf( stderr, " threads=%d,", req->threads );
1048     fprintf( stderr, " priority=%d", req->priority );
1049 }
1050
1051 static void dump_next_thread_request( const struct next_thread_request *req )
1052 {
1053     fprintf( stderr, " handle=%d,", req->handle );
1054     fprintf( stderr, " reset=%d", req->reset );
1055 }
1056
1057 static void dump_next_thread_reply( const struct next_thread_request *req )
1058 {
1059     fprintf( stderr, " count=%d,", req->count );
1060     fprintf( stderr, " pid=%p,", req->pid );
1061     fprintf( stderr, " tid=%p,", req->tid );
1062     fprintf( stderr, " base_pri=%d,", req->base_pri );
1063     fprintf( stderr, " delta_pri=%d", req->delta_pri );
1064 }
1065
1066 static void dump_next_module_request( const struct next_module_request *req )
1067 {
1068     fprintf( stderr, " handle=%d,", req->handle );
1069     fprintf( stderr, " reset=%d", req->reset );
1070 }
1071
1072 static void dump_next_module_reply( const struct next_module_request *req )
1073 {
1074     fprintf( stderr, " pid=%p,", req->pid );
1075     fprintf( stderr, " base=%p", req->base );
1076 }
1077
1078 static void dump_wait_debug_event_request( const struct wait_debug_event_request *req )
1079 {
1080     fprintf( stderr, " get_handle=%d", req->get_handle );
1081 }
1082
1083 static void dump_wait_debug_event_reply( const struct wait_debug_event_request *req )
1084 {
1085     fprintf( stderr, " pid=%p,", req->pid );
1086     fprintf( stderr, " tid=%p,", req->tid );
1087     fprintf( stderr, " wait=%d,", req->wait );
1088     fprintf( stderr, " event=" );
1089     cur_pos += dump_varargs_debug_event( req );
1090 }
1091
1092 static void dump_queue_exception_event_request( const struct queue_exception_event_request *req )
1093 {
1094     fprintf( stderr, " first=%d,", req->first );
1095     fprintf( stderr, " record=" );
1096     cur_pos += dump_varargs_exc_event( req );
1097 }
1098
1099 static void dump_queue_exception_event_reply( const struct queue_exception_event_request *req )
1100 {
1101     fprintf( stderr, " handle=%d", req->handle );
1102 }
1103
1104 static void dump_get_exception_status_request( const struct get_exception_status_request *req )
1105 {
1106 }
1107
1108 static void dump_get_exception_status_reply( const struct get_exception_status_request *req )
1109 {
1110     fprintf( stderr, " handle=%d,", req->handle );
1111     fprintf( stderr, " status=%d,", req->status );
1112     fprintf( stderr, " context=" );
1113     cur_pos += dump_varargs_context( req );
1114 }
1115
1116 static void dump_output_debug_string_request( const struct output_debug_string_request *req )
1117 {
1118     fprintf( stderr, " string=%p,", req->string );
1119     fprintf( stderr, " unicode=%d,", req->unicode );
1120     fprintf( stderr, " length=%d", req->length );
1121 }
1122
1123 static void dump_continue_debug_event_request( const struct continue_debug_event_request *req )
1124 {
1125     fprintf( stderr, " pid=%p,", req->pid );
1126     fprintf( stderr, " tid=%p,", req->tid );
1127     fprintf( stderr, " status=%d", req->status );
1128 }
1129
1130 static void dump_debug_process_request( const struct debug_process_request *req )
1131 {
1132     fprintf( stderr, " pid=%p", req->pid );
1133 }
1134
1135 static void dump_read_process_memory_request( const struct read_process_memory_request *req )
1136 {
1137     fprintf( stderr, " handle=%d,", req->handle );
1138     fprintf( stderr, " addr=%p,", req->addr );
1139     fprintf( stderr, " len=%d", req->len );
1140 }
1141
1142 static void dump_read_process_memory_reply( const struct read_process_memory_request *req )
1143 {
1144     fprintf( stderr, " data=" );
1145     cur_pos += dump_varargs_bytes( req );
1146 }
1147
1148 static void dump_write_process_memory_request( const struct write_process_memory_request *req )
1149 {
1150     fprintf( stderr, " handle=%d,", req->handle );
1151     fprintf( stderr, " addr=%p,", req->addr );
1152     fprintf( stderr, " len=%d,", req->len );
1153     fprintf( stderr, " first_mask=%08x,", req->first_mask );
1154     fprintf( stderr, " last_mask=%08x,", req->last_mask );
1155     fprintf( stderr, " data=" );
1156     cur_pos += dump_varargs_bytes( req );
1157 }
1158
1159 static void dump_create_key_request( const struct create_key_request *req )
1160 {
1161     fprintf( stderr, " parent=%d,", req->parent );
1162     fprintf( stderr, " access=%08x,", req->access );
1163     fprintf( stderr, " options=%08x,", req->options );
1164     fprintf( stderr, " modif=%ld,", req->modif );
1165     fprintf( stderr, " name=" );
1166     cur_pos += dump_varargs_unicode_len_str( req );
1167     fputc( ',', stderr );
1168     fprintf( stderr, " class=" );
1169     cur_pos += dump_varargs_unicode_str( req );
1170 }
1171
1172 static void dump_create_key_reply( const struct create_key_request *req )
1173 {
1174     fprintf( stderr, " hkey=%d,", req->hkey );
1175     fprintf( stderr, " created=%d", req->created );
1176 }
1177
1178 static void dump_open_key_request( const struct open_key_request *req )
1179 {
1180     fprintf( stderr, " parent=%d,", req->parent );
1181     fprintf( stderr, " access=%08x,", req->access );
1182     fprintf( stderr, " name=" );
1183     cur_pos += dump_varargs_unicode_str( req );
1184 }
1185
1186 static void dump_open_key_reply( const struct open_key_request *req )
1187 {
1188     fprintf( stderr, " hkey=%d", req->hkey );
1189 }
1190
1191 static void dump_delete_key_request( const struct delete_key_request *req )
1192 {
1193     fprintf( stderr, " hkey=%d", req->hkey );
1194 }
1195
1196 static void dump_enum_key_request( const struct enum_key_request *req )
1197 {
1198     fprintf( stderr, " hkey=%d,", req->hkey );
1199     fprintf( stderr, " index=%d,", req->index );
1200     fprintf( stderr, " full=%d", req->full );
1201 }
1202
1203 static void dump_enum_key_reply( const struct enum_key_request *req )
1204 {
1205     fprintf( stderr, " subkeys=%d,", req->subkeys );
1206     fprintf( stderr, " max_subkey=%d,", req->max_subkey );
1207     fprintf( stderr, " max_class=%d,", req->max_class );
1208     fprintf( stderr, " values=%d,", req->values );
1209     fprintf( stderr, " max_value=%d,", req->max_value );
1210     fprintf( stderr, " max_data=%d,", req->max_data );
1211     fprintf( stderr, " modif=%ld,", req->modif );
1212     fprintf( stderr, " name=" );
1213     cur_pos += dump_varargs_unicode_len_str( req );
1214     fputc( ',', stderr );
1215     fprintf( stderr, " class=" );
1216     cur_pos += dump_varargs_unicode_str( req );
1217 }
1218
1219 static void dump_set_key_value_request( const struct set_key_value_request *req )
1220 {
1221     fprintf( stderr, " hkey=%d,", req->hkey );
1222     fprintf( stderr, " type=%d,", req->type );
1223     fprintf( stderr, " total=%08x,", req->total );
1224     fprintf( stderr, " offset=%08x,", req->offset );
1225     fprintf( stderr, " name=" );
1226     cur_pos += dump_varargs_unicode_len_str( req );
1227     fputc( ',', stderr );
1228     fprintf( stderr, " data=" );
1229     cur_pos += dump_varargs_bytes( req );
1230 }
1231
1232 static void dump_get_key_value_request( const struct get_key_value_request *req )
1233 {
1234     fprintf( stderr, " hkey=%d,", req->hkey );
1235     fprintf( stderr, " offset=%08x,", req->offset );
1236     fprintf( stderr, " name=" );
1237     cur_pos += dump_varargs_unicode_len_str( req );
1238 }
1239
1240 static void dump_get_key_value_reply( const struct get_key_value_request *req )
1241 {
1242     fprintf( stderr, " type=%d,", req->type );
1243     fprintf( stderr, " len=%d,", req->len );
1244     fprintf( stderr, " data=" );
1245     cur_pos += dump_varargs_bytes( req );
1246 }
1247
1248 static void dump_enum_key_value_request( const struct enum_key_value_request *req )
1249 {
1250     fprintf( stderr, " hkey=%d,", req->hkey );
1251     fprintf( stderr, " index=%d,", req->index );
1252     fprintf( stderr, " offset=%08x", req->offset );
1253 }
1254
1255 static void dump_enum_key_value_reply( const struct enum_key_value_request *req )
1256 {
1257     fprintf( stderr, " type=%d,", req->type );
1258     fprintf( stderr, " len=%d,", req->len );
1259     fprintf( stderr, " name=" );
1260     cur_pos += dump_varargs_unicode_len_str( req );
1261     fputc( ',', stderr );
1262     fprintf( stderr, " data=" );
1263     cur_pos += dump_varargs_bytes( req );
1264 }
1265
1266 static void dump_delete_key_value_request( const struct delete_key_value_request *req )
1267 {
1268     fprintf( stderr, " hkey=%d,", req->hkey );
1269     fprintf( stderr, " name=" );
1270     cur_pos += dump_varargs_unicode_str( req );
1271 }
1272
1273 static void dump_load_registry_request( const struct load_registry_request *req )
1274 {
1275     fprintf( stderr, " hkey=%d,", req->hkey );
1276     fprintf( stderr, " file=%d,", req->file );
1277     fprintf( stderr, " name=" );
1278     cur_pos += dump_varargs_unicode_str( req );
1279 }
1280
1281 static void dump_save_registry_request( const struct save_registry_request *req )
1282 {
1283     fprintf( stderr, " hkey=%d,", req->hkey );
1284     fprintf( stderr, " file=%d", req->file );
1285 }
1286
1287 static void dump_save_registry_atexit_request( const struct save_registry_atexit_request *req )
1288 {
1289     fprintf( stderr, " hkey=%d,", req->hkey );
1290     fprintf( stderr, " file=" );
1291     cur_pos += dump_varargs_string( req );
1292 }
1293
1294 static void dump_set_registry_levels_request( const struct set_registry_levels_request *req )
1295 {
1296     fprintf( stderr, " current=%d,", req->current );
1297     fprintf( stderr, " saving=%d,", req->saving );
1298     fprintf( stderr, " period=%d", req->period );
1299 }
1300
1301 static void dump_create_timer_request( const struct create_timer_request *req )
1302 {
1303     fprintf( stderr, " inherit=%d,", req->inherit );
1304     fprintf( stderr, " manual=%d,", req->manual );
1305     fprintf( stderr, " name=" );
1306     cur_pos += dump_varargs_unicode_str( req );
1307 }
1308
1309 static void dump_create_timer_reply( const struct create_timer_request *req )
1310 {
1311     fprintf( stderr, " handle=%d", req->handle );
1312 }
1313
1314 static void dump_open_timer_request( const struct open_timer_request *req )
1315 {
1316     fprintf( stderr, " access=%08x,", req->access );
1317     fprintf( stderr, " inherit=%d,", req->inherit );
1318     fprintf( stderr, " name=" );
1319     cur_pos += dump_varargs_unicode_str( req );
1320 }
1321
1322 static void dump_open_timer_reply( const struct open_timer_request *req )
1323 {
1324     fprintf( stderr, " handle=%d", req->handle );
1325 }
1326
1327 static void dump_set_timer_request( const struct set_timer_request *req )
1328 {
1329     fprintf( stderr, " handle=%d,", req->handle );
1330     fprintf( stderr, " sec=%d,", req->sec );
1331     fprintf( stderr, " usec=%d,", req->usec );
1332     fprintf( stderr, " period=%d,", req->period );
1333     fprintf( stderr, " callback=%p,", req->callback );
1334     fprintf( stderr, " arg=%p", req->arg );
1335 }
1336
1337 static void dump_cancel_timer_request( const struct cancel_timer_request *req )
1338 {
1339     fprintf( stderr, " handle=%d", req->handle );
1340 }
1341
1342 static void dump_get_thread_context_request( const struct get_thread_context_request *req )
1343 {
1344     fprintf( stderr, " handle=%d,", req->handle );
1345     fprintf( stderr, " flags=%08x", req->flags );
1346 }
1347
1348 static void dump_get_thread_context_reply( const struct get_thread_context_request *req )
1349 {
1350     fprintf( stderr, " context=" );
1351     cur_pos += dump_varargs_context( req );
1352 }
1353
1354 static void dump_set_thread_context_request( const struct set_thread_context_request *req )
1355 {
1356     fprintf( stderr, " handle=%d,", req->handle );
1357     fprintf( stderr, " flags=%08x,", req->flags );
1358     fprintf( stderr, " context=" );
1359     cur_pos += dump_varargs_context( req );
1360 }
1361
1362 static void dump_get_selector_entry_request( const struct get_selector_entry_request *req )
1363 {
1364     fprintf( stderr, " handle=%d,", req->handle );
1365     fprintf( stderr, " entry=%d", req->entry );
1366 }
1367
1368 static void dump_get_selector_entry_reply( const struct get_selector_entry_request *req )
1369 {
1370     fprintf( stderr, " base=%08x,", req->base );
1371     fprintf( stderr, " limit=%08x,", req->limit );
1372     fprintf( stderr, " flags=%02x", req->flags );
1373 }
1374
1375 static void dump_add_atom_request( const struct add_atom_request *req )
1376 {
1377     fprintf( stderr, " local=%d,", req->local );
1378     fprintf( stderr, " name=" );
1379     cur_pos += dump_varargs_unicode_str( req );
1380 }
1381
1382 static void dump_add_atom_reply( const struct add_atom_request *req )
1383 {
1384     fprintf( stderr, " atom=%d", req->atom );
1385 }
1386
1387 static void dump_delete_atom_request( const struct delete_atom_request *req )
1388 {
1389     fprintf( stderr, " atom=%d,", req->atom );
1390     fprintf( stderr, " local=%d", req->local );
1391 }
1392
1393 static void dump_find_atom_request( const struct find_atom_request *req )
1394 {
1395     fprintf( stderr, " local=%d,", req->local );
1396     fprintf( stderr, " name=" );
1397     cur_pos += dump_varargs_unicode_str( req );
1398 }
1399
1400 static void dump_find_atom_reply( const struct find_atom_request *req )
1401 {
1402     fprintf( stderr, " atom=%d", req->atom );
1403 }
1404
1405 static void dump_get_atom_name_request( const struct get_atom_name_request *req )
1406 {
1407     fprintf( stderr, " atom=%d,", req->atom );
1408     fprintf( stderr, " local=%d", req->local );
1409 }
1410
1411 static void dump_get_atom_name_reply( const struct get_atom_name_request *req )
1412 {
1413     fprintf( stderr, " count=%d,", req->count );
1414     fprintf( stderr, " name=" );
1415     cur_pos += dump_varargs_unicode_str( req );
1416 }
1417
1418 static void dump_init_atom_table_request( const struct init_atom_table_request *req )
1419 {
1420     fprintf( stderr, " entries=%d", req->entries );
1421 }
1422
1423 static void dump_get_msg_queue_request( const struct get_msg_queue_request *req )
1424 {
1425 }
1426
1427 static void dump_get_msg_queue_reply( const struct get_msg_queue_request *req )
1428 {
1429     fprintf( stderr, " handle=%d", req->handle );
1430 }
1431
1432 static void dump_inc_queue_paint_count_request( const struct inc_queue_paint_count_request *req )
1433 {
1434     fprintf( stderr, " id=%p,", req->id );
1435     fprintf( stderr, " incr=%d", req->incr );
1436 }
1437
1438 static void dump_set_queue_mask_request( const struct set_queue_mask_request *req )
1439 {
1440     fprintf( stderr, " wake_mask=%08x,", req->wake_mask );
1441     fprintf( stderr, " changed_mask=%08x,", req->changed_mask );
1442     fprintf( stderr, " skip_wait=%d", req->skip_wait );
1443 }
1444
1445 static void dump_set_queue_mask_reply( const struct set_queue_mask_request *req )
1446 {
1447     fprintf( stderr, " wake_bits=%08x,", req->wake_bits );
1448     fprintf( stderr, " changed_bits=%08x", req->changed_bits );
1449 }
1450
1451 static void dump_get_queue_status_request( const struct get_queue_status_request *req )
1452 {
1453     fprintf( stderr, " clear=%d", req->clear );
1454 }
1455
1456 static void dump_get_queue_status_reply( const struct get_queue_status_request *req )
1457 {
1458     fprintf( stderr, " wake_bits=%08x,", req->wake_bits );
1459     fprintf( stderr, " changed_bits=%08x", req->changed_bits );
1460 }
1461
1462 static void dump_wait_input_idle_request( const struct wait_input_idle_request *req )
1463 {
1464     fprintf( stderr, " handle=%d,", req->handle );
1465     fprintf( stderr, " timeout=%d", req->timeout );
1466 }
1467
1468 static void dump_wait_input_idle_reply( const struct wait_input_idle_request *req )
1469 {
1470     fprintf( stderr, " event=%d", req->event );
1471 }
1472
1473 static void dump_send_message_request( const struct send_message_request *req )
1474 {
1475     fprintf( stderr, " id=%p,", req->id );
1476     fprintf( stderr, " type=%d,", req->type );
1477     fprintf( stderr, " win=%08x,", req->win );
1478     fprintf( stderr, " msg=%08x,", req->msg );
1479     fprintf( stderr, " wparam=%08x,", req->wparam );
1480     fprintf( stderr, " lparam=%08x,", req->lparam );
1481     fprintf( stderr, " x=%d,", req->x );
1482     fprintf( stderr, " y=%d,", req->y );
1483     fprintf( stderr, " time=%08x,", req->time );
1484     fprintf( stderr, " info=%08x,", req->info );
1485     fprintf( stderr, " timeout=%d,", req->timeout );
1486     fprintf( stderr, " data=" );
1487     cur_pos += dump_varargs_bytes( req );
1488 }
1489
1490 static void dump_get_message_request( const struct get_message_request *req )
1491 {
1492     fprintf( stderr, " flags=%d,", req->flags );
1493     fprintf( stderr, " get_win=%08x,", req->get_win );
1494     fprintf( stderr, " get_first=%08x,", req->get_first );
1495     fprintf( stderr, " get_last=%08x", req->get_last );
1496 }
1497
1498 static void dump_get_message_reply( const struct get_message_request *req )
1499 {
1500     fprintf( stderr, " type=%d,", req->type );
1501     fprintf( stderr, " win=%08x,", req->win );
1502     fprintf( stderr, " msg=%08x,", req->msg );
1503     fprintf( stderr, " wparam=%08x,", req->wparam );
1504     fprintf( stderr, " lparam=%08x,", req->lparam );
1505     fprintf( stderr, " x=%d,", req->x );
1506     fprintf( stderr, " y=%d,", req->y );
1507     fprintf( stderr, " time=%08x,", req->time );
1508     fprintf( stderr, " info=%08x,", req->info );
1509     fprintf( stderr, " data=" );
1510     cur_pos += dump_varargs_bytes( req );
1511 }
1512
1513 static void dump_reply_message_request( const struct reply_message_request *req )
1514 {
1515     fprintf( stderr, " result=%08x,", req->result );
1516     fprintf( stderr, " remove=%d,", req->remove );
1517     fprintf( stderr, " data=" );
1518     cur_pos += dump_varargs_bytes( req );
1519 }
1520
1521 static void dump_get_message_reply_request( const struct get_message_reply_request *req )
1522 {
1523     fprintf( stderr, " cancel=%d", req->cancel );
1524 }
1525
1526 static void dump_get_message_reply_reply( const struct get_message_reply_request *req )
1527 {
1528     fprintf( stderr, " result=%08x,", req->result );
1529     fprintf( stderr, " data=" );
1530     cur_pos += dump_varargs_bytes( req );
1531 }
1532
1533 static void dump_cleanup_window_queue_request( const struct cleanup_window_queue_request *req )
1534 {
1535     fprintf( stderr, " win=%08x", req->win );
1536 }
1537
1538 static void dump_set_win_timer_request( const struct set_win_timer_request *req )
1539 {
1540     fprintf( stderr, " win=%08x,", req->win );
1541     fprintf( stderr, " msg=%08x,", req->msg );
1542     fprintf( stderr, " id=%08x,", req->id );
1543     fprintf( stderr, " rate=%08x,", req->rate );
1544     fprintf( stderr, " lparam=%08x", req->lparam );
1545 }
1546
1547 static void dump_kill_win_timer_request( const struct kill_win_timer_request *req )
1548 {
1549     fprintf( stderr, " win=%08x,", req->win );
1550     fprintf( stderr, " msg=%08x,", req->msg );
1551     fprintf( stderr, " id=%08x", req->id );
1552 }
1553
1554 static void dump_create_serial_request( const struct create_serial_request *req )
1555 {
1556     fprintf( stderr, " access=%08x,", req->access );
1557     fprintf( stderr, " inherit=%d,", req->inherit );
1558     fprintf( stderr, " sharing=%08x,", req->sharing );
1559     fprintf( stderr, " name=" );
1560     cur_pos += dump_varargs_string( req );
1561 }
1562
1563 static void dump_create_serial_reply( const struct create_serial_request *req )
1564 {
1565     fprintf( stderr, " handle=%d", req->handle );
1566 }
1567
1568 static void dump_get_serial_info_request( const struct get_serial_info_request *req )
1569 {
1570     fprintf( stderr, " handle=%d", req->handle );
1571 }
1572
1573 static void dump_get_serial_info_reply( const struct get_serial_info_request *req )
1574 {
1575     fprintf( stderr, " readinterval=%08x,", req->readinterval );
1576     fprintf( stderr, " readconst=%08x,", req->readconst );
1577     fprintf( stderr, " readmult=%08x,", req->readmult );
1578     fprintf( stderr, " writeconst=%08x,", req->writeconst );
1579     fprintf( stderr, " writemult=%08x,", req->writemult );
1580     fprintf( stderr, " eventmask=%08x,", req->eventmask );
1581     fprintf( stderr, " commerror=%08x", req->commerror );
1582 }
1583
1584 static void dump_set_serial_info_request( const struct set_serial_info_request *req )
1585 {
1586     fprintf( stderr, " handle=%d,", req->handle );
1587     fprintf( stderr, " flags=%d,", req->flags );
1588     fprintf( stderr, " readinterval=%08x,", req->readinterval );
1589     fprintf( stderr, " readconst=%08x,", req->readconst );
1590     fprintf( stderr, " readmult=%08x,", req->readmult );
1591     fprintf( stderr, " writeconst=%08x,", req->writeconst );
1592     fprintf( stderr, " writemult=%08x,", req->writemult );
1593     fprintf( stderr, " eventmask=%08x,", req->eventmask );
1594     fprintf( stderr, " commerror=%08x", req->commerror );
1595 }
1596
1597 static void dump_create_async_request( const struct create_async_request *req )
1598 {
1599     fprintf( stderr, " file_handle=%d,", req->file_handle );
1600     fprintf( stderr, " count=%d,", req->count );
1601     fprintf( stderr, " type=%d", req->type );
1602 }
1603
1604 static void dump_create_async_reply( const struct create_async_request *req )
1605 {
1606     fprintf( stderr, " timeout=%d", req->timeout );
1607 }
1608
1609 static void dump_create_named_pipe_request( const struct create_named_pipe_request *req )
1610 {
1611     fprintf( stderr, " openmode=%08x,", req->openmode );
1612     fprintf( stderr, " pipemode=%08x,", req->pipemode );
1613     fprintf( stderr, " maxinstances=%08x,", req->maxinstances );
1614     fprintf( stderr, " outsize=%08x,", req->outsize );
1615     fprintf( stderr, " insize=%08x,", req->insize );
1616     fprintf( stderr, " timeout=%08x,", req->timeout );
1617     fprintf( stderr, " filename=" );
1618     cur_pos += dump_varargs_string( req );
1619 }
1620
1621 static void dump_create_named_pipe_reply( const struct create_named_pipe_request *req )
1622 {
1623     fprintf( stderr, " handle=%d", req->handle );
1624 }
1625
1626 static void dump_open_named_pipe_request( const struct open_named_pipe_request *req )
1627 {
1628     fprintf( stderr, " access=%08x,", req->access );
1629     fprintf( stderr, " filename=" );
1630     cur_pos += dump_varargs_string( req );
1631 }
1632
1633 static void dump_open_named_pipe_reply( const struct open_named_pipe_request *req )
1634 {
1635     fprintf( stderr, " handle=%d", req->handle );
1636 }
1637
1638 static void dump_connect_named_pipe_request( const struct connect_named_pipe_request *req )
1639 {
1640     fprintf( stderr, " handle=%d,", req->handle );
1641     fprintf( stderr, " event=%d", req->event );
1642 }
1643
1644 static void dump_wait_named_pipe_request( const struct wait_named_pipe_request *req )
1645 {
1646     fprintf( stderr, " timeout=%08x,", req->timeout );
1647     fprintf( stderr, " event=%d,", req->event );
1648     fprintf( stderr, " filename=" );
1649     cur_pos += dump_varargs_string( req );
1650 }
1651
1652 static void dump_disconnect_named_pipe_request( const struct disconnect_named_pipe_request *req )
1653 {
1654     fprintf( stderr, " handle=%d", req->handle );
1655 }
1656
1657 static void dump_get_named_pipe_info_request( const struct get_named_pipe_info_request *req )
1658 {
1659     fprintf( stderr, " handle=%d", req->handle );
1660 }
1661
1662 static void dump_get_named_pipe_info_reply( const struct get_named_pipe_info_request *req )
1663 {
1664     fprintf( stderr, " flags=%08x,", req->flags );
1665     fprintf( stderr, " maxinstances=%08x,", req->maxinstances );
1666     fprintf( stderr, " outsize=%08x,", req->outsize );
1667     fprintf( stderr, " insize=%08x", req->insize );
1668 }
1669
1670 static void dump_create_window_request( const struct create_window_request *req )
1671 {
1672     fprintf( stderr, " parent=%08x,", req->parent );
1673     fprintf( stderr, " owner=%08x", req->owner );
1674 }
1675
1676 static void dump_create_window_reply( const struct create_window_request *req )
1677 {
1678     fprintf( stderr, " handle=%08x", req->handle );
1679 }
1680
1681 static void dump_link_window_request( const struct link_window_request *req )
1682 {
1683     fprintf( stderr, " handle=%08x,", req->handle );
1684     fprintf( stderr, " parent=%08x,", req->parent );
1685     fprintf( stderr, " previous=%08x", req->previous );
1686 }
1687
1688 static void dump_destroy_window_request( const struct destroy_window_request *req )
1689 {
1690     fprintf( stderr, " handle=%08x", req->handle );
1691 }
1692
1693 static void dump_get_window_info_request( const struct get_window_info_request *req )
1694 {
1695     fprintf( stderr, " handle=%08x", req->handle );
1696 }
1697
1698 static void dump_get_window_info_reply( const struct get_window_info_request *req )
1699 {
1700     fprintf( stderr, " full_handle=%08x,", req->full_handle );
1701     fprintf( stderr, " pid=%p,", req->pid );
1702     fprintf( stderr, " tid=%p", req->tid );
1703 }
1704
1705 static void dump_get_window_parents_request( const struct get_window_parents_request *req )
1706 {
1707     fprintf( stderr, " handle=%08x", req->handle );
1708 }
1709
1710 static void dump_get_window_parents_reply( const struct get_window_parents_request *req )
1711 {
1712     fprintf( stderr, " count=%d,", req->count );
1713     fprintf( stderr, " parents=" );
1714     cur_pos += dump_varargs_user_handles( req );
1715 }
1716
1717 static void dump_get_window_children_request( const struct get_window_children_request *req )
1718 {
1719     fprintf( stderr, " parent=%08x", req->parent );
1720 }
1721
1722 static void dump_get_window_children_reply( const struct get_window_children_request *req )
1723 {
1724     fprintf( stderr, " count=%d,", req->count );
1725     fprintf( stderr, " parents=" );
1726     cur_pos += dump_varargs_user_handles( req );
1727 }
1728
1729 static void dump_get_window_tree_request( const struct get_window_tree_request *req )
1730 {
1731     fprintf( stderr, " handle=%08x", req->handle );
1732 }
1733
1734 static void dump_get_window_tree_reply( const struct get_window_tree_request *req )
1735 {
1736     fprintf( stderr, " parent=%08x,", req->parent );
1737     fprintf( stderr, " owner=%08x,", req->owner );
1738     fprintf( stderr, " next_sibling=%08x,", req->next_sibling );
1739     fprintf( stderr, " prev_sibling=%08x,", req->prev_sibling );
1740     fprintf( stderr, " first_sibling=%08x,", req->first_sibling );
1741     fprintf( stderr, " last_sibling=%08x,", req->last_sibling );
1742     fprintf( stderr, " first_child=%08x,", req->first_child );
1743     fprintf( stderr, " last_child=%08x", req->last_child );
1744 }
1745
1746 static const dump_func req_dumpers[REQ_NB_REQUESTS] = {
1747     (dump_func)dump_new_process_request,
1748     (dump_func)dump_get_new_process_info_request,
1749     (dump_func)dump_new_thread_request,
1750     (dump_func)dump_boot_done_request,
1751     (dump_func)dump_init_process_request,
1752     (dump_func)dump_init_process_done_request,
1753     (dump_func)dump_init_thread_request,
1754     (dump_func)dump_set_thread_buffer_request,
1755     (dump_func)dump_terminate_process_request,
1756     (dump_func)dump_terminate_thread_request,
1757     (dump_func)dump_get_process_info_request,
1758     (dump_func)dump_set_process_info_request,
1759     (dump_func)dump_get_thread_info_request,
1760     (dump_func)dump_set_thread_info_request,
1761     (dump_func)dump_suspend_thread_request,
1762     (dump_func)dump_resume_thread_request,
1763     (dump_func)dump_load_dll_request,
1764     (dump_func)dump_unload_dll_request,
1765     (dump_func)dump_queue_apc_request,
1766     (dump_func)dump_get_apc_request,
1767     (dump_func)dump_close_handle_request,
1768     (dump_func)dump_set_handle_info_request,
1769     (dump_func)dump_dup_handle_request,
1770     (dump_func)dump_open_process_request,
1771     (dump_func)dump_select_request,
1772     (dump_func)dump_create_event_request,
1773     (dump_func)dump_event_op_request,
1774     (dump_func)dump_open_event_request,
1775     (dump_func)dump_create_mutex_request,
1776     (dump_func)dump_release_mutex_request,
1777     (dump_func)dump_open_mutex_request,
1778     (dump_func)dump_create_semaphore_request,
1779     (dump_func)dump_release_semaphore_request,
1780     (dump_func)dump_open_semaphore_request,
1781     (dump_func)dump_create_file_request,
1782     (dump_func)dump_alloc_file_handle_request,
1783     (dump_func)dump_get_handle_fd_request,
1784     (dump_func)dump_set_file_pointer_request,
1785     (dump_func)dump_truncate_file_request,
1786     (dump_func)dump_set_file_time_request,
1787     (dump_func)dump_flush_file_request,
1788     (dump_func)dump_get_file_info_request,
1789     (dump_func)dump_lock_file_request,
1790     (dump_func)dump_unlock_file_request,
1791     (dump_func)dump_create_pipe_request,
1792     (dump_func)dump_create_socket_request,
1793     (dump_func)dump_accept_socket_request,
1794     (dump_func)dump_set_socket_event_request,
1795     (dump_func)dump_get_socket_event_request,
1796     (dump_func)dump_enable_socket_event_request,
1797     (dump_func)dump_alloc_console_request,
1798     (dump_func)dump_free_console_request,
1799     (dump_func)dump_open_console_request,
1800     (dump_func)dump_set_console_fd_request,
1801     (dump_func)dump_get_console_mode_request,
1802     (dump_func)dump_set_console_mode_request,
1803     (dump_func)dump_set_console_info_request,
1804     (dump_func)dump_get_console_info_request,
1805     (dump_func)dump_write_console_input_request,
1806     (dump_func)dump_read_console_input_request,
1807     (dump_func)dump_create_change_notification_request,
1808     (dump_func)dump_create_mapping_request,
1809     (dump_func)dump_open_mapping_request,
1810     (dump_func)dump_get_mapping_info_request,
1811     (dump_func)dump_create_device_request,
1812     (dump_func)dump_create_snapshot_request,
1813     (dump_func)dump_next_process_request,
1814     (dump_func)dump_next_thread_request,
1815     (dump_func)dump_next_module_request,
1816     (dump_func)dump_wait_debug_event_request,
1817     (dump_func)dump_queue_exception_event_request,
1818     (dump_func)dump_get_exception_status_request,
1819     (dump_func)dump_output_debug_string_request,
1820     (dump_func)dump_continue_debug_event_request,
1821     (dump_func)dump_debug_process_request,
1822     (dump_func)dump_read_process_memory_request,
1823     (dump_func)dump_write_process_memory_request,
1824     (dump_func)dump_create_key_request,
1825     (dump_func)dump_open_key_request,
1826     (dump_func)dump_delete_key_request,
1827     (dump_func)dump_enum_key_request,
1828     (dump_func)dump_set_key_value_request,
1829     (dump_func)dump_get_key_value_request,
1830     (dump_func)dump_enum_key_value_request,
1831     (dump_func)dump_delete_key_value_request,
1832     (dump_func)dump_load_registry_request,
1833     (dump_func)dump_save_registry_request,
1834     (dump_func)dump_save_registry_atexit_request,
1835     (dump_func)dump_set_registry_levels_request,
1836     (dump_func)dump_create_timer_request,
1837     (dump_func)dump_open_timer_request,
1838     (dump_func)dump_set_timer_request,
1839     (dump_func)dump_cancel_timer_request,
1840     (dump_func)dump_get_thread_context_request,
1841     (dump_func)dump_set_thread_context_request,
1842     (dump_func)dump_get_selector_entry_request,
1843     (dump_func)dump_add_atom_request,
1844     (dump_func)dump_delete_atom_request,
1845     (dump_func)dump_find_atom_request,
1846     (dump_func)dump_get_atom_name_request,
1847     (dump_func)dump_init_atom_table_request,
1848     (dump_func)dump_get_msg_queue_request,
1849     (dump_func)dump_inc_queue_paint_count_request,
1850     (dump_func)dump_set_queue_mask_request,
1851     (dump_func)dump_get_queue_status_request,
1852     (dump_func)dump_wait_input_idle_request,
1853     (dump_func)dump_send_message_request,
1854     (dump_func)dump_get_message_request,
1855     (dump_func)dump_reply_message_request,
1856     (dump_func)dump_get_message_reply_request,
1857     (dump_func)dump_cleanup_window_queue_request,
1858     (dump_func)dump_set_win_timer_request,
1859     (dump_func)dump_kill_win_timer_request,
1860     (dump_func)dump_create_serial_request,
1861     (dump_func)dump_get_serial_info_request,
1862     (dump_func)dump_set_serial_info_request,
1863     (dump_func)dump_create_async_request,
1864     (dump_func)dump_create_named_pipe_request,
1865     (dump_func)dump_open_named_pipe_request,
1866     (dump_func)dump_connect_named_pipe_request,
1867     (dump_func)dump_wait_named_pipe_request,
1868     (dump_func)dump_disconnect_named_pipe_request,
1869     (dump_func)dump_get_named_pipe_info_request,
1870     (dump_func)dump_create_window_request,
1871     (dump_func)dump_link_window_request,
1872     (dump_func)dump_destroy_window_request,
1873     (dump_func)dump_get_window_info_request,
1874     (dump_func)dump_get_window_parents_request,
1875     (dump_func)dump_get_window_children_request,
1876     (dump_func)dump_get_window_tree_request,
1877 };
1878
1879 static const dump_func reply_dumpers[REQ_NB_REQUESTS] = {
1880     (dump_func)dump_new_process_reply,
1881     (dump_func)dump_get_new_process_info_reply,
1882     (dump_func)dump_new_thread_reply,
1883     (dump_func)0,
1884     (dump_func)dump_init_process_reply,
1885     (dump_func)dump_init_process_done_reply,
1886     (dump_func)dump_init_thread_reply,
1887     (dump_func)dump_set_thread_buffer_reply,
1888     (dump_func)dump_terminate_process_reply,
1889     (dump_func)dump_terminate_thread_reply,
1890     (dump_func)dump_get_process_info_reply,
1891     (dump_func)0,
1892     (dump_func)dump_get_thread_info_reply,
1893     (dump_func)0,
1894     (dump_func)dump_suspend_thread_reply,
1895     (dump_func)dump_resume_thread_reply,
1896     (dump_func)0,
1897     (dump_func)0,
1898     (dump_func)0,
1899     (dump_func)dump_get_apc_reply,
1900     (dump_func)dump_close_handle_reply,
1901     (dump_func)dump_set_handle_info_reply,
1902     (dump_func)dump_dup_handle_reply,
1903     (dump_func)dump_open_process_reply,
1904     (dump_func)0,
1905     (dump_func)dump_create_event_reply,
1906     (dump_func)0,
1907     (dump_func)dump_open_event_reply,
1908     (dump_func)dump_create_mutex_reply,
1909     (dump_func)0,
1910     (dump_func)dump_open_mutex_reply,
1911     (dump_func)dump_create_semaphore_reply,
1912     (dump_func)dump_release_semaphore_reply,
1913     (dump_func)dump_open_semaphore_reply,
1914     (dump_func)dump_create_file_reply,
1915     (dump_func)dump_alloc_file_handle_reply,
1916     (dump_func)dump_get_handle_fd_reply,
1917     (dump_func)dump_set_file_pointer_reply,
1918     (dump_func)0,
1919     (dump_func)0,
1920     (dump_func)0,
1921     (dump_func)dump_get_file_info_reply,
1922     (dump_func)0,
1923     (dump_func)0,
1924     (dump_func)dump_create_pipe_reply,
1925     (dump_func)dump_create_socket_reply,
1926     (dump_func)dump_accept_socket_reply,
1927     (dump_func)0,
1928     (dump_func)dump_get_socket_event_reply,
1929     (dump_func)0,
1930     (dump_func)dump_alloc_console_reply,
1931     (dump_func)0,
1932     (dump_func)dump_open_console_reply,
1933     (dump_func)0,
1934     (dump_func)dump_get_console_mode_reply,
1935     (dump_func)0,
1936     (dump_func)0,
1937     (dump_func)dump_get_console_info_reply,
1938     (dump_func)dump_write_console_input_reply,
1939     (dump_func)dump_read_console_input_reply,
1940     (dump_func)dump_create_change_notification_reply,
1941     (dump_func)dump_create_mapping_reply,
1942     (dump_func)dump_open_mapping_reply,
1943     (dump_func)dump_get_mapping_info_reply,
1944     (dump_func)dump_create_device_reply,
1945     (dump_func)dump_create_snapshot_reply,
1946     (dump_func)dump_next_process_reply,
1947     (dump_func)dump_next_thread_reply,
1948     (dump_func)dump_next_module_reply,
1949     (dump_func)dump_wait_debug_event_reply,
1950     (dump_func)dump_queue_exception_event_reply,
1951     (dump_func)dump_get_exception_status_reply,
1952     (dump_func)0,
1953     (dump_func)0,
1954     (dump_func)0,
1955     (dump_func)dump_read_process_memory_reply,
1956     (dump_func)0,
1957     (dump_func)dump_create_key_reply,
1958     (dump_func)dump_open_key_reply,
1959     (dump_func)0,
1960     (dump_func)dump_enum_key_reply,
1961     (dump_func)0,
1962     (dump_func)dump_get_key_value_reply,
1963     (dump_func)dump_enum_key_value_reply,
1964     (dump_func)0,
1965     (dump_func)0,
1966     (dump_func)0,
1967     (dump_func)0,
1968     (dump_func)0,
1969     (dump_func)dump_create_timer_reply,
1970     (dump_func)dump_open_timer_reply,
1971     (dump_func)0,
1972     (dump_func)0,
1973     (dump_func)dump_get_thread_context_reply,
1974     (dump_func)0,
1975     (dump_func)dump_get_selector_entry_reply,
1976     (dump_func)dump_add_atom_reply,
1977     (dump_func)0,
1978     (dump_func)dump_find_atom_reply,
1979     (dump_func)dump_get_atom_name_reply,
1980     (dump_func)0,
1981     (dump_func)dump_get_msg_queue_reply,
1982     (dump_func)0,
1983     (dump_func)dump_set_queue_mask_reply,
1984     (dump_func)dump_get_queue_status_reply,
1985     (dump_func)dump_wait_input_idle_reply,
1986     (dump_func)0,
1987     (dump_func)dump_get_message_reply,
1988     (dump_func)0,
1989     (dump_func)dump_get_message_reply_reply,
1990     (dump_func)0,
1991     (dump_func)0,
1992     (dump_func)0,
1993     (dump_func)dump_create_serial_reply,
1994     (dump_func)dump_get_serial_info_reply,
1995     (dump_func)0,
1996     (dump_func)dump_create_async_reply,
1997     (dump_func)dump_create_named_pipe_reply,
1998     (dump_func)dump_open_named_pipe_reply,
1999     (dump_func)0,
2000     (dump_func)0,
2001     (dump_func)0,
2002     (dump_func)dump_get_named_pipe_info_reply,
2003     (dump_func)dump_create_window_reply,
2004     (dump_func)0,
2005     (dump_func)0,
2006     (dump_func)dump_get_window_info_reply,
2007     (dump_func)dump_get_window_parents_reply,
2008     (dump_func)dump_get_window_children_reply,
2009     (dump_func)dump_get_window_tree_reply,
2010 };
2011
2012 static const char * const req_names[REQ_NB_REQUESTS] = {
2013     "new_process",
2014     "get_new_process_info",
2015     "new_thread",
2016     "boot_done",
2017     "init_process",
2018     "init_process_done",
2019     "init_thread",
2020     "set_thread_buffer",
2021     "terminate_process",
2022     "terminate_thread",
2023     "get_process_info",
2024     "set_process_info",
2025     "get_thread_info",
2026     "set_thread_info",
2027     "suspend_thread",
2028     "resume_thread",
2029     "load_dll",
2030     "unload_dll",
2031     "queue_apc",
2032     "get_apc",
2033     "close_handle",
2034     "set_handle_info",
2035     "dup_handle",
2036     "open_process",
2037     "select",
2038     "create_event",
2039     "event_op",
2040     "open_event",
2041     "create_mutex",
2042     "release_mutex",
2043     "open_mutex",
2044     "create_semaphore",
2045     "release_semaphore",
2046     "open_semaphore",
2047     "create_file",
2048     "alloc_file_handle",
2049     "get_handle_fd",
2050     "set_file_pointer",
2051     "truncate_file",
2052     "set_file_time",
2053     "flush_file",
2054     "get_file_info",
2055     "lock_file",
2056     "unlock_file",
2057     "create_pipe",
2058     "create_socket",
2059     "accept_socket",
2060     "set_socket_event",
2061     "get_socket_event",
2062     "enable_socket_event",
2063     "alloc_console",
2064     "free_console",
2065     "open_console",
2066     "set_console_fd",
2067     "get_console_mode",
2068     "set_console_mode",
2069     "set_console_info",
2070     "get_console_info",
2071     "write_console_input",
2072     "read_console_input",
2073     "create_change_notification",
2074     "create_mapping",
2075     "open_mapping",
2076     "get_mapping_info",
2077     "create_device",
2078     "create_snapshot",
2079     "next_process",
2080     "next_thread",
2081     "next_module",
2082     "wait_debug_event",
2083     "queue_exception_event",
2084     "get_exception_status",
2085     "output_debug_string",
2086     "continue_debug_event",
2087     "debug_process",
2088     "read_process_memory",
2089     "write_process_memory",
2090     "create_key",
2091     "open_key",
2092     "delete_key",
2093     "enum_key",
2094     "set_key_value",
2095     "get_key_value",
2096     "enum_key_value",
2097     "delete_key_value",
2098     "load_registry",
2099     "save_registry",
2100     "save_registry_atexit",
2101     "set_registry_levels",
2102     "create_timer",
2103     "open_timer",
2104     "set_timer",
2105     "cancel_timer",
2106     "get_thread_context",
2107     "set_thread_context",
2108     "get_selector_entry",
2109     "add_atom",
2110     "delete_atom",
2111     "find_atom",
2112     "get_atom_name",
2113     "init_atom_table",
2114     "get_msg_queue",
2115     "inc_queue_paint_count",
2116     "set_queue_mask",
2117     "get_queue_status",
2118     "wait_input_idle",
2119     "send_message",
2120     "get_message",
2121     "reply_message",
2122     "get_message_reply",
2123     "cleanup_window_queue",
2124     "set_win_timer",
2125     "kill_win_timer",
2126     "create_serial",
2127     "get_serial_info",
2128     "set_serial_info",
2129     "create_async",
2130     "create_named_pipe",
2131     "open_named_pipe",
2132     "connect_named_pipe",
2133     "wait_named_pipe",
2134     "disconnect_named_pipe",
2135     "get_named_pipe_info",
2136     "create_window",
2137     "link_window",
2138     "destroy_window",
2139     "get_window_info",
2140     "get_window_parents",
2141     "get_window_children",
2142     "get_window_tree",
2143 };
2144
2145 /* ### make_requests end ### */
2146 /* Everything above this line is generated automatically by tools/make_requests */
2147
2148 static const char *get_status_name( unsigned int status )
2149 {
2150 #define NAME(status)  { #status, STATUS_##status }
2151     static const struct
2152     {
2153         const char  *name;
2154         unsigned int value;
2155     } status_names[] =
2156     {
2157         NAME(ACCESS_DENIED),
2158         NAME(ACCESS_VIOLATION),
2159         NAME(BUFFER_OVERFLOW),
2160         NAME(CHILD_MUST_BE_VOLATILE),
2161         NAME(DIRECTORY_NOT_EMPTY),
2162         NAME(DISK_FULL),
2163         NAME(FILE_LOCK_CONFLICT),
2164         NAME(INVALID_FILE_FOR_SECTION),
2165         NAME(INVALID_HANDLE),
2166         NAME(INVALID_PARAMETER),
2167         NAME(KEY_DELETED),
2168         NAME(MEDIA_WRITE_PROTECTED),
2169         NAME(MUTANT_NOT_OWNED),
2170         NAME(NOT_REGISTRY_FILE),
2171         NAME(NO_MEMORY),
2172         NAME(NO_MORE_ENTRIES),
2173         NAME(NO_MORE_FILES),
2174         NAME(NO_SUCH_FILE),
2175         NAME(OBJECT_NAME_COLLISION),
2176         NAME(OBJECT_NAME_INVALID),
2177         NAME(OBJECT_NAME_NOT_FOUND),
2178         NAME(OBJECT_PATH_INVALID),
2179         NAME(OBJECT_TYPE_MISMATCH),
2180         NAME(PENDING),
2181         NAME(PIPE_BROKEN),
2182         NAME(SEMAPHORE_LIMIT_EXCEEDED),
2183         NAME(SHARING_VIOLATION),
2184         NAME(SUSPEND_COUNT_EXCEEDED),
2185         NAME(TIMEOUT),
2186         NAME(TOO_MANY_OPENED_FILES),
2187         NAME(UNSUCCESSFUL),
2188         NAME(USER_APC),
2189         { NULL, 0 }  /* terminator */
2190     };
2191 #undef NAME
2192
2193     int i;
2194     static char buffer[10];
2195
2196     if (status)
2197     {
2198         for (i = 0; status_names[i].name; i++)
2199             if (status_names[i].value == status) return status_names[i].name;
2200     }
2201     sprintf( buffer, "%x", status );
2202     return buffer;
2203 }
2204
2205 void trace_request( struct thread *thread, const union generic_request *request )
2206 {
2207     enum request req = request->header.req;
2208     cur_pos = 0;
2209     if (req < REQ_NB_REQUESTS)
2210     {
2211         fprintf( stderr, "%08x: %s(", (unsigned int)thread, req_names[req] );
2212         cur_pos = 0;
2213         req_dumpers[req]( request );
2214         fprintf( stderr, " )\n" );
2215     }
2216     else fprintf( stderr, "%08x: %d(?)\n", (unsigned int)thread, req );
2217 }
2218
2219 void trace_reply( struct thread *thread, const union generic_request *request )
2220 {
2221     enum request req = request->header.req;
2222     if (req < REQ_NB_REQUESTS)
2223     {
2224         fprintf( stderr, "%08x: %s() = %s",
2225                  (unsigned int)thread, req_names[req], get_status_name(thread->error) );
2226         if (reply_dumpers[req])
2227         {
2228             fprintf( stderr, " {" );
2229             cur_pos = 0;
2230             reply_dumpers[req]( request );
2231             fprintf( stderr, " }" );
2232         }
2233         fputc( '\n', stderr );
2234     }
2235     else fprintf( stderr, "%08x: %d() = %s\n",
2236                   (unsigned int)thread, req, get_status_name(thread->error) );
2237 }