Added a first-cut version of MapVirtualKeyExW() that has the same
[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_bytes( const unsigned char *ptr, int len )
46 {
47     fputc( '{', stderr );
48     while (len > 0)
49     {
50         fprintf( stderr, "%02x", *ptr++ );
51         if (--len) fputc( ',', stderr );
52     }
53     fputc( '}', stderr );
54 }
55
56 static void dump_path_t( const void *req, const path_t *path )
57 {
58     const WCHAR *str = *path;
59     size_t len = get_req_strlenW( req, str );
60     fprintf( stderr, "L\"" );
61     dump_strW( str, len, stderr, "\"\"" );
62     fputc( '\"', stderr );
63 }
64
65 static void dump_context( const CONTEXT *context )
66 {
67 #ifdef __i386__
68     fprintf( stderr, "{flags=%08lx,eax=%08lx,ebx=%08lx,ecx=%08lx,edx=%08lx,esi=%08lx,edi=%08lx,"
69              "ebp=%08lx,eip=%08lx,esp=%08lx,eflags=%08lx,cs=%04lx,ds=%04lx,es=%04lx,"
70              "fs=%04lx,gs=%04lx,dr0=%08lx,dr1=%08lx,dr2=%08lx,dr3=%08lx,dr6=%08lx,dr7=%08lx,",
71              context->ContextFlags, context->Eax, context->Ebx, context->Ecx, context->Edx,
72              context->Esi, context->Edi, context->Ebp, context->Eip, context->Esp, context->EFlags,
73              context->SegCs, context->SegDs, context->SegEs, context->SegFs, context->SegGs,
74              context->Dr0, context->Dr1, context->Dr2, context->Dr3, context->Dr6, context->Dr7 );
75     fprintf( stderr, "float=" );
76     dump_uints( (int *)&context->FloatSave, sizeof(context->FloatSave) / sizeof(int) );
77     fprintf( stderr, "}" );
78 #else
79     dump_uints( (int *)context, sizeof(*context) / sizeof(int) );
80 #endif
81 }
82
83 static void dump_exc_record( const EXCEPTION_RECORD *rec )
84 {
85     int i;
86     fprintf( stderr, "{code=%lx,flags=%lx,rec=%p,addr=%p,params={",
87              rec->ExceptionCode, rec->ExceptionFlags, rec->ExceptionRecord,
88              rec->ExceptionAddress );
89     for (i = 0; i < min(rec->NumberParameters,EXCEPTION_MAXIMUM_PARAMETERS); i++)
90     {
91         if (i) fputc( ',', stderr );
92         fprintf( stderr, "%lx", rec->ExceptionInformation[i] );
93     }
94     fputc( '}', stderr );
95 }
96
97 static size_t dump_varargs_ints( const void *req )
98 {
99     const int *data = get_data(req);
100     size_t len = get_size(req) / sizeof(*data);
101
102     fputc( '{', stderr );
103     while (len > 0)
104     {
105         fprintf( stderr, "%d", *data++ );
106         if (--len) fputc( ',', stderr );
107     }
108     fputc( '}', stderr );
109     return get_size(req);
110 }
111
112 static size_t dump_varargs_ptrs( const void *req )
113 {
114     void * const *data = get_data(req);
115     size_t len = get_size(req) / sizeof(*data);
116
117     fputc( '{', stderr );
118     while (len > 0)
119     {
120         fprintf( stderr, "%p", *data++ );
121         if (--len) fputc( ',', stderr );
122     }
123     fputc( '}', stderr );
124     return get_size(req);
125 }
126
127 static size_t dump_varargs_bytes( const void *req )
128 {
129     const unsigned char *data = get_data(req);
130     size_t len = get_size(req);
131
132     fputc( '{', stderr );
133     while (len > 0)
134     {
135         fprintf( stderr, "%02x", *data++ );
136         if (--len) fputc( ',', stderr );
137     }
138     fputc( '}', stderr );
139     return get_size(req);
140 }
141
142 static size_t dump_varargs_string( const void *req )
143 {
144     fprintf( stderr, "\"%.*s\"", (int)get_size(req), (char *)get_data(req) );
145     return get_size(req);
146 }
147
148 static size_t dump_varargs_unicode_len_str( const void *req )
149 {
150     const WCHAR *str = get_data(req);
151     int len = *str++ + sizeof(WCHAR);
152     len = min( len, get_size(req) );
153     fprintf( stderr, "L\"" );
154     if (len >= sizeof(WCHAR)) dump_strW( str, (len / sizeof(WCHAR)) - 1, stderr, "\"\"" );
155     fputc( '\"', stderr );
156     return len;
157 }
158
159 static size_t dump_varargs_unicode_str( const void *req )
160 {
161     fprintf( stderr, "L\"" );
162     dump_strW( get_data(req), get_size(req) / sizeof(WCHAR), stderr, "\"\"" );
163     fputc( '\"', stderr );
164     return get_size(req);
165 }
166
167 static size_t dump_varargs_context( const void *req )
168 {
169     dump_context( get_data(req) );
170     return get_size(req);
171 }
172
173 static size_t dump_varargs_exc_event( const void *req )
174 {
175     const CONTEXT *ptr = get_data(req);
176     fprintf( stderr, "{context=" );
177     dump_context( ptr );
178     fprintf( stderr, ",rec=" );
179     dump_exc_record( (EXCEPTION_RECORD *)(ptr + 1) );
180     fputc( '}', stderr );
181     return get_size(req);
182 }
183
184 static size_t dump_varargs_debug_event( const void *req )
185 {
186     const debug_event_t *event = get_data(req);
187
188     if (!get_size(req))
189     {
190         fprintf( stderr, "{}" );
191         return 0;
192     }
193     switch(event->code)
194     {
195     case EXCEPTION_DEBUG_EVENT:
196         fprintf( stderr, "{exception," );
197         dump_exc_record( &event->info.exception.record );
198         fprintf( stderr, ",first=%d}", event->info.exception.first );
199         break;
200     case CREATE_THREAD_DEBUG_EVENT:
201         fprintf( stderr, "{create_thread,thread=%d,teb=%p,start=%p}",
202                  event->info.create_thread.handle, event->info.create_thread.teb,
203                  event->info.create_thread.start );
204         break;
205     case CREATE_PROCESS_DEBUG_EVENT:
206         fprintf( stderr, "{create_process,file=%d,process=%d,thread=%d,base=%p,offset=%d,"
207                          "size=%d,teb=%p,start=%p,name=%p,unicode=%d}",
208                  event->info.create_process.file, event->info.create_process.process,
209                  event->info.create_process.thread, event->info.create_process.base,
210                  event->info.create_process.dbg_offset, event->info.create_process.dbg_size,
211                  event->info.create_process.teb, event->info.create_process.start,
212                  event->info.create_process.name, event->info.create_process.unicode );
213         break;
214     case EXIT_THREAD_DEBUG_EVENT:
215         fprintf( stderr, "{exit_thread,code=%d}", event->info.exit.exit_code );
216         break;
217     case EXIT_PROCESS_DEBUG_EVENT:
218         fprintf( stderr, "{exit_process,code=%d}", event->info.exit.exit_code );
219         break;
220     case LOAD_DLL_DEBUG_EVENT:
221         fprintf( stderr, "{load_dll,file=%d,base=%p,offset=%d,size=%d,name=%p,unicode=%d}",
222                  event->info.load_dll.handle, event->info.load_dll.base,
223                  event->info.load_dll.dbg_offset, event->info.load_dll.dbg_size,
224                  event->info.load_dll.name, event->info.load_dll.unicode );
225         break;
226     case UNLOAD_DLL_DEBUG_EVENT:
227         fprintf( stderr, "{unload_dll,base=%p}", event->info.unload_dll.base );
228         break;
229     case OUTPUT_DEBUG_STRING_EVENT:
230         fprintf( stderr, "{output_string,data=%p,unicode=%d,len=%d}",
231                  event->info.output_string.string, event->info.output_string.unicode,
232                  event->info.output_string.length );
233         break;
234     case RIP_EVENT:
235         fprintf( stderr, "{rip,err=%d,type=%d}",
236                  event->info.rip_info.error, event->info.rip_info.type );
237         break;
238     case 0:  /* zero is the code returned on timeouts */
239         fprintf( stderr, "{}" );
240         break;
241     default:
242         fprintf( stderr, "{code=??? (%d)}", event->code );
243         break;
244     }
245     return get_size(req);
246 }
247
248 static size_t dump_varargs_input_records( const void *req )
249 {
250     const INPUT_RECORD *rec = get_data(req);
251     size_t len = get_size(req) / sizeof(*rec);
252
253     fputc( '{', stderr );
254     while (len > 0)
255     {
256         fprintf( stderr, "{%04x,...}", rec->EventType );
257         rec++;
258         if (--len) fputc( ',', stderr );
259     }
260     fputc( '}', stderr );
261     return get_size(req);
262 }
263
264 /* dumping for functions for requests that have a variable part */
265
266 static void dump_varargs_enum_key_value_reply( const struct enum_key_value_request *req )
267 {
268     int count = min( req->len - req->offset, get_req_size( req, req->data, 1 ));
269     dump_bytes( req->data, count );
270 }
271
272 typedef void (*dump_func)( const void *req );
273
274 /* Everything below this line is generated automatically by tools/make_requests */
275 /* ### make_requests begin ### */
276
277 static void dump_new_process_request( const struct new_process_request *req )
278 {
279     fprintf( stderr, " inherit_all=%d,", req->inherit_all );
280     fprintf( stderr, " create_flags=%d,", req->create_flags );
281     fprintf( stderr, " start_flags=%d,", req->start_flags );
282     fprintf( stderr, " exe_file=%d,", req->exe_file );
283     fprintf( stderr, " hstdin=%d,", req->hstdin );
284     fprintf( stderr, " hstdout=%d,", req->hstdout );
285     fprintf( stderr, " hstderr=%d,", req->hstderr );
286     fprintf( stderr, " cmd_show=%d,", req->cmd_show );
287     fprintf( stderr, " alloc_fd=%d,", req->alloc_fd );
288     fprintf( stderr, " filename=" );
289     cur_pos += dump_varargs_string( req );
290 }
291
292 static void dump_wait_process_request( const struct wait_process_request *req )
293 {
294     fprintf( stderr, " pinherit=%d,", req->pinherit );
295     fprintf( stderr, " tinherit=%d,", req->tinherit );
296     fprintf( stderr, " timeout=%d,", req->timeout );
297     fprintf( stderr, " cancel=%d", req->cancel );
298 }
299
300 static void dump_wait_process_reply( const struct wait_process_request *req )
301 {
302     fprintf( stderr, " pid=%p,", req->pid );
303     fprintf( stderr, " phandle=%d,", req->phandle );
304     fprintf( stderr, " tid=%p,", req->tid );
305     fprintf( stderr, " thandle=%d,", req->thandle );
306     fprintf( stderr, " event=%d", req->event );
307 }
308
309 static void dump_new_thread_request( const struct new_thread_request *req )
310 {
311     fprintf( stderr, " suspend=%d,", req->suspend );
312     fprintf( stderr, " inherit=%d", req->inherit );
313 }
314
315 static void dump_new_thread_reply( const struct new_thread_request *req )
316 {
317     fprintf( stderr, " tid=%p,", req->tid );
318     fprintf( stderr, " handle=%d", req->handle );
319 }
320
321 static void dump_boot_done_request( const struct boot_done_request *req )
322 {
323     fprintf( stderr, " debug_level=%d", req->debug_level );
324 }
325
326 static void dump_init_process_request( const struct init_process_request *req )
327 {
328     fprintf( stderr, " ldt_copy=%p,", req->ldt_copy );
329     fprintf( stderr, " ppid=%d", req->ppid );
330 }
331
332 static void dump_init_process_reply( const struct init_process_request *req )
333 {
334     fprintf( stderr, " start_flags=%d,", req->start_flags );
335     fprintf( stderr, " server_start=%08x,", req->server_start );
336     fprintf( stderr, " exe_file=%d,", req->exe_file );
337     fprintf( stderr, " hstdin=%d,", req->hstdin );
338     fprintf( stderr, " hstdout=%d,", req->hstdout );
339     fprintf( stderr, " hstderr=%d,", req->hstderr );
340     fprintf( stderr, " cmd_show=%d,", req->cmd_show );
341     fprintf( stderr, " filename=" );
342     cur_pos += dump_varargs_string( req );
343 }
344
345 static void dump_init_process_done_request( const struct init_process_done_request *req )
346 {
347     fprintf( stderr, " module=%p,", req->module );
348     fprintf( stderr, " entry=%p,", req->entry );
349     fprintf( stderr, " name=%p,", req->name );
350     fprintf( stderr, " gui=%d", req->gui );
351 }
352
353 static void dump_init_process_done_reply( const struct init_process_done_request *req )
354 {
355     fprintf( stderr, " debugged=%d", req->debugged );
356 }
357
358 static void dump_init_thread_request( const struct init_thread_request *req )
359 {
360     fprintf( stderr, " unix_pid=%d,", req->unix_pid );
361     fprintf( stderr, " teb=%p,", req->teb );
362     fprintf( stderr, " entry=%p", req->entry );
363 }
364
365 static void dump_get_thread_buffer_request( const struct get_thread_buffer_request *req )
366 {
367 }
368
369 static void dump_get_thread_buffer_reply( const struct get_thread_buffer_request *req )
370 {
371     fprintf( stderr, " pid=%p,", req->pid );
372     fprintf( stderr, " tid=%p,", req->tid );
373     fprintf( stderr, " boot=%d,", req->boot );
374     fprintf( stderr, " version=%d", req->version );
375 }
376
377 static void dump_terminate_process_request( const struct terminate_process_request *req )
378 {
379     fprintf( stderr, " handle=%d,", req->handle );
380     fprintf( stderr, " exit_code=%d", req->exit_code );
381 }
382
383 static void dump_terminate_process_reply( const struct terminate_process_request *req )
384 {
385     fprintf( stderr, " self=%d", req->self );
386 }
387
388 static void dump_terminate_thread_request( const struct terminate_thread_request *req )
389 {
390     fprintf( stderr, " handle=%d,", req->handle );
391     fprintf( stderr, " exit_code=%d", req->exit_code );
392 }
393
394 static void dump_terminate_thread_reply( const struct terminate_thread_request *req )
395 {
396     fprintf( stderr, " self=%d,", req->self );
397     fprintf( stderr, " last=%d", req->last );
398 }
399
400 static void dump_get_process_info_request( const struct get_process_info_request *req )
401 {
402     fprintf( stderr, " handle=%d", req->handle );
403 }
404
405 static void dump_get_process_info_reply( const struct get_process_info_request *req )
406 {
407     fprintf( stderr, " pid=%p,", req->pid );
408     fprintf( stderr, " debugged=%d,", req->debugged );
409     fprintf( stderr, " exit_code=%d,", req->exit_code );
410     fprintf( stderr, " priority=%d,", req->priority );
411     fprintf( stderr, " process_affinity=%d,", req->process_affinity );
412     fprintf( stderr, " system_affinity=%d", req->system_affinity );
413 }
414
415 static void dump_set_process_info_request( const struct set_process_info_request *req )
416 {
417     fprintf( stderr, " handle=%d,", req->handle );
418     fprintf( stderr, " mask=%d,", req->mask );
419     fprintf( stderr, " priority=%d,", req->priority );
420     fprintf( stderr, " affinity=%d", req->affinity );
421 }
422
423 static void dump_get_thread_info_request( const struct get_thread_info_request *req )
424 {
425     fprintf( stderr, " handle=%d,", req->handle );
426     fprintf( stderr, " tid_in=%p", req->tid_in );
427 }
428
429 static void dump_get_thread_info_reply( const struct get_thread_info_request *req )
430 {
431     fprintf( stderr, " tid=%p,", req->tid );
432     fprintf( stderr, " teb=%p,", req->teb );
433     fprintf( stderr, " exit_code=%d,", req->exit_code );
434     fprintf( stderr, " priority=%d", req->priority );
435 }
436
437 static void dump_set_thread_info_request( const struct set_thread_info_request *req )
438 {
439     fprintf( stderr, " handle=%d,", req->handle );
440     fprintf( stderr, " mask=%d,", req->mask );
441     fprintf( stderr, " priority=%d,", req->priority );
442     fprintf( stderr, " affinity=%d", req->affinity );
443 }
444
445 static void dump_suspend_thread_request( const struct suspend_thread_request *req )
446 {
447     fprintf( stderr, " handle=%d", req->handle );
448 }
449
450 static void dump_suspend_thread_reply( const struct suspend_thread_request *req )
451 {
452     fprintf( stderr, " count=%d", req->count );
453 }
454
455 static void dump_resume_thread_request( const struct resume_thread_request *req )
456 {
457     fprintf( stderr, " handle=%d", req->handle );
458 }
459
460 static void dump_resume_thread_reply( const struct resume_thread_request *req )
461 {
462     fprintf( stderr, " count=%d", req->count );
463 }
464
465 static void dump_load_dll_request( const struct load_dll_request *req )
466 {
467     fprintf( stderr, " handle=%d,", req->handle );
468     fprintf( stderr, " base=%p,", req->base );
469     fprintf( stderr, " dbg_offset=%d,", req->dbg_offset );
470     fprintf( stderr, " dbg_size=%d,", req->dbg_size );
471     fprintf( stderr, " name=%p", req->name );
472 }
473
474 static void dump_unload_dll_request( const struct unload_dll_request *req )
475 {
476     fprintf( stderr, " base=%p", req->base );
477 }
478
479 static void dump_queue_apc_request( const struct queue_apc_request *req )
480 {
481     fprintf( stderr, " handle=%d,", req->handle );
482     fprintf( stderr, " func=%p,", req->func );
483     fprintf( stderr, " param=%p", req->param );
484 }
485
486 static void dump_get_apc_request( const struct get_apc_request *req )
487 {
488 }
489
490 static void dump_get_apc_reply( const struct get_apc_request *req )
491 {
492     fprintf( stderr, " func=%p,", req->func );
493     fprintf( stderr, " type=%d,", req->type );
494     fprintf( stderr, " args=" );
495     cur_pos += dump_varargs_ptrs( req );
496 }
497
498 static void dump_close_handle_request( const struct close_handle_request *req )
499 {
500     fprintf( stderr, " handle=%d", req->handle );
501 }
502
503 static void dump_get_handle_info_request( const struct get_handle_info_request *req )
504 {
505     fprintf( stderr, " handle=%d", req->handle );
506 }
507
508 static void dump_get_handle_info_reply( const struct get_handle_info_request *req )
509 {
510     fprintf( stderr, " flags=%d", req->flags );
511 }
512
513 static void dump_set_handle_info_request( const struct set_handle_info_request *req )
514 {
515     fprintf( stderr, " handle=%d,", req->handle );
516     fprintf( stderr, " flags=%d,", req->flags );
517     fprintf( stderr, " mask=%d", req->mask );
518 }
519
520 static void dump_dup_handle_request( const struct dup_handle_request *req )
521 {
522     fprintf( stderr, " src_process=%d,", req->src_process );
523     fprintf( stderr, " src_handle=%d,", req->src_handle );
524     fprintf( stderr, " dst_process=%d,", req->dst_process );
525     fprintf( stderr, " access=%08x,", req->access );
526     fprintf( stderr, " inherit=%d,", req->inherit );
527     fprintf( stderr, " options=%d", req->options );
528 }
529
530 static void dump_dup_handle_reply( const struct dup_handle_request *req )
531 {
532     fprintf( stderr, " handle=%d", req->handle );
533 }
534
535 static void dump_open_process_request( const struct open_process_request *req )
536 {
537     fprintf( stderr, " pid=%p,", req->pid );
538     fprintf( stderr, " access=%08x,", req->access );
539     fprintf( stderr, " inherit=%d", req->inherit );
540 }
541
542 static void dump_open_process_reply( const struct open_process_request *req )
543 {
544     fprintf( stderr, " handle=%d", req->handle );
545 }
546
547 static void dump_select_request( const struct select_request *req )
548 {
549     fprintf( stderr, " flags=%d,", req->flags );
550     fprintf( stderr, " timeout=%d,", req->timeout );
551     fprintf( stderr, " handles=" );
552     cur_pos += dump_varargs_ints( req );
553 }
554
555 static void dump_select_reply( const struct select_request *req )
556 {
557     fprintf( stderr, " signaled=%d", req->signaled );
558 }
559
560 static void dump_create_event_request( const struct create_event_request *req )
561 {
562     fprintf( stderr, " manual_reset=%d,", req->manual_reset );
563     fprintf( stderr, " initial_state=%d,", req->initial_state );
564     fprintf( stderr, " inherit=%d,", req->inherit );
565     fprintf( stderr, " name=" );
566     cur_pos += dump_varargs_unicode_str( req );
567 }
568
569 static void dump_create_event_reply( const struct create_event_request *req )
570 {
571     fprintf( stderr, " handle=%d", req->handle );
572 }
573
574 static void dump_event_op_request( const struct event_op_request *req )
575 {
576     fprintf( stderr, " handle=%d,", req->handle );
577     fprintf( stderr, " op=%d", req->op );
578 }
579
580 static void dump_open_event_request( const struct open_event_request *req )
581 {
582     fprintf( stderr, " access=%08x,", req->access );
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_open_event_reply( const struct open_event_request *req )
589 {
590     fprintf( stderr, " handle=%d", req->handle );
591 }
592
593 static void dump_create_mutex_request( const struct create_mutex_request *req )
594 {
595     fprintf( stderr, " owned=%d,", req->owned );
596     fprintf( stderr, " inherit=%d,", req->inherit );
597     fprintf( stderr, " name=" );
598     cur_pos += dump_varargs_unicode_str( req );
599 }
600
601 static void dump_create_mutex_reply( const struct create_mutex_request *req )
602 {
603     fprintf( stderr, " handle=%d", req->handle );
604 }
605
606 static void dump_release_mutex_request( const struct release_mutex_request *req )
607 {
608     fprintf( stderr, " handle=%d", req->handle );
609 }
610
611 static void dump_open_mutex_request( const struct open_mutex_request *req )
612 {
613     fprintf( stderr, " access=%08x,", req->access );
614     fprintf( stderr, " inherit=%d,", req->inherit );
615     fprintf( stderr, " name=" );
616     cur_pos += dump_varargs_unicode_str( req );
617 }
618
619 static void dump_open_mutex_reply( const struct open_mutex_request *req )
620 {
621     fprintf( stderr, " handle=%d", req->handle );
622 }
623
624 static void dump_create_semaphore_request( const struct create_semaphore_request *req )
625 {
626     fprintf( stderr, " initial=%08x,", req->initial );
627     fprintf( stderr, " max=%08x,", req->max );
628     fprintf( stderr, " inherit=%d,", req->inherit );
629     fprintf( stderr, " name=" );
630     cur_pos += dump_varargs_unicode_str( req );
631 }
632
633 static void dump_create_semaphore_reply( const struct create_semaphore_request *req )
634 {
635     fprintf( stderr, " handle=%d", req->handle );
636 }
637
638 static void dump_release_semaphore_request( const struct release_semaphore_request *req )
639 {
640     fprintf( stderr, " handle=%d,", req->handle );
641     fprintf( stderr, " count=%08x", req->count );
642 }
643
644 static void dump_release_semaphore_reply( const struct release_semaphore_request *req )
645 {
646     fprintf( stderr, " prev_count=%08x", req->prev_count );
647 }
648
649 static void dump_open_semaphore_request( const struct open_semaphore_request *req )
650 {
651     fprintf( stderr, " access=%08x,", req->access );
652     fprintf( stderr, " inherit=%d,", req->inherit );
653     fprintf( stderr, " name=" );
654     cur_pos += dump_varargs_unicode_str( req );
655 }
656
657 static void dump_open_semaphore_reply( const struct open_semaphore_request *req )
658 {
659     fprintf( stderr, " handle=%d", req->handle );
660 }
661
662 static void dump_create_file_request( const struct create_file_request *req )
663 {
664     fprintf( stderr, " access=%08x,", req->access );
665     fprintf( stderr, " inherit=%d,", req->inherit );
666     fprintf( stderr, " sharing=%08x,", req->sharing );
667     fprintf( stderr, " create=%d,", req->create );
668     fprintf( stderr, " attrs=%08x,", req->attrs );
669     fprintf( stderr, " filename=" );
670     cur_pos += dump_varargs_string( req );
671 }
672
673 static void dump_create_file_reply( const struct create_file_request *req )
674 {
675     fprintf( stderr, " handle=%d", req->handle );
676 }
677
678 static void dump_alloc_file_handle_request( const struct alloc_file_handle_request *req )
679 {
680     fprintf( stderr, " access=%08x", req->access );
681 }
682
683 static void dump_alloc_file_handle_reply( const struct alloc_file_handle_request *req )
684 {
685     fprintf( stderr, " handle=%d", req->handle );
686 }
687
688 static void dump_get_read_fd_request( const struct get_read_fd_request *req )
689 {
690     fprintf( stderr, " handle=%d", req->handle );
691 }
692
693 static void dump_get_write_fd_request( const struct get_write_fd_request *req )
694 {
695     fprintf( stderr, " handle=%d", req->handle );
696 }
697
698 static void dump_set_file_pointer_request( const struct set_file_pointer_request *req )
699 {
700     fprintf( stderr, " handle=%d,", req->handle );
701     fprintf( stderr, " low=%d,", req->low );
702     fprintf( stderr, " high=%d,", req->high );
703     fprintf( stderr, " whence=%d", req->whence );
704 }
705
706 static void dump_set_file_pointer_reply( const struct set_file_pointer_request *req )
707 {
708     fprintf( stderr, " new_low=%d,", req->new_low );
709     fprintf( stderr, " new_high=%d", req->new_high );
710 }
711
712 static void dump_truncate_file_request( const struct truncate_file_request *req )
713 {
714     fprintf( stderr, " handle=%d", req->handle );
715 }
716
717 static void dump_set_file_time_request( const struct set_file_time_request *req )
718 {
719     fprintf( stderr, " handle=%d,", req->handle );
720     fprintf( stderr, " access_time=%ld,", req->access_time );
721     fprintf( stderr, " write_time=%ld", req->write_time );
722 }
723
724 static void dump_flush_file_request( const struct flush_file_request *req )
725 {
726     fprintf( stderr, " handle=%d", req->handle );
727 }
728
729 static void dump_get_file_info_request( const struct get_file_info_request *req )
730 {
731     fprintf( stderr, " handle=%d", req->handle );
732 }
733
734 static void dump_get_file_info_reply( const struct get_file_info_request *req )
735 {
736     fprintf( stderr, " type=%d,", req->type );
737     fprintf( stderr, " attr=%d,", req->attr );
738     fprintf( stderr, " access_time=%ld,", req->access_time );
739     fprintf( stderr, " write_time=%ld,", req->write_time );
740     fprintf( stderr, " size_high=%d,", req->size_high );
741     fprintf( stderr, " size_low=%d,", req->size_low );
742     fprintf( stderr, " links=%d,", req->links );
743     fprintf( stderr, " index_high=%d,", req->index_high );
744     fprintf( stderr, " index_low=%d,", req->index_low );
745     fprintf( stderr, " serial=%08x", req->serial );
746 }
747
748 static void dump_lock_file_request( const struct lock_file_request *req )
749 {
750     fprintf( stderr, " handle=%d,", req->handle );
751     fprintf( stderr, " offset_low=%08x,", req->offset_low );
752     fprintf( stderr, " offset_high=%08x,", req->offset_high );
753     fprintf( stderr, " count_low=%08x,", req->count_low );
754     fprintf( stderr, " count_high=%08x", req->count_high );
755 }
756
757 static void dump_unlock_file_request( const struct unlock_file_request *req )
758 {
759     fprintf( stderr, " handle=%d,", req->handle );
760     fprintf( stderr, " offset_low=%08x,", req->offset_low );
761     fprintf( stderr, " offset_high=%08x,", req->offset_high );
762     fprintf( stderr, " count_low=%08x,", req->count_low );
763     fprintf( stderr, " count_high=%08x", req->count_high );
764 }
765
766 static void dump_create_pipe_request( const struct create_pipe_request *req )
767 {
768     fprintf( stderr, " inherit=%d", req->inherit );
769 }
770
771 static void dump_create_pipe_reply( const struct create_pipe_request *req )
772 {
773     fprintf( stderr, " handle_read=%d,", req->handle_read );
774     fprintf( stderr, " handle_write=%d", req->handle_write );
775 }
776
777 static void dump_create_socket_request( const struct create_socket_request *req )
778 {
779     fprintf( stderr, " access=%08x,", req->access );
780     fprintf( stderr, " inherit=%d,", req->inherit );
781     fprintf( stderr, " family=%d,", req->family );
782     fprintf( stderr, " type=%d,", req->type );
783     fprintf( stderr, " protocol=%d", req->protocol );
784 }
785
786 static void dump_create_socket_reply( const struct create_socket_request *req )
787 {
788     fprintf( stderr, " handle=%d", req->handle );
789 }
790
791 static void dump_accept_socket_request( const struct accept_socket_request *req )
792 {
793     fprintf( stderr, " lhandle=%d,", req->lhandle );
794     fprintf( stderr, " access=%08x,", req->access );
795     fprintf( stderr, " inherit=%d", req->inherit );
796 }
797
798 static void dump_accept_socket_reply( const struct accept_socket_request *req )
799 {
800     fprintf( stderr, " handle=%d", req->handle );
801 }
802
803 static void dump_set_socket_event_request( const struct set_socket_event_request *req )
804 {
805     fprintf( stderr, " handle=%d,", req->handle );
806     fprintf( stderr, " mask=%08x,", req->mask );
807     fprintf( stderr, " event=%d", req->event );
808 }
809
810 static void dump_get_socket_event_request( const struct get_socket_event_request *req )
811 {
812     fprintf( stderr, " handle=%d,", req->handle );
813     fprintf( stderr, " service=%d,", req->service );
814     fprintf( stderr, " s_event=%d,", req->s_event );
815     fprintf( stderr, " c_event=%d", req->c_event );
816 }
817
818 static void dump_get_socket_event_reply( const struct get_socket_event_request *req )
819 {
820     fprintf( stderr, " mask=%08x,", req->mask );
821     fprintf( stderr, " pmask=%08x,", req->pmask );
822     fprintf( stderr, " state=%08x,", req->state );
823     fprintf( stderr, " errors=" );
824     cur_pos += dump_varargs_ints( req );
825 }
826
827 static void dump_enable_socket_event_request( const struct enable_socket_event_request *req )
828 {
829     fprintf( stderr, " handle=%d,", req->handle );
830     fprintf( stderr, " mask=%08x,", req->mask );
831     fprintf( stderr, " sstate=%08x,", req->sstate );
832     fprintf( stderr, " cstate=%08x", req->cstate );
833 }
834
835 static void dump_alloc_console_request( const struct alloc_console_request *req )
836 {
837     fprintf( stderr, " access=%08x,", req->access );
838     fprintf( stderr, " inherit=%d", req->inherit );
839 }
840
841 static void dump_alloc_console_reply( const struct alloc_console_request *req )
842 {
843     fprintf( stderr, " handle_in=%d,", req->handle_in );
844     fprintf( stderr, " handle_out=%d", req->handle_out );
845 }
846
847 static void dump_free_console_request( const struct free_console_request *req )
848 {
849 }
850
851 static void dump_open_console_request( const struct open_console_request *req )
852 {
853     fprintf( stderr, " output=%d,", req->output );
854     fprintf( stderr, " access=%08x,", req->access );
855     fprintf( stderr, " inherit=%d", req->inherit );
856 }
857
858 static void dump_open_console_reply( const struct open_console_request *req )
859 {
860     fprintf( stderr, " handle=%d", req->handle );
861 }
862
863 static void dump_set_console_fd_request( const struct set_console_fd_request *req )
864 {
865     fprintf( stderr, " handle=%d,", req->handle );
866     fprintf( stderr, " file_handle=%d,", req->file_handle );
867     fprintf( stderr, " pid=%d", req->pid );
868 }
869
870 static void dump_get_console_mode_request( const struct get_console_mode_request *req )
871 {
872     fprintf( stderr, " handle=%d", req->handle );
873 }
874
875 static void dump_get_console_mode_reply( const struct get_console_mode_request *req )
876 {
877     fprintf( stderr, " mode=%d", req->mode );
878 }
879
880 static void dump_set_console_mode_request( const struct set_console_mode_request *req )
881 {
882     fprintf( stderr, " handle=%d,", req->handle );
883     fprintf( stderr, " mode=%d", req->mode );
884 }
885
886 static void dump_set_console_info_request( const struct set_console_info_request *req )
887 {
888     fprintf( stderr, " handle=%d,", req->handle );
889     fprintf( stderr, " mask=%d,", req->mask );
890     fprintf( stderr, " cursor_size=%d,", req->cursor_size );
891     fprintf( stderr, " cursor_visible=%d,", req->cursor_visible );
892     fprintf( stderr, " title=" );
893     cur_pos += dump_varargs_string( req );
894 }
895
896 static void dump_get_console_info_request( const struct get_console_info_request *req )
897 {
898     fprintf( stderr, " handle=%d", req->handle );
899 }
900
901 static void dump_get_console_info_reply( const struct get_console_info_request *req )
902 {
903     fprintf( stderr, " cursor_size=%d,", req->cursor_size );
904     fprintf( stderr, " cursor_visible=%d,", req->cursor_visible );
905     fprintf( stderr, " pid=%d,", req->pid );
906     fprintf( stderr, " title=" );
907     cur_pos += dump_varargs_string( req );
908 }
909
910 static void dump_write_console_input_request( const struct write_console_input_request *req )
911 {
912     fprintf( stderr, " handle=%d,", req->handle );
913     fprintf( stderr, " rec=" );
914     cur_pos += dump_varargs_input_records( req );
915 }
916
917 static void dump_write_console_input_reply( const struct write_console_input_request *req )
918 {
919     fprintf( stderr, " written=%d", req->written );
920 }
921
922 static void dump_read_console_input_request( const struct read_console_input_request *req )
923 {
924     fprintf( stderr, " handle=%d,", req->handle );
925     fprintf( stderr, " flush=%d", req->flush );
926 }
927
928 static void dump_read_console_input_reply( const struct read_console_input_request *req )
929 {
930     fprintf( stderr, " read=%d,", req->read );
931     fprintf( stderr, " rec=" );
932     cur_pos += dump_varargs_input_records( req );
933 }
934
935 static void dump_create_change_notification_request( const struct create_change_notification_request *req )
936 {
937     fprintf( stderr, " subtree=%d,", req->subtree );
938     fprintf( stderr, " filter=%d", req->filter );
939 }
940
941 static void dump_create_change_notification_reply( const struct create_change_notification_request *req )
942 {
943     fprintf( stderr, " handle=%d", req->handle );
944 }
945
946 static void dump_create_mapping_request( const struct create_mapping_request *req )
947 {
948     fprintf( stderr, " size_high=%d,", req->size_high );
949     fprintf( stderr, " size_low=%d,", req->size_low );
950     fprintf( stderr, " protect=%d,", req->protect );
951     fprintf( stderr, " inherit=%d,", req->inherit );
952     fprintf( stderr, " file_handle=%d,", req->file_handle );
953     fprintf( stderr, " name=" );
954     cur_pos += dump_varargs_unicode_str( req );
955 }
956
957 static void dump_create_mapping_reply( const struct create_mapping_request *req )
958 {
959     fprintf( stderr, " handle=%d", req->handle );
960 }
961
962 static void dump_open_mapping_request( const struct open_mapping_request *req )
963 {
964     fprintf( stderr, " access=%08x,", req->access );
965     fprintf( stderr, " inherit=%d,", req->inherit );
966     fprintf( stderr, " name=" );
967     cur_pos += dump_varargs_unicode_str( req );
968 }
969
970 static void dump_open_mapping_reply( const struct open_mapping_request *req )
971 {
972     fprintf( stderr, " handle=%d", req->handle );
973 }
974
975 static void dump_get_mapping_info_request( const struct get_mapping_info_request *req )
976 {
977     fprintf( stderr, " handle=%d", req->handle );
978 }
979
980 static void dump_get_mapping_info_reply( const struct get_mapping_info_request *req )
981 {
982     fprintf( stderr, " size_high=%d,", req->size_high );
983     fprintf( stderr, " size_low=%d,", req->size_low );
984     fprintf( stderr, " protect=%d,", req->protect );
985     fprintf( stderr, " header_size=%d,", req->header_size );
986     fprintf( stderr, " base=%p,", req->base );
987     fprintf( stderr, " shared_file=%d,", req->shared_file );
988     fprintf( stderr, " shared_size=%d", req->shared_size );
989 }
990
991 static void dump_create_device_request( const struct create_device_request *req )
992 {
993     fprintf( stderr, " access=%08x,", req->access );
994     fprintf( stderr, " inherit=%d,", req->inherit );
995     fprintf( stderr, " id=%d", req->id );
996 }
997
998 static void dump_create_device_reply( const struct create_device_request *req )
999 {
1000     fprintf( stderr, " handle=%d", req->handle );
1001 }
1002
1003 static void dump_create_snapshot_request( const struct create_snapshot_request *req )
1004 {
1005     fprintf( stderr, " inherit=%d,", req->inherit );
1006     fprintf( stderr, " flags=%d,", req->flags );
1007     fprintf( stderr, " pid=%p", req->pid );
1008 }
1009
1010 static void dump_create_snapshot_reply( const struct create_snapshot_request *req )
1011 {
1012     fprintf( stderr, " handle=%d", req->handle );
1013 }
1014
1015 static void dump_next_process_request( const struct next_process_request *req )
1016 {
1017     fprintf( stderr, " handle=%d,", req->handle );
1018     fprintf( stderr, " reset=%d", req->reset );
1019 }
1020
1021 static void dump_next_process_reply( const struct next_process_request *req )
1022 {
1023     fprintf( stderr, " count=%d,", req->count );
1024     fprintf( stderr, " pid=%p,", req->pid );
1025     fprintf( stderr, " threads=%d,", req->threads );
1026     fprintf( stderr, " priority=%d", req->priority );
1027 }
1028
1029 static void dump_next_thread_request( const struct next_thread_request *req )
1030 {
1031     fprintf( stderr, " handle=%d,", req->handle );
1032     fprintf( stderr, " reset=%d", req->reset );
1033 }
1034
1035 static void dump_next_thread_reply( const struct next_thread_request *req )
1036 {
1037     fprintf( stderr, " count=%d,", req->count );
1038     fprintf( stderr, " pid=%p,", req->pid );
1039     fprintf( stderr, " tid=%p,", req->tid );
1040     fprintf( stderr, " base_pri=%d,", req->base_pri );
1041     fprintf( stderr, " delta_pri=%d", req->delta_pri );
1042 }
1043
1044 static void dump_next_module_request( const struct next_module_request *req )
1045 {
1046     fprintf( stderr, " handle=%d,", req->handle );
1047     fprintf( stderr, " reset=%d", req->reset );
1048 }
1049
1050 static void dump_next_module_reply( const struct next_module_request *req )
1051 {
1052     fprintf( stderr, " pid=%p,", req->pid );
1053     fprintf( stderr, " base=%p", req->base );
1054 }
1055
1056 static void dump_wait_debug_event_request( const struct wait_debug_event_request *req )
1057 {
1058     fprintf( stderr, " timeout=%d", req->timeout );
1059 }
1060
1061 static void dump_wait_debug_event_reply( const struct wait_debug_event_request *req )
1062 {
1063     fprintf( stderr, " pid=%p,", req->pid );
1064     fprintf( stderr, " tid=%p,", req->tid );
1065     fprintf( stderr, " event=" );
1066     cur_pos += dump_varargs_debug_event( req );
1067 }
1068
1069 static void dump_exception_event_request( const struct exception_event_request *req )
1070 {
1071     fprintf( stderr, " first=%d,", req->first );
1072     fprintf( stderr, " record=" );
1073     cur_pos += dump_varargs_exc_event( req );
1074 }
1075
1076 static void dump_exception_event_reply( const struct exception_event_request *req )
1077 {
1078     fprintf( stderr, " status=%d,", req->status );
1079     fprintf( stderr, " context=" );
1080     cur_pos += dump_varargs_context( req );
1081 }
1082
1083 static void dump_output_debug_string_request( const struct output_debug_string_request *req )
1084 {
1085     fprintf( stderr, " string=%p,", req->string );
1086     fprintf( stderr, " unicode=%d,", req->unicode );
1087     fprintf( stderr, " length=%d", req->length );
1088 }
1089
1090 static void dump_continue_debug_event_request( const struct continue_debug_event_request *req )
1091 {
1092     fprintf( stderr, " pid=%p,", req->pid );
1093     fprintf( stderr, " tid=%p,", req->tid );
1094     fprintf( stderr, " status=%d", req->status );
1095 }
1096
1097 static void dump_debug_process_request( const struct debug_process_request *req )
1098 {
1099     fprintf( stderr, " pid=%p", req->pid );
1100 }
1101
1102 static void dump_read_process_memory_request( const struct read_process_memory_request *req )
1103 {
1104     fprintf( stderr, " handle=%d,", req->handle );
1105     fprintf( stderr, " addr=%p,", req->addr );
1106     fprintf( stderr, " len=%d", req->len );
1107 }
1108
1109 static void dump_read_process_memory_reply( const struct read_process_memory_request *req )
1110 {
1111     fprintf( stderr, " data=" );
1112     cur_pos += dump_varargs_bytes( req );
1113 }
1114
1115 static void dump_write_process_memory_request( const struct write_process_memory_request *req )
1116 {
1117     fprintf( stderr, " handle=%d,", req->handle );
1118     fprintf( stderr, " addr=%p,", req->addr );
1119     fprintf( stderr, " len=%d,", req->len );
1120     fprintf( stderr, " first_mask=%08x,", req->first_mask );
1121     fprintf( stderr, " last_mask=%08x,", req->last_mask );
1122     fprintf( stderr, " data=" );
1123     cur_pos += dump_varargs_bytes( req );
1124 }
1125
1126 static void dump_create_key_request( const struct create_key_request *req )
1127 {
1128     fprintf( stderr, " parent=%d,", req->parent );
1129     fprintf( stderr, " access=%08x,", req->access );
1130     fprintf( stderr, " options=%08x,", req->options );
1131     fprintf( stderr, " modif=%ld,", req->modif );
1132     fprintf( stderr, " name=" );
1133     cur_pos += dump_varargs_unicode_len_str( req );
1134     fputc( ',', stderr );
1135     fprintf( stderr, " class=" );
1136     cur_pos += dump_varargs_unicode_str( req );
1137 }
1138
1139 static void dump_create_key_reply( const struct create_key_request *req )
1140 {
1141     fprintf( stderr, " hkey=%d,", req->hkey );
1142     fprintf( stderr, " created=%d", req->created );
1143 }
1144
1145 static void dump_open_key_request( const struct open_key_request *req )
1146 {
1147     fprintf( stderr, " parent=%d,", req->parent );
1148     fprintf( stderr, " access=%08x,", req->access );
1149     fprintf( stderr, " name=" );
1150     cur_pos += dump_varargs_unicode_str( req );
1151 }
1152
1153 static void dump_open_key_reply( const struct open_key_request *req )
1154 {
1155     fprintf( stderr, " hkey=%d", req->hkey );
1156 }
1157
1158 static void dump_delete_key_request( const struct delete_key_request *req )
1159 {
1160     fprintf( stderr, " hkey=%d", req->hkey );
1161 }
1162
1163 static void dump_enum_key_request( const struct enum_key_request *req )
1164 {
1165     fprintf( stderr, " hkey=%d,", req->hkey );
1166     fprintf( stderr, " index=%d,", req->index );
1167     fprintf( stderr, " full=%d", req->full );
1168 }
1169
1170 static void dump_enum_key_reply( const struct enum_key_request *req )
1171 {
1172     fprintf( stderr, " subkeys=%d,", req->subkeys );
1173     fprintf( stderr, " max_subkey=%d,", req->max_subkey );
1174     fprintf( stderr, " max_class=%d,", req->max_class );
1175     fprintf( stderr, " values=%d,", req->values );
1176     fprintf( stderr, " max_value=%d,", req->max_value );
1177     fprintf( stderr, " max_data=%d,", req->max_data );
1178     fprintf( stderr, " modif=%ld,", req->modif );
1179     fprintf( stderr, " name=" );
1180     cur_pos += dump_varargs_unicode_len_str( req );
1181     fputc( ',', stderr );
1182     fprintf( stderr, " class=" );
1183     cur_pos += dump_varargs_unicode_str( req );
1184 }
1185
1186 static void dump_set_key_value_request( const struct set_key_value_request *req )
1187 {
1188     fprintf( stderr, " hkey=%d,", req->hkey );
1189     fprintf( stderr, " type=%d,", req->type );
1190     fprintf( stderr, " total=%08x,", req->total );
1191     fprintf( stderr, " offset=%08x,", req->offset );
1192     fprintf( stderr, " name=" );
1193     cur_pos += dump_varargs_unicode_len_str( req );
1194     fputc( ',', stderr );
1195     fprintf( stderr, " data=" );
1196     cur_pos += dump_varargs_bytes( req );
1197 }
1198
1199 static void dump_get_key_value_request( const struct get_key_value_request *req )
1200 {
1201     fprintf( stderr, " hkey=%d,", req->hkey );
1202     fprintf( stderr, " offset=%08x,", req->offset );
1203     fprintf( stderr, " name=" );
1204     cur_pos += dump_varargs_unicode_len_str( req );
1205 }
1206
1207 static void dump_get_key_value_reply( const struct get_key_value_request *req )
1208 {
1209     fprintf( stderr, " type=%d,", req->type );
1210     fprintf( stderr, " len=%d,", req->len );
1211     fprintf( stderr, " data=" );
1212     cur_pos += dump_varargs_bytes( req );
1213 }
1214
1215 static void dump_enum_key_value_request( const struct enum_key_value_request *req )
1216 {
1217     fprintf( stderr, " hkey=%d,", req->hkey );
1218     fprintf( stderr, " index=%d,", req->index );
1219     fprintf( stderr, " offset=%08x", req->offset );
1220 }
1221
1222 static void dump_enum_key_value_reply( const struct enum_key_value_request *req )
1223 {
1224     fprintf( stderr, " type=%d,", req->type );
1225     fprintf( stderr, " len=%d,", req->len );
1226     fprintf( stderr, " name=" );
1227     dump_path_t( req, &req->name );
1228     fprintf( stderr, "," );
1229     fprintf( stderr, " data=" );
1230     dump_varargs_enum_key_value_reply( req );
1231 }
1232
1233 static void dump_delete_key_value_request( const struct delete_key_value_request *req )
1234 {
1235     fprintf( stderr, " hkey=%d,", req->hkey );
1236     fprintf( stderr, " name=" );
1237     cur_pos += dump_varargs_unicode_str( req );
1238 }
1239
1240 static void dump_load_registry_request( const struct load_registry_request *req )
1241 {
1242     fprintf( stderr, " hkey=%d,", req->hkey );
1243     fprintf( stderr, " file=%d,", req->file );
1244     fprintf( stderr, " name=" );
1245     cur_pos += dump_varargs_unicode_str( req );
1246 }
1247
1248 static void dump_save_registry_request( const struct save_registry_request *req )
1249 {
1250     fprintf( stderr, " hkey=%d,", req->hkey );
1251     fprintf( stderr, " file=%d", req->file );
1252 }
1253
1254 static void dump_save_registry_atexit_request( const struct save_registry_atexit_request *req )
1255 {
1256     fprintf( stderr, " hkey=%d,", req->hkey );
1257     fprintf( stderr, " file=" );
1258     cur_pos += dump_varargs_string( req );
1259 }
1260
1261 static void dump_set_registry_levels_request( const struct set_registry_levels_request *req )
1262 {
1263     fprintf( stderr, " current=%d,", req->current );
1264     fprintf( stderr, " saving=%d,", req->saving );
1265     fprintf( stderr, " period=%d", req->period );
1266 }
1267
1268 static void dump_create_timer_request( const struct create_timer_request *req )
1269 {
1270     fprintf( stderr, " inherit=%d,", req->inherit );
1271     fprintf( stderr, " manual=%d,", req->manual );
1272     fprintf( stderr, " name=" );
1273     cur_pos += dump_varargs_unicode_str( req );
1274 }
1275
1276 static void dump_create_timer_reply( const struct create_timer_request *req )
1277 {
1278     fprintf( stderr, " handle=%d", req->handle );
1279 }
1280
1281 static void dump_open_timer_request( const struct open_timer_request *req )
1282 {
1283     fprintf( stderr, " access=%08x,", req->access );
1284     fprintf( stderr, " inherit=%d,", req->inherit );
1285     fprintf( stderr, " name=" );
1286     cur_pos += dump_varargs_unicode_str( req );
1287 }
1288
1289 static void dump_open_timer_reply( const struct open_timer_request *req )
1290 {
1291     fprintf( stderr, " handle=%d", req->handle );
1292 }
1293
1294 static void dump_set_timer_request( const struct set_timer_request *req )
1295 {
1296     fprintf( stderr, " handle=%d,", req->handle );
1297     fprintf( stderr, " sec=%d,", req->sec );
1298     fprintf( stderr, " usec=%d,", req->usec );
1299     fprintf( stderr, " period=%d,", req->period );
1300     fprintf( stderr, " callback=%p,", req->callback );
1301     fprintf( stderr, " arg=%p", req->arg );
1302 }
1303
1304 static void dump_cancel_timer_request( const struct cancel_timer_request *req )
1305 {
1306     fprintf( stderr, " handle=%d", req->handle );
1307 }
1308
1309 static void dump_get_thread_context_request( const struct get_thread_context_request *req )
1310 {
1311     fprintf( stderr, " handle=%d,", req->handle );
1312     fprintf( stderr, " flags=%08x", req->flags );
1313 }
1314
1315 static void dump_get_thread_context_reply( const struct get_thread_context_request *req )
1316 {
1317     fprintf( stderr, " context=" );
1318     cur_pos += dump_varargs_context( req );
1319 }
1320
1321 static void dump_set_thread_context_request( const struct set_thread_context_request *req )
1322 {
1323     fprintf( stderr, " handle=%d,", req->handle );
1324     fprintf( stderr, " flags=%08x,", req->flags );
1325     fprintf( stderr, " context=" );
1326     cur_pos += dump_varargs_context( req );
1327 }
1328
1329 static void dump_get_selector_entry_request( const struct get_selector_entry_request *req )
1330 {
1331     fprintf( stderr, " handle=%d,", req->handle );
1332     fprintf( stderr, " entry=%d", req->entry );
1333 }
1334
1335 static void dump_get_selector_entry_reply( const struct get_selector_entry_request *req )
1336 {
1337     fprintf( stderr, " base=%08x,", req->base );
1338     fprintf( stderr, " limit=%08x,", req->limit );
1339     fprintf( stderr, " flags=%02x", req->flags );
1340 }
1341
1342 static void dump_add_atom_request( const struct add_atom_request *req )
1343 {
1344     fprintf( stderr, " local=%d,", req->local );
1345     fprintf( stderr, " name=" );
1346     cur_pos += dump_varargs_unicode_str( req );
1347 }
1348
1349 static void dump_add_atom_reply( const struct add_atom_request *req )
1350 {
1351     fprintf( stderr, " atom=%d", req->atom );
1352 }
1353
1354 static void dump_delete_atom_request( const struct delete_atom_request *req )
1355 {
1356     fprintf( stderr, " atom=%d,", req->atom );
1357     fprintf( stderr, " local=%d", req->local );
1358 }
1359
1360 static void dump_find_atom_request( const struct find_atom_request *req )
1361 {
1362     fprintf( stderr, " local=%d,", req->local );
1363     fprintf( stderr, " name=" );
1364     cur_pos += dump_varargs_unicode_str( req );
1365 }
1366
1367 static void dump_find_atom_reply( const struct find_atom_request *req )
1368 {
1369     fprintf( stderr, " atom=%d", req->atom );
1370 }
1371
1372 static void dump_get_atom_name_request( const struct get_atom_name_request *req )
1373 {
1374     fprintf( stderr, " atom=%d,", req->atom );
1375     fprintf( stderr, " local=%d", req->local );
1376 }
1377
1378 static void dump_get_atom_name_reply( const struct get_atom_name_request *req )
1379 {
1380     fprintf( stderr, " count=%d,", req->count );
1381     fprintf( stderr, " name=" );
1382     cur_pos += dump_varargs_unicode_str( req );
1383 }
1384
1385 static void dump_init_atom_table_request( const struct init_atom_table_request *req )
1386 {
1387     fprintf( stderr, " entries=%d", req->entries );
1388 }
1389
1390 static void dump_get_msg_queue_request( const struct get_msg_queue_request *req )
1391 {
1392 }
1393
1394 static void dump_get_msg_queue_reply( const struct get_msg_queue_request *req )
1395 {
1396     fprintf( stderr, " handle=%d", req->handle );
1397 }
1398
1399 static void dump_wake_queue_request( const struct wake_queue_request *req )
1400 {
1401     fprintf( stderr, " handle=%d,", req->handle );
1402     fprintf( stderr, " bits=%08x", req->bits );
1403 }
1404
1405 static void dump_wait_input_idle_request( const struct wait_input_idle_request *req )
1406 {
1407     fprintf( stderr, " handle=%d,", req->handle );
1408     fprintf( stderr, " timeout=%d", req->timeout );
1409 }
1410
1411 static void dump_wait_input_idle_reply( const struct wait_input_idle_request *req )
1412 {
1413     fprintf( stderr, " event=%d", req->event );
1414 }
1415
1416 static void dump_create_serial_request( const struct create_serial_request *req )
1417 {
1418     fprintf( stderr, " access=%08x,", req->access );
1419     fprintf( stderr, " inherit=%d,", req->inherit );
1420     fprintf( stderr, " sharing=%08x,", req->sharing );
1421     fprintf( stderr, " name=" );
1422     cur_pos += dump_varargs_string( req );
1423 }
1424
1425 static void dump_create_serial_reply( const struct create_serial_request *req )
1426 {
1427     fprintf( stderr, " handle=%d", req->handle );
1428 }
1429
1430 static void dump_get_serial_info_request( const struct get_serial_info_request *req )
1431 {
1432     fprintf( stderr, " handle=%d", req->handle );
1433 }
1434
1435 static void dump_get_serial_info_reply( const struct get_serial_info_request *req )
1436 {
1437     fprintf( stderr, " readinterval=%08x,", req->readinterval );
1438     fprintf( stderr, " readconst=%08x,", req->readconst );
1439     fprintf( stderr, " readmult=%08x,", req->readmult );
1440     fprintf( stderr, " writeconst=%08x,", req->writeconst );
1441     fprintf( stderr, " writemult=%08x,", req->writemult );
1442     fprintf( stderr, " eventmask=%08x,", req->eventmask );
1443     fprintf( stderr, " commerror=%08x", req->commerror );
1444 }
1445
1446 static void dump_set_serial_info_request( const struct set_serial_info_request *req )
1447 {
1448     fprintf( stderr, " handle=%d,", req->handle );
1449     fprintf( stderr, " flags=%d,", req->flags );
1450     fprintf( stderr, " readinterval=%08x,", req->readinterval );
1451     fprintf( stderr, " readconst=%08x,", req->readconst );
1452     fprintf( stderr, " readmult=%08x,", req->readmult );
1453     fprintf( stderr, " writeconst=%08x,", req->writeconst );
1454     fprintf( stderr, " writemult=%08x,", req->writemult );
1455     fprintf( stderr, " eventmask=%08x,", req->eventmask );
1456     fprintf( stderr, " commerror=%08x", req->commerror );
1457 }
1458
1459 static void dump_create_async_request( const struct create_async_request *req )
1460 {
1461     fprintf( stderr, " file_handle=%d,", req->file_handle );
1462     fprintf( stderr, " overlapped=%p,", req->overlapped );
1463     fprintf( stderr, " buffer=%p,", req->buffer );
1464     fprintf( stderr, " count=%d,", req->count );
1465     fprintf( stderr, " func=%p,", req->func );
1466     fprintf( stderr, " type=%d", req->type );
1467 }
1468
1469 static void dump_create_async_reply( const struct create_async_request *req )
1470 {
1471     fprintf( stderr, " ov_handle=%d", req->ov_handle );
1472 }
1473
1474 static void dump_async_result_request( const struct async_result_request *req )
1475 {
1476     fprintf( stderr, " ov_handle=%d,", req->ov_handle );
1477     fprintf( stderr, " result=%d", req->result );
1478 }
1479
1480 static const dump_func req_dumpers[REQ_NB_REQUESTS] = {
1481     (dump_func)dump_new_process_request,
1482     (dump_func)dump_wait_process_request,
1483     (dump_func)dump_new_thread_request,
1484     (dump_func)dump_boot_done_request,
1485     (dump_func)dump_init_process_request,
1486     (dump_func)dump_init_process_done_request,
1487     (dump_func)dump_init_thread_request,
1488     (dump_func)dump_get_thread_buffer_request,
1489     (dump_func)dump_terminate_process_request,
1490     (dump_func)dump_terminate_thread_request,
1491     (dump_func)dump_get_process_info_request,
1492     (dump_func)dump_set_process_info_request,
1493     (dump_func)dump_get_thread_info_request,
1494     (dump_func)dump_set_thread_info_request,
1495     (dump_func)dump_suspend_thread_request,
1496     (dump_func)dump_resume_thread_request,
1497     (dump_func)dump_load_dll_request,
1498     (dump_func)dump_unload_dll_request,
1499     (dump_func)dump_queue_apc_request,
1500     (dump_func)dump_get_apc_request,
1501     (dump_func)dump_close_handle_request,
1502     (dump_func)dump_get_handle_info_request,
1503     (dump_func)dump_set_handle_info_request,
1504     (dump_func)dump_dup_handle_request,
1505     (dump_func)dump_open_process_request,
1506     (dump_func)dump_select_request,
1507     (dump_func)dump_create_event_request,
1508     (dump_func)dump_event_op_request,
1509     (dump_func)dump_open_event_request,
1510     (dump_func)dump_create_mutex_request,
1511     (dump_func)dump_release_mutex_request,
1512     (dump_func)dump_open_mutex_request,
1513     (dump_func)dump_create_semaphore_request,
1514     (dump_func)dump_release_semaphore_request,
1515     (dump_func)dump_open_semaphore_request,
1516     (dump_func)dump_create_file_request,
1517     (dump_func)dump_alloc_file_handle_request,
1518     (dump_func)dump_get_read_fd_request,
1519     (dump_func)dump_get_write_fd_request,
1520     (dump_func)dump_set_file_pointer_request,
1521     (dump_func)dump_truncate_file_request,
1522     (dump_func)dump_set_file_time_request,
1523     (dump_func)dump_flush_file_request,
1524     (dump_func)dump_get_file_info_request,
1525     (dump_func)dump_lock_file_request,
1526     (dump_func)dump_unlock_file_request,
1527     (dump_func)dump_create_pipe_request,
1528     (dump_func)dump_create_socket_request,
1529     (dump_func)dump_accept_socket_request,
1530     (dump_func)dump_set_socket_event_request,
1531     (dump_func)dump_get_socket_event_request,
1532     (dump_func)dump_enable_socket_event_request,
1533     (dump_func)dump_alloc_console_request,
1534     (dump_func)dump_free_console_request,
1535     (dump_func)dump_open_console_request,
1536     (dump_func)dump_set_console_fd_request,
1537     (dump_func)dump_get_console_mode_request,
1538     (dump_func)dump_set_console_mode_request,
1539     (dump_func)dump_set_console_info_request,
1540     (dump_func)dump_get_console_info_request,
1541     (dump_func)dump_write_console_input_request,
1542     (dump_func)dump_read_console_input_request,
1543     (dump_func)dump_create_change_notification_request,
1544     (dump_func)dump_create_mapping_request,
1545     (dump_func)dump_open_mapping_request,
1546     (dump_func)dump_get_mapping_info_request,
1547     (dump_func)dump_create_device_request,
1548     (dump_func)dump_create_snapshot_request,
1549     (dump_func)dump_next_process_request,
1550     (dump_func)dump_next_thread_request,
1551     (dump_func)dump_next_module_request,
1552     (dump_func)dump_wait_debug_event_request,
1553     (dump_func)dump_exception_event_request,
1554     (dump_func)dump_output_debug_string_request,
1555     (dump_func)dump_continue_debug_event_request,
1556     (dump_func)dump_debug_process_request,
1557     (dump_func)dump_read_process_memory_request,
1558     (dump_func)dump_write_process_memory_request,
1559     (dump_func)dump_create_key_request,
1560     (dump_func)dump_open_key_request,
1561     (dump_func)dump_delete_key_request,
1562     (dump_func)dump_enum_key_request,
1563     (dump_func)dump_set_key_value_request,
1564     (dump_func)dump_get_key_value_request,
1565     (dump_func)dump_enum_key_value_request,
1566     (dump_func)dump_delete_key_value_request,
1567     (dump_func)dump_load_registry_request,
1568     (dump_func)dump_save_registry_request,
1569     (dump_func)dump_save_registry_atexit_request,
1570     (dump_func)dump_set_registry_levels_request,
1571     (dump_func)dump_create_timer_request,
1572     (dump_func)dump_open_timer_request,
1573     (dump_func)dump_set_timer_request,
1574     (dump_func)dump_cancel_timer_request,
1575     (dump_func)dump_get_thread_context_request,
1576     (dump_func)dump_set_thread_context_request,
1577     (dump_func)dump_get_selector_entry_request,
1578     (dump_func)dump_add_atom_request,
1579     (dump_func)dump_delete_atom_request,
1580     (dump_func)dump_find_atom_request,
1581     (dump_func)dump_get_atom_name_request,
1582     (dump_func)dump_init_atom_table_request,
1583     (dump_func)dump_get_msg_queue_request,
1584     (dump_func)dump_wake_queue_request,
1585     (dump_func)dump_wait_input_idle_request,
1586     (dump_func)dump_create_serial_request,
1587     (dump_func)dump_get_serial_info_request,
1588     (dump_func)dump_set_serial_info_request,
1589     (dump_func)dump_create_async_request,
1590     (dump_func)dump_async_result_request,
1591 };
1592
1593 static const dump_func reply_dumpers[REQ_NB_REQUESTS] = {
1594     (dump_func)0,
1595     (dump_func)dump_wait_process_reply,
1596     (dump_func)dump_new_thread_reply,
1597     (dump_func)0,
1598     (dump_func)dump_init_process_reply,
1599     (dump_func)dump_init_process_done_reply,
1600     (dump_func)0,
1601     (dump_func)dump_get_thread_buffer_reply,
1602     (dump_func)dump_terminate_process_reply,
1603     (dump_func)dump_terminate_thread_reply,
1604     (dump_func)dump_get_process_info_reply,
1605     (dump_func)0,
1606     (dump_func)dump_get_thread_info_reply,
1607     (dump_func)0,
1608     (dump_func)dump_suspend_thread_reply,
1609     (dump_func)dump_resume_thread_reply,
1610     (dump_func)0,
1611     (dump_func)0,
1612     (dump_func)0,
1613     (dump_func)dump_get_apc_reply,
1614     (dump_func)0,
1615     (dump_func)dump_get_handle_info_reply,
1616     (dump_func)0,
1617     (dump_func)dump_dup_handle_reply,
1618     (dump_func)dump_open_process_reply,
1619     (dump_func)dump_select_reply,
1620     (dump_func)dump_create_event_reply,
1621     (dump_func)0,
1622     (dump_func)dump_open_event_reply,
1623     (dump_func)dump_create_mutex_reply,
1624     (dump_func)0,
1625     (dump_func)dump_open_mutex_reply,
1626     (dump_func)dump_create_semaphore_reply,
1627     (dump_func)dump_release_semaphore_reply,
1628     (dump_func)dump_open_semaphore_reply,
1629     (dump_func)dump_create_file_reply,
1630     (dump_func)dump_alloc_file_handle_reply,
1631     (dump_func)0,
1632     (dump_func)0,
1633     (dump_func)dump_set_file_pointer_reply,
1634     (dump_func)0,
1635     (dump_func)0,
1636     (dump_func)0,
1637     (dump_func)dump_get_file_info_reply,
1638     (dump_func)0,
1639     (dump_func)0,
1640     (dump_func)dump_create_pipe_reply,
1641     (dump_func)dump_create_socket_reply,
1642     (dump_func)dump_accept_socket_reply,
1643     (dump_func)0,
1644     (dump_func)dump_get_socket_event_reply,
1645     (dump_func)0,
1646     (dump_func)dump_alloc_console_reply,
1647     (dump_func)0,
1648     (dump_func)dump_open_console_reply,
1649     (dump_func)0,
1650     (dump_func)dump_get_console_mode_reply,
1651     (dump_func)0,
1652     (dump_func)0,
1653     (dump_func)dump_get_console_info_reply,
1654     (dump_func)dump_write_console_input_reply,
1655     (dump_func)dump_read_console_input_reply,
1656     (dump_func)dump_create_change_notification_reply,
1657     (dump_func)dump_create_mapping_reply,
1658     (dump_func)dump_open_mapping_reply,
1659     (dump_func)dump_get_mapping_info_reply,
1660     (dump_func)dump_create_device_reply,
1661     (dump_func)dump_create_snapshot_reply,
1662     (dump_func)dump_next_process_reply,
1663     (dump_func)dump_next_thread_reply,
1664     (dump_func)dump_next_module_reply,
1665     (dump_func)dump_wait_debug_event_reply,
1666     (dump_func)dump_exception_event_reply,
1667     (dump_func)0,
1668     (dump_func)0,
1669     (dump_func)0,
1670     (dump_func)dump_read_process_memory_reply,
1671     (dump_func)0,
1672     (dump_func)dump_create_key_reply,
1673     (dump_func)dump_open_key_reply,
1674     (dump_func)0,
1675     (dump_func)dump_enum_key_reply,
1676     (dump_func)0,
1677     (dump_func)dump_get_key_value_reply,
1678     (dump_func)dump_enum_key_value_reply,
1679     (dump_func)0,
1680     (dump_func)0,
1681     (dump_func)0,
1682     (dump_func)0,
1683     (dump_func)0,
1684     (dump_func)dump_create_timer_reply,
1685     (dump_func)dump_open_timer_reply,
1686     (dump_func)0,
1687     (dump_func)0,
1688     (dump_func)dump_get_thread_context_reply,
1689     (dump_func)0,
1690     (dump_func)dump_get_selector_entry_reply,
1691     (dump_func)dump_add_atom_reply,
1692     (dump_func)0,
1693     (dump_func)dump_find_atom_reply,
1694     (dump_func)dump_get_atom_name_reply,
1695     (dump_func)0,
1696     (dump_func)dump_get_msg_queue_reply,
1697     (dump_func)0,
1698     (dump_func)dump_wait_input_idle_reply,
1699     (dump_func)dump_create_serial_reply,
1700     (dump_func)dump_get_serial_info_reply,
1701     (dump_func)0,
1702     (dump_func)dump_create_async_reply,
1703     (dump_func)0,
1704 };
1705
1706 static const char * const req_names[REQ_NB_REQUESTS] = {
1707     "new_process",
1708     "wait_process",
1709     "new_thread",
1710     "boot_done",
1711     "init_process",
1712     "init_process_done",
1713     "init_thread",
1714     "get_thread_buffer",
1715     "terminate_process",
1716     "terminate_thread",
1717     "get_process_info",
1718     "set_process_info",
1719     "get_thread_info",
1720     "set_thread_info",
1721     "suspend_thread",
1722     "resume_thread",
1723     "load_dll",
1724     "unload_dll",
1725     "queue_apc",
1726     "get_apc",
1727     "close_handle",
1728     "get_handle_info",
1729     "set_handle_info",
1730     "dup_handle",
1731     "open_process",
1732     "select",
1733     "create_event",
1734     "event_op",
1735     "open_event",
1736     "create_mutex",
1737     "release_mutex",
1738     "open_mutex",
1739     "create_semaphore",
1740     "release_semaphore",
1741     "open_semaphore",
1742     "create_file",
1743     "alloc_file_handle",
1744     "get_read_fd",
1745     "get_write_fd",
1746     "set_file_pointer",
1747     "truncate_file",
1748     "set_file_time",
1749     "flush_file",
1750     "get_file_info",
1751     "lock_file",
1752     "unlock_file",
1753     "create_pipe",
1754     "create_socket",
1755     "accept_socket",
1756     "set_socket_event",
1757     "get_socket_event",
1758     "enable_socket_event",
1759     "alloc_console",
1760     "free_console",
1761     "open_console",
1762     "set_console_fd",
1763     "get_console_mode",
1764     "set_console_mode",
1765     "set_console_info",
1766     "get_console_info",
1767     "write_console_input",
1768     "read_console_input",
1769     "create_change_notification",
1770     "create_mapping",
1771     "open_mapping",
1772     "get_mapping_info",
1773     "create_device",
1774     "create_snapshot",
1775     "next_process",
1776     "next_thread",
1777     "next_module",
1778     "wait_debug_event",
1779     "exception_event",
1780     "output_debug_string",
1781     "continue_debug_event",
1782     "debug_process",
1783     "read_process_memory",
1784     "write_process_memory",
1785     "create_key",
1786     "open_key",
1787     "delete_key",
1788     "enum_key",
1789     "set_key_value",
1790     "get_key_value",
1791     "enum_key_value",
1792     "delete_key_value",
1793     "load_registry",
1794     "save_registry",
1795     "save_registry_atexit",
1796     "set_registry_levels",
1797     "create_timer",
1798     "open_timer",
1799     "set_timer",
1800     "cancel_timer",
1801     "get_thread_context",
1802     "set_thread_context",
1803     "get_selector_entry",
1804     "add_atom",
1805     "delete_atom",
1806     "find_atom",
1807     "get_atom_name",
1808     "init_atom_table",
1809     "get_msg_queue",
1810     "wake_queue",
1811     "wait_input_idle",
1812     "create_serial",
1813     "get_serial_info",
1814     "set_serial_info",
1815     "create_async",
1816     "async_result",
1817 };
1818
1819 /* ### make_requests end ### */
1820 /* Everything above this line is generated automatically by tools/make_requests */
1821
1822 void trace_request( enum request req )
1823 {
1824     cur_pos = 0;
1825     current->last_req = req;
1826     if (req < REQ_NB_REQUESTS)
1827     {
1828         fprintf( stderr, "%08x: %s(", (unsigned int)current, req_names[req] );
1829         cur_pos = 0;
1830         req_dumpers[req]( current->buffer );
1831     }
1832     else
1833         fprintf( stderr, "%08x: %d(", (unsigned int)current, req );
1834     if (current->pass_fd != -1) fprintf( stderr, " ) fd=%d\n", current->pass_fd );
1835     else fprintf( stderr, " )\n" );
1836 }
1837
1838 void trace_reply( struct thread *thread )
1839 {
1840     fprintf( stderr, "%08x: %s() = %x",
1841              (unsigned int)thread, req_names[thread->last_req], thread->error );
1842     if (reply_dumpers[thread->last_req])
1843     {
1844         fprintf( stderr, " {" );
1845         cur_pos = 0;
1846         reply_dumpers[thread->last_req]( thread->buffer );
1847         fprintf( stderr, " }" );
1848     }
1849     if (thread->pass_fd != -1) fprintf( stderr, " fd=%d\n", thread->pass_fd );
1850     else fprintf( stderr, "\n" );
1851 }