diff --git a/include/wine/server_protocol.h b/include/wine/server_protocol.h index 1889947c905..98f9d99483e 100644 --- a/include/wine/server_protocol.h +++ b/include/wine/server_protocol.h @@ -26,6 +26,8 @@ typedef unsigned __int64 lparam_t; typedef unsigned __int64 apc_param_t; typedef unsigned __int64 mem_size_t; typedef unsigned __int64 file_pos_t; +typedef void *client_ptr_t; +typedef client_ptr_t mod_handle_t; struct request_header { @@ -68,7 +70,7 @@ struct debug_event_create_process obj_handle_t file; obj_handle_t process; obj_handle_t thread; - void *base; + mod_handle_t base; int dbg_offset; int dbg_size; void *teb; @@ -83,7 +85,7 @@ struct debug_event_exit struct debug_event_load_dll { obj_handle_t handle; - void *base; + mod_handle_t base; int dbg_offset; int dbg_size; void *name; @@ -91,7 +93,7 @@ struct debug_event_load_dll }; struct debug_event_unload_dll { - void *base; + mod_handle_t base; }; struct debug_event_output_string { @@ -530,7 +532,7 @@ struct get_startup_info_reply struct init_process_done_request { struct request_header __header; - void* module; + mod_handle_t module; void* entry; int gui; }; @@ -677,7 +679,7 @@ struct get_dll_info_request { struct request_header __header; obj_handle_t handle; - void* base_address; + mod_handle_t base_address; }; struct get_dll_info_reply { @@ -720,7 +722,7 @@ struct load_dll_request { struct request_header __header; obj_handle_t handle; - void* base; + mod_handle_t base; void* name; data_size_t size; int dbg_offset; @@ -737,7 +739,7 @@ struct load_dll_reply struct unload_dll_request { struct request_header __header; - void* base; + mod_handle_t base; }; struct unload_dll_reply { @@ -2777,7 +2779,7 @@ struct create_window_request user_handle_t parent; user_handle_t owner; atom_t atom; - void* instance; + mod_handle_t instance; /* VARARG(class,unicode_str); */ }; struct create_window_reply @@ -2860,7 +2862,7 @@ struct set_window_info_request unsigned int ex_style; unsigned int id; int is_unicode; - void* instance; + mod_handle_t instance; lparam_t user_data; int extra_offset; data_size_t extra_size; @@ -2872,7 +2874,7 @@ struct set_window_info_reply unsigned int old_style; unsigned int old_ex_style; unsigned int old_id; - void* old_instance; + mod_handle_t old_instance; lparam_t old_user_data; lparam_t old_extra_value; }; @@ -3656,7 +3658,7 @@ struct create_class_request int local; atom_t atom; unsigned int style; - void* instance; + mod_handle_t instance; int extra; int win_extra; void* client_ptr; @@ -3674,7 +3676,7 @@ struct destroy_class_request { struct request_header __header; atom_t atom; - void* instance; + mod_handle_t instance; /* VARARG(name,unicode_str); */ }; struct destroy_class_reply @@ -3693,7 +3695,7 @@ struct set_class_info_request atom_t atom; unsigned int style; int win_extra; - void* instance; + mod_handle_t instance; int extra_offset; data_size_t extra_size; lparam_t extra_value; @@ -3705,7 +3707,7 @@ struct set_class_info_reply unsigned int old_style; int old_extra; int old_win_extra; - void* old_instance; + mod_handle_t old_instance; lparam_t old_extra_value; }; #define SET_CLASS_ATOM 0x0001 diff --git a/server/class.c b/server/class.c index 5c30738dc82..1833a285c5c 100644 --- a/server/class.c +++ b/server/class.c @@ -46,7 +46,7 @@ struct window_class int count; /* reference count */ int local; /* local class? */ atom_t atom; /* class atom */ - void *instance; /* module instance */ + mod_handle_t instance; /* module instance */ unsigned int style; /* class style */ int win_extra; /* number of window extra bytes */ void *client_ptr; /* pointer to class in client address space */ @@ -91,7 +91,7 @@ void destroy_process_classes( struct process *process ) } } -static struct window_class *find_class( struct process *process, atom_t atom, void *instance ) +static struct window_class *find_class( struct process *process, atom_t atom, mod_handle_t instance ) { struct list *ptr; @@ -105,7 +105,7 @@ static struct window_class *find_class( struct process *process, atom_t atom, vo } struct window_class *grab_class( struct process *process, atom_t atom, - void *instance, int *extra_bytes ) + mod_handle_t instance, int *extra_bytes ) { struct window_class *class = find_class( process, atom, instance ); if (class) diff --git a/server/debugger.c b/server/debugger.c index 37ddd689c69..f663e162c1e 100644 --- a/server/debugger.c +++ b/server/debugger.c @@ -205,7 +205,8 @@ static int fill_load_dll_event( struct debug_event *event, void *arg ) static int fill_unload_dll_event( struct debug_event *event, void *arg ) { - event->data.info.unload_dll.base = arg; + mod_handle_t *base = arg; + event->data.info.unload_dll.base = *base; return 1; } diff --git a/server/process.c b/server/process.c index 136389f0893..69e83c2fb20 100644 --- a/server/process.c +++ b/server/process.c @@ -505,7 +505,7 @@ struct process *get_process_from_handle( obj_handle_t handle, unsigned int acces } /* find a dll from its base address */ -static inline struct process_dll *find_process_dll( struct process *process, void *base ) +static inline struct process_dll *find_process_dll( struct process *process, mod_handle_t base ) { struct process_dll *dll; @@ -518,7 +518,8 @@ static inline struct process_dll *find_process_dll( struct process *process, voi /* add a dll to a process list */ static struct process_dll *process_load_dll( struct process *process, struct file *file, - void *base, const WCHAR *filename, data_size_t name_len ) + mod_handle_t base, const WCHAR *filename, + data_size_t name_len ) { struct process_dll *dll; @@ -547,7 +548,7 @@ static struct process_dll *process_load_dll( struct process *process, struct fil } /* remove a dll from a process list */ -static void process_unload_dll( struct process *process, void *base ) +static void process_unload_dll( struct process *process, mod_handle_t base ) { struct process_dll *dll = find_process_dll( process, base ); @@ -557,7 +558,7 @@ static void process_unload_dll( struct process *process, void *base ) free( dll->filename ); list_remove( &dll->entry ); free( dll ); - generate_debug_event( current, UNLOAD_DLL_DEBUG_EVENT, base ); + generate_debug_event( current, UNLOAD_DLL_DEBUG_EVENT, &base ); } else set_error( STATUS_INVALID_PARAMETER ); } diff --git a/server/process.h b/server/process.h index c2bb8c338e4..1f9895864e0 100644 --- a/server/process.h +++ b/server/process.h @@ -37,7 +37,7 @@ struct process_dll { struct list entry; /* entry in per-process dll list */ struct file *file; /* dll file */ - void *base; /* dll base address (in process addr space) */ + mod_handle_t base; /* dll base address (in process addr space) */ void *name; /* ptr to ptr to name (in process addr space) */ data_size_t size; /* dll size */ int dbg_offset; /* debug info offset */ diff --git a/server/protocol.def b/server/protocol.def index a4c154c333b..501eca8c170 100644 --- a/server/protocol.def +++ b/server/protocol.def @@ -42,6 +42,8 @@ typedef unsigned __int64 lparam_t; typedef unsigned __int64 apc_param_t; typedef unsigned __int64 mem_size_t; typedef unsigned __int64 file_pos_t; +typedef void *client_ptr_t; +typedef client_ptr_t mod_handle_t; struct request_header { @@ -84,7 +86,7 @@ struct debug_event_create_process obj_handle_t file; /* handle to the process exe file */ obj_handle_t process; /* handle to the new process */ obj_handle_t thread; /* handle to the new thread */ - void *base; /* base of executable image */ + mod_handle_t base; /* base of executable image */ int dbg_offset; /* offset of debug info in file */ int dbg_size; /* size of debug info */ void *teb; /* thread teb (in debugged process address space) */ @@ -99,7 +101,7 @@ struct debug_event_exit struct debug_event_load_dll { obj_handle_t handle; /* file handle for the dll */ - void *base; /* base address of the dll */ + mod_handle_t base; /* base address of the dll */ int dbg_offset; /* offset of debug info in file */ int dbg_size; /* size of debug info */ void *name; /* image name (optional) */ @@ -107,7 +109,7 @@ struct debug_event_load_dll }; struct debug_event_unload_dll { - void *base; /* base address of the dll */ + mod_handle_t base; /* base address of the dll */ }; struct debug_event_output_string { @@ -524,7 +526,7 @@ typedef union /* Signal the end of the process initialization */ @REQ(init_process_done) - void* module; /* main module base address */ + mod_handle_t module; /* main module base address */ void* entry; /* process entry point */ int gui; /* is it a GUI process? */ @END @@ -628,7 +630,7 @@ typedef union /* Retrieve information about a module */ @REQ(get_dll_info) obj_handle_t handle; /* process handle */ - void* base_address; /* base address of module */ + mod_handle_t base_address; /* base address of module */ @REPLY void* entry_point; data_size_t size; /* module size */ @@ -656,7 +658,7 @@ typedef union /* Notify the server that a dll has been loaded */ @REQ(load_dll) obj_handle_t handle; /* file handle */ - void* base; /* base address */ + mod_handle_t base; /* base address */ void* name; /* ptr to ptr to name (in process addr space) */ data_size_t size; /* dll size */ int dbg_offset; /* debug info offset */ @@ -667,7 +669,7 @@ typedef union /* Notify the server that a dll is being unloaded */ @REQ(unload_dll) - void* base; /* base address */ + mod_handle_t base; /* base address */ @END @@ -2050,7 +2052,7 @@ enum message_type user_handle_t parent; /* parent window */ user_handle_t owner; /* owner window */ atom_t atom; /* class atom */ - void* instance; /* module instance */ + mod_handle_t instance; /* module instance */ VARARG(class,unicode_str); /* class name */ @REPLY user_handle_t handle; /* created window */ @@ -2107,7 +2109,7 @@ enum message_type unsigned int ex_style; /* window extended style */ unsigned int id; /* window id */ int is_unicode; /* ANSI or unicode */ - void* instance; /* creator instance */ + mod_handle_t instance; /* creator instance */ lparam_t user_data; /* user-specific data */ int extra_offset; /* offset to set in extra bytes */ data_size_t extra_size; /* size to set in extra bytes */ @@ -2116,7 +2118,7 @@ enum message_type unsigned int old_style; /* old window style */ unsigned int old_ex_style; /* old window extended style */ unsigned int old_id; /* old window id */ - void* old_instance; /* old creator instance */ + mod_handle_t old_instance; /* old creator instance */ lparam_t old_user_data; /* old user-specific data */ lparam_t old_extra_value; /* old value in extra bytes */ @END @@ -2641,7 +2643,7 @@ enum message_type int local; /* is it a local class? */ atom_t atom; /* class atom */ unsigned int style; /* class style */ - void* instance; /* module instance */ + mod_handle_t instance; /* module instance */ int extra; /* number of extra class bytes */ int win_extra; /* number of window extra bytes */ void* client_ptr; /* pointer to class in client address space */ @@ -2654,7 +2656,7 @@ enum message_type /* Destroy a window class */ @REQ(destroy_class) atom_t atom; /* class atom */ - void* instance; /* module instance */ + mod_handle_t instance; /* module instance */ VARARG(name,unicode_str); /* class name */ @REPLY void* client_ptr; /* pointer to class in client address space */ @@ -2668,7 +2670,7 @@ enum message_type atom_t atom; /* class atom */ unsigned int style; /* class style */ int win_extra; /* number of window extra bytes */ - void* instance; /* module instance */ + mod_handle_t instance; /* module instance */ int extra_offset; /* offset to set in extra bytes */ data_size_t extra_size; /* size to set in extra bytes */ lparam_t extra_value; /* value to set in extra bytes */ @@ -2677,7 +2679,7 @@ enum message_type unsigned int old_style; /* previous class style */ int old_extra; /* previous number of class extra bytes */ int old_win_extra; /* previous number of window extra bytes */ - void* old_instance; /* previous module instance */ + mod_handle_t old_instance; /* previous module instance */ lparam_t old_extra_value; /* old value in extra bytes */ @END #define SET_CLASS_ATOM 0x0001 diff --git a/server/user.h b/server/user.h index 72d08e6b368..d319410f165 100644 --- a/server/user.h +++ b/server/user.h @@ -143,7 +143,7 @@ extern struct window_class *get_window_class( user_handle_t window ); extern void destroy_process_classes( struct process *process ); extern struct window_class *grab_class( struct process *process, atom_t atom, - void *instance, int *extra_bytes ); + mod_handle_t instance, int *extra_bytes ); extern void release_class( struct window_class *class ); extern int is_desktop_class( struct window_class *class ); extern int is_hwnd_message_class( struct window_class *class ); diff --git a/server/window.c b/server/window.c index 8f57a7a84e3..1922baa1342 100644 --- a/server/window.c +++ b/server/window.c @@ -76,7 +76,7 @@ struct window unsigned int style; /* window style */ unsigned int ex_style; /* window extended style */ unsigned int id; /* window id */ - void* instance; /* creator instance */ + mod_handle_t instance; /* creator instance */ unsigned int is_unicode : 1; /* ANSI or unicode */ unsigned int is_linked : 1; /* is it linked into the parent z-order list? */ unsigned int is_layered : 1; /* has layered info been set? */ @@ -428,7 +428,7 @@ void close_desktop_window( struct desktop *desktop ) /* create a new window structure (note: the window is not linked in the window tree) */ static struct window *create_window( struct window *parent, struct window *owner, - atom_t atom, void *instance ) + atom_t atom, mod_handle_t instance ) { static const rectangle_t empty_rect; int extra_bytes; diff --git a/tools/make_requests b/tools/make_requests index 78fb1f74b97..d3886952f67 100755 --- a/tools/make_requests +++ b/tools/make_requests @@ -36,6 +36,7 @@ my %formats = "user_handle_t" => [ 4, 4, "%08x" ], "process_id_t" => [ 4, 4, "%04x" ], "thread_id_t" => [ 4, 4, "%04x" ], + "mod_handle_t" => [ 4, 4, "%p" ], "lparam_t" => [ 8, 8, "&dump_uint64" ], "apc_param_t" => [ 8, 8, "&dump_uint64" ], "file_pos_t" => [ 8, 8, "&dump_uint64" ],