diff --git a/include/wine/server_protocol.h b/include/wine/server_protocol.h index e45c7ad2bcb..df2eeaa4d4c 100644 --- a/include/wine/server_protocol.h +++ b/include/wine/server_protocol.h @@ -21,6 +21,7 @@ typedef unsigned short atom_t; typedef unsigned int process_id_t; typedef unsigned int thread_id_t; typedef unsigned int data_size_t; +typedef unsigned int ioctl_code_t; struct request_header { @@ -2668,7 +2669,7 @@ struct ioctl_request { struct request_header __header; obj_handle_t handle; - unsigned int code; + ioctl_code_t code; async_data_t async; /* VARARG(in_data,bytes); */ }; diff --git a/server/fd.c b/server/fd.c index 7f6c31c831c..d24eedc74a4 100644 --- a/server/fd.c +++ b/server/fd.c @@ -1855,7 +1855,7 @@ static void unmount_device( struct fd *device_fd ) } /* default ioctl() routine */ -void default_fd_ioctl( struct fd *fd, unsigned int code, const async_data_t *async, +void default_fd_ioctl( struct fd *fd, ioctl_code_t code, const async_data_t *async, const void *data, data_size_t size ) { switch(code) diff --git a/server/file.h b/server/file.h index 7109e753bfd..262a011e705 100644 --- a/server/file.h +++ b/server/file.h @@ -40,7 +40,7 @@ struct fd_ops /* get file information */ enum server_fd_type (*get_fd_type)(struct fd *fd); /* perform an ioctl on the file */ - void (*ioctl)(struct fd *fd, unsigned int code, const async_data_t *async, + void (*ioctl)(struct fd *fd, ioctl_code_t code, const async_data_t *async, const void *data, data_size_t size); /* queue an async operation */ void (*queue_async)(struct fd *, const async_data_t *data, int type, int count); @@ -77,7 +77,7 @@ extern void default_poll_event( struct fd *fd, int event ); extern struct async *fd_queue_async( struct fd *fd, const async_data_t *data, int type, int count ); extern void fd_async_wake_up( struct fd *fd, int type, unsigned int status ); extern void fd_reselect_async( struct fd *fd, struct async_queue *queue ); -extern void default_fd_ioctl( struct fd *fd, unsigned int code, const async_data_t *async, +extern void default_fd_ioctl( struct fd *fd, ioctl_code_t code, const async_data_t *async, const void *data, data_size_t size ); extern void default_fd_queue_async( struct fd *fd, const async_data_t *data, int type, int count ); extern void default_fd_reselect_async( struct fd *fd, struct async_queue *queue ); diff --git a/server/named_pipe.c b/server/named_pipe.c index aebbdd3fbb6..a6871b79c6c 100644 --- a/server/named_pipe.c +++ b/server/named_pipe.c @@ -139,7 +139,7 @@ static struct fd *pipe_server_get_fd( struct object *obj ); static void pipe_server_destroy( struct object *obj); static void pipe_server_flush( struct fd *fd, struct event **event ); static enum server_fd_type pipe_server_get_fd_type( struct fd *fd ); -static void pipe_server_ioctl( struct fd *fd, unsigned int code, const async_data_t *async, +static void pipe_server_ioctl( struct fd *fd, ioctl_code_t code, const async_data_t *async, const void *data, data_size_t size ); static const struct object_ops pipe_server_ops = @@ -565,7 +565,7 @@ static enum server_fd_type pipe_client_get_fd_type( struct fd *fd ) return FD_TYPE_PIPE; } -static void pipe_server_ioctl( struct fd *fd, unsigned int code, const async_data_t *async, +static void pipe_server_ioctl( struct fd *fd, ioctl_code_t code, const async_data_t *async, const void *data, data_size_t size ) { struct pipe_server *server = get_fd_user( fd ); diff --git a/server/protocol.def b/server/protocol.def index e9e3c1e5778..9aff9e64e79 100644 --- a/server/protocol.def +++ b/server/protocol.def @@ -37,6 +37,7 @@ typedef unsigned short atom_t; typedef unsigned int process_id_t; typedef unsigned int thread_id_t; typedef unsigned int data_size_t; +typedef unsigned int ioctl_code_t; struct request_header { @@ -1967,7 +1968,7 @@ enum message_type /* Perform an ioctl on a file */ @REQ(ioctl) obj_handle_t handle; /* handle to the device */ - unsigned int code; /* ioctl code */ + ioctl_code_t code; /* ioctl code */ async_data_t async; /* async I/O parameters */ VARARG(in_data,bytes); /* ioctl input data */ @REPLY diff --git a/server/trace.c b/server/trace.c index 44cf32effb1..59cdf1db13b 100644 --- a/server/trace.c +++ b/server/trace.c @@ -36,6 +36,7 @@ #include "winbase.h" #include "wincon.h" #include "winternl.h" +#include "winioctl.h" #include "file.h" #include "request.h" #include "unicode.h" @@ -82,6 +83,18 @@ static void dump_char_info( const char_info_t *info ) fprintf( stderr, "',%04x}", info->attr ); } +static void dump_ioctl_code( const ioctl_code_t *code ) +{ + switch(*code) + { +#define CASE(c) case c: fputs( #c, stderr ); break + CASE(FSCTL_DISMOUNT_VOLUME); + CASE(FSCTL_PIPE_DISCONNECT); + default: fprintf( stderr, "%08x", *code ); break; +#undef CASE + } +} + static void dump_apc_call( const apc_call_t *call ) { fputc( '{', stderr ); @@ -2391,7 +2404,9 @@ static void dump_cancel_async_request( const struct cancel_async_request *req ) static void dump_ioctl_request( const struct ioctl_request *req ) { fprintf( stderr, " handle=%p,", req->handle ); - fprintf( stderr, " code=%08x,", req->code ); + fprintf( stderr, " code=" ); + dump_ioctl_code( &req->code ); + fprintf( stderr, "," ); fprintf( stderr, " async=" ); dump_async_data( &req->async ); fprintf( stderr, "," ); diff --git a/tools/make_requests b/tools/make_requests index d0bb0a56ea4..e735de6d50e 100755 --- a/tools/make_requests +++ b/tools/make_requests @@ -46,6 +46,7 @@ my %formats = "apc_result_t" => "&dump_apc_result", "async_data_t" => "&dump_async_data", "luid_t" => "&dump_luid", + "ioctl_code_t" => "&dump_ioctl_code", ); my @requests = ();