server: Make module handles always 64-bit.

This commit is contained in:
Alexandre Julliard 2008-12-29 16:47:51 +01:00
parent cb2788efaf
commit f2c4e09e80
12 changed files with 92 additions and 55 deletions

View File

@ -86,7 +86,7 @@ BOOL WINAPI WaitForDebugEvent(
event->u.CreateProcessInfo.hFile = wine_server_ptr_handle( data.info.create_process.file );
event->u.CreateProcessInfo.hProcess = wine_server_ptr_handle( data.info.create_process.process );
event->u.CreateProcessInfo.hThread = wine_server_ptr_handle( data.info.create_process.thread );
event->u.CreateProcessInfo.lpBaseOfImage = data.info.create_process.base;
event->u.CreateProcessInfo.lpBaseOfImage = wine_server_get_ptr( data.info.create_process.base );
event->u.CreateProcessInfo.dwDebugInfoFileOffset = data.info.create_process.dbg_offset;
event->u.CreateProcessInfo.nDebugInfoSize = data.info.create_process.dbg_size;
event->u.CreateProcessInfo.lpThreadLocalBase = data.info.create_process.teb;
@ -102,14 +102,14 @@ BOOL WINAPI WaitForDebugEvent(
break;
case LOAD_DLL_DEBUG_EVENT:
event->u.LoadDll.hFile = wine_server_ptr_handle( data.info.load_dll.handle );
event->u.LoadDll.lpBaseOfDll = data.info.load_dll.base;
event->u.LoadDll.lpBaseOfDll = wine_server_get_ptr( data.info.load_dll.base );
event->u.LoadDll.dwDebugInfoFileOffset = data.info.load_dll.dbg_offset;
event->u.LoadDll.nDebugInfoSize = data.info.load_dll.dbg_size;
event->u.LoadDll.lpImageName = data.info.load_dll.name;
event->u.LoadDll.fUnicode = data.info.load_dll.unicode;
break;
case UNLOAD_DLL_DEBUG_EVENT:
event->u.UnloadDll.lpBaseOfDll = data.info.unload_dll.base;
event->u.UnloadDll.lpBaseOfDll = wine_server_get_ptr( data.info.unload_dll.base );
break;
case OUTPUT_DEBUG_STRING_EVENT:
event->u.DebugString.lpDebugStringData = data.info.output_string.string;

View File

@ -1447,7 +1447,7 @@ static void load_builtin_callback( void *module, const char *filename )
SERVER_START_REQ( load_dll )
{
req->handle = 0;
req->base = module;
req->base = wine_server_client_ptr( module );
req->size = nt->OptionalHeader.SizeOfImage;
req->dbg_offset = nt->FileHeader.PointerToSymbolTable;
req->dbg_size = nt->FileHeader.NumberOfSymbols;
@ -1529,7 +1529,7 @@ static NTSTATUS load_native_dll( LPCWSTR load_path, LPCWSTR name, HANDLE file,
SERVER_START_REQ( load_dll )
{
req->handle = wine_server_obj_handle( file );
req->base = module;
req->base = wine_server_client_ptr( module );
req->size = nt->OptionalHeader.SizeOfImage;
req->dbg_offset = nt->FileHeader.PointerToSymbolTable;
req->dbg_size = nt->FileHeader.NumberOfSymbols;
@ -2264,7 +2264,7 @@ static void free_modref( WINE_MODREF *wm )
SERVER_START_REQ( unload_dll )
{
req->base = wm->ldr.BaseAddress;
req->base = wine_server_client_ptr( wm->ldr.BaseAddress );
wine_server_call( req );
}
SERVER_END_REQ;

View File

@ -315,7 +315,7 @@ NTSTATUS WINAPI NtQueryInformationProcess(
UNICODE_STRING *image_file_name_str = ProcessInformation;
req->handle = wine_server_obj_handle( ProcessHandle );
req->base_address = NULL; /* main module */
req->base_address = 0; /* main module */
wine_server_set_reply( req, image_file_name_str ? image_file_name_str + 1 : NULL,
ProcessInformationLength > sizeof(UNICODE_STRING) ? ProcessInformationLength - sizeof(UNICODE_STRING) : 0 );
ret = wine_server_call( req );

View File

@ -986,7 +986,7 @@ NTSTATUS server_init_process_done(void)
/* Signal the parent process to continue */
SERVER_START_REQ( init_process_done )
{
req->module = peb->ImageBaseAddress;
req->module = wine_server_client_ptr( peb->ImageBaseAddress );
req->entry = (char *)peb->ImageBaseAddress + nt->OptionalHeader.AddressOfEntryPoint;
req->gui = (nt->OptionalHeader.Subsystem != IMAGE_SUBSYSTEM_WINDOWS_CUI);
status = wine_server_call( req );

View File

@ -146,7 +146,7 @@ static BOOL set_server_info( HWND hwnd, INT offset, LONG_PTR newval, UINT size )
break;
case GCLP_HMODULE:
req->flags = SET_CLASS_INSTANCE;
req->instance = (void *)newval;
req->instance = wine_server_client_ptr( (void *)newval );
break;
default:
assert( offset >= 0 );
@ -275,7 +275,7 @@ void CLASS_FreeModuleClasses( HMODULE16 hModule )
SERVER_START_REQ( destroy_class )
{
req->atom = class->atomName;
req->instance = class->hInstance;
req->instance = wine_server_client_ptr( class->hInstance );
ret = !wine_server_call_err( req );
}
SERVER_END_REQ;
@ -354,7 +354,7 @@ static CLASS *CLASS_RegisterClass( LPCWSTR name, HINSTANCE hInstance, BOOL local
{
req->local = local;
req->style = style;
req->instance = hInstance;
req->instance = wine_server_client_ptr( hInstance );
req->extra = classExtra;
req->win_extra = winExtra;
req->client_ptr = classPtr;
@ -625,7 +625,7 @@ BOOL WINAPI UnregisterClassW( LPCWSTR className, HINSTANCE hInstance )
SERVER_START_REQ( destroy_class )
{
req->instance = hInstance;
req->instance = wine_server_client_ptr( hInstance );
if (!(req->atom = get_int_atom_value(className)) && className)
wine_server_add_data( req, className, strlenW(className) * sizeof(WCHAR) );
if (!wine_server_call_err( req )) classPtr = reply->client_ptr;
@ -718,7 +718,7 @@ static ULONG_PTR CLASS_GetClassLong( HWND hwnd, INT offset, UINT size,
retvalue = reply->old_extra;
break;
case GCLP_HMODULE:
retvalue = (ULONG_PTR)reply->old_instance;
retvalue = (ULONG_PTR)wine_server_get_ptr( reply->old_instance );
break;
case GCW_ATOM:
retvalue = reply->old_atom;

View File

@ -112,7 +112,7 @@ static WND *create_window_handle( HWND parent, HWND owner, LPCWSTR name,
{
req->parent = wine_server_user_handle( parent );
req->owner = wine_server_user_handle( owner );
req->instance = instance;
req->instance = wine_server_client_ptr( instance );
if (!(req->atom = get_int_atom_value( name )) && name)
wine_server_add_data( req, name, strlenW(name)*sizeof(WCHAR) );
if (!wine_server_call_err( req ))
@ -1119,7 +1119,7 @@ static HWND WIN_CreateWindowEx( CREATESTRUCTA *cs, LPCWSTR className, UINT flags
req->flags = SET_WIN_STYLE | SET_WIN_EXSTYLE | SET_WIN_INSTANCE | SET_WIN_UNICODE;
req->style = wndPtr->dwStyle;
req->ex_style = wndPtr->dwExStyle;
req->instance = (void *)wndPtr->hInstance;
req->instance = wine_server_client_ptr( wndPtr->hInstance );
req->is_unicode = (wndPtr->flags & WIN_ISUNICODE) != 0;
req->extra_offset = -1;
wine_server_call( req );
@ -1885,7 +1885,7 @@ static LONG_PTR WIN_GetWindowLong( HWND hwnd, INT offset, UINT size, BOOL unicod
case GWL_STYLE: retvalue = reply->old_style; break;
case GWL_EXSTYLE: retvalue = reply->old_ex_style; break;
case GWLP_ID: retvalue = reply->old_id; break;
case GWLP_HINSTANCE: retvalue = (ULONG_PTR)reply->old_instance; break;
case GWLP_HINSTANCE: retvalue = (ULONG_PTR)wine_server_get_ptr( reply->old_instance ); break;
case GWLP_USERDATA: retvalue = reply->old_user_data; break;
default:
if (offset >= 0) retvalue = get_win_data( &reply->old_extra_value, size );
@ -2091,7 +2091,7 @@ LONG_PTR WIN_SetWindowLong( HWND hwnd, INT offset, UINT size, LONG_PTR newval, B
break;
case GWLP_HINSTANCE:
req->flags = SET_WIN_INSTANCE;
req->instance = (void *)newval;
req->instance = wine_server_client_ptr( (void *)newval );
break;
case GWLP_WNDPROC:
req->flags = SET_WIN_UNICODE;
@ -2125,7 +2125,7 @@ LONG_PTR WIN_SetWindowLong( HWND hwnd, INT offset, UINT size, LONG_PTR newval, B
break;
case GWLP_HINSTANCE:
wndPtr->hInstance = (HINSTANCE)newval;
retval = (ULONG_PTR)reply->old_instance;
retval = (ULONG_PTR)wine_server_get_ptr( reply->old_instance );
break;
case GWLP_WNDPROC:
break;

View File

@ -108,6 +108,18 @@ static inline HANDLE wine_server_ptr_handle( obj_handle_t handle )
return (HANDLE)(INT_PTR)(int)handle;
}
/* convert a client pointer to a server client_ptr_t */
static inline client_ptr_t wine_server_client_ptr( const void *ptr )
{
return (client_ptr_t)(ULONG_PTR)ptr;
}
/* convert a server client_ptr_t to a real pointer */
static inline void *wine_server_get_ptr( client_ptr_t ptr )
{
return (void *)(ULONG_PTR)ptr;
}
/* macros for server requests */

View File

@ -26,7 +26,7 @@ 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 unsigned __int64 client_ptr_t;
typedef client_ptr_t mod_handle_t;
struct request_header
@ -532,9 +532,9 @@ struct get_startup_info_reply
struct init_process_done_request
{
struct request_header __header;
int gui;
mod_handle_t module;
void* entry;
int gui;
};
struct init_process_done_reply
{
@ -2848,7 +2848,7 @@ struct get_window_info_reply
process_id_t pid;
thread_id_t tid;
atom_t atom;
int is_unicode;
short int is_unicode;
};
@ -2856,12 +2856,12 @@ struct get_window_info_reply
struct set_window_info_request
{
struct request_header __header;
unsigned int flags;
unsigned short flags;
short int is_unicode;
user_handle_t handle;
unsigned int style;
unsigned int ex_style;
unsigned int id;
int is_unicode;
mod_handle_t instance;
lparam_t user_data;
int extra_offset;
@ -2873,10 +2873,10 @@ struct set_window_info_reply
struct reply_header __header;
unsigned int old_style;
unsigned int old_ex_style;
unsigned int old_id;
mod_handle_t old_instance;
lparam_t old_user_data;
lparam_t old_extra_value;
unsigned int old_id;
};
#define SET_WIN_STYLE 0x01
#define SET_WIN_EXSTYLE 0x02
@ -5052,6 +5052,6 @@ union generic_reply
struct set_window_layered_info_reply set_window_layered_info_reply;
};
#define SERVER_PROTOCOL_VERSION 355
#define SERVER_PROTOCOL_VERSION 356
#endif /* __WINE_WINE_SERVER_PROTOCOL_H */

View File

@ -42,7 +42,7 @@ 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 unsigned __int64 client_ptr_t;
typedef client_ptr_t mod_handle_t;
struct request_header
@ -526,9 +526,9 @@ typedef union
/* Signal the end of the process initialization */
@REQ(init_process_done)
int gui; /* is it a GUI process? */
mod_handle_t module; /* main module base address */
void* entry; /* process entry point */
int gui; /* is it a GUI process? */
@END
@ -2097,18 +2097,18 @@ enum message_type
process_id_t pid; /* process owning the window */
thread_id_t tid; /* thread owning the window */
atom_t atom; /* class atom */
int is_unicode; /* ANSI or unicode */
short int is_unicode; /* ANSI or unicode */
@END
/* Set some information in a window */
@REQ(set_window_info)
unsigned int flags; /* flags for fields to set (see below) */
unsigned short flags; /* flags for fields to set (see below) */
short int is_unicode; /* ANSI or unicode */
user_handle_t handle; /* handle to the window */
unsigned int style; /* window style */
unsigned int ex_style; /* window extended style */
unsigned int id; /* window id */
int is_unicode; /* ANSI or unicode */
mod_handle_t instance; /* creator instance */
lparam_t user_data; /* user-specific data */
int extra_offset; /* offset to set in extra bytes */
@ -2117,10 +2117,10 @@ enum message_type
@REPLY
unsigned int old_style; /* old window style */
unsigned int old_ex_style; /* old window extended style */
unsigned int old_id; /* old window id */
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 */
unsigned int old_id; /* old window id */
@END
#define SET_WIN_STYLE 0x01
#define SET_WIN_EXSTYLE 0x02

View File

@ -455,10 +455,11 @@ static void dump_varargs_debug_event( data_size_t size )
event->info.create_thread.start );
break;
case CREATE_PROCESS_DEBUG_EVENT:
fprintf( stderr, "{create_process,file=%04x,process=%04x,thread=%04x,base=%p,offset=%d,"
"size=%d,teb=%p,start=%p,name=%p,unicode=%d}",
fprintf( stderr, "{create_process,file=%04x,process=%04x,thread=%04x,base=",
event->info.create_process.file, event->info.create_process.process,
event->info.create_process.thread, event->info.create_process.base,
event->info.create_process.thread );
dump_uint64( &event->info.create_process.base );
fprintf( stderr, ",offset=%d,size=%d,teb=%p,start=%p,name=%p,unicode=%d}",
event->info.create_process.dbg_offset, event->info.create_process.dbg_size,
event->info.create_process.teb, event->info.create_process.start,
event->info.create_process.name, event->info.create_process.unicode );
@ -470,13 +471,16 @@ static void dump_varargs_debug_event( data_size_t size )
fprintf( stderr, "{exit_process,code=%d}", event->info.exit.exit_code );
break;
case LOAD_DLL_DEBUG_EVENT:
fprintf( stderr, "{load_dll,file=%04x,base=%p,offset=%d,size=%d,name=%p,unicode=%d}",
event->info.load_dll.handle, event->info.load_dll.base,
fprintf( stderr, "{load_dll,file=%04x,base", event->info.load_dll.handle );
dump_uint64( &event->info.load_dll.base );
fprintf( stderr, ",offset=%d,size=%d,name=%p,unicode=%d}",
event->info.load_dll.dbg_offset, event->info.load_dll.dbg_size,
event->info.load_dll.name, event->info.load_dll.unicode );
break;
case UNLOAD_DLL_DEBUG_EVENT:
fprintf( stderr, "{unload_dll,base=%p}", event->info.unload_dll.base );
fputs( "{unload_dll,base=", stderr );
dump_uint64( &event->info.unload_dll.base );
fputc( '}', stderr );
break;
case OUTPUT_DEBUG_STRING_EVENT:
fprintf( stderr, "{output_string,data=%p,unicode=%d,len=%d}",
@ -911,9 +915,11 @@ static void dump_get_startup_info_reply( const struct get_startup_info_reply *re
static void dump_init_process_done_request( const struct init_process_done_request *req )
{
fprintf( stderr, " module=%p,", req->module );
fprintf( stderr, " entry=%p,", req->entry );
fprintf( stderr, " gui=%d", req->gui );
fprintf( stderr, " gui=%d,", req->gui );
fprintf( stderr, " module=" );
dump_uint64( &req->module );
fprintf( stderr, "," );
fprintf( stderr, " entry=%p", req->entry );
}
static void dump_init_thread_request( const struct init_thread_request *req )
@ -1026,7 +1032,8 @@ static void dump_set_thread_info_request( const struct set_thread_info_request *
static void dump_get_dll_info_request( const struct get_dll_info_request *req )
{
fprintf( stderr, " handle=%04x,", req->handle );
fprintf( stderr, " base_address=%p", req->base_address );
fprintf( stderr, " base_address=" );
dump_uint64( &req->base_address );
}
static void dump_get_dll_info_reply( const struct get_dll_info_reply *req )
@ -1061,7 +1068,9 @@ static void dump_resume_thread_reply( const struct resume_thread_reply *req )
static void dump_load_dll_request( const struct load_dll_request *req )
{
fprintf( stderr, " handle=%04x,", req->handle );
fprintf( stderr, " base=%p,", req->base );
fprintf( stderr, " base=" );
dump_uint64( &req->base );
fprintf( stderr, "," );
fprintf( stderr, " name=%p,", req->name );
fprintf( stderr, " size=%u,", req->size );
fprintf( stderr, " dbg_offset=%d,", req->dbg_offset );
@ -1072,7 +1081,8 @@ static void dump_load_dll_request( const struct load_dll_request *req )
static void dump_unload_dll_request( const struct unload_dll_request *req )
{
fprintf( stderr, " base=%p", req->base );
fprintf( stderr, " base=" );
dump_uint64( &req->base );
}
static void dump_queue_apc_request( const struct queue_apc_request *req )
@ -2591,7 +2601,9 @@ static void dump_create_window_request( const struct create_window_request *req
fprintf( stderr, " parent=%08x,", req->parent );
fprintf( stderr, " owner=%08x,", req->owner );
fprintf( stderr, " atom=%04x,", req->atom );
fprintf( stderr, " instance=%p,", req->instance );
fprintf( stderr, " instance=" );
dump_uint64( &req->instance );
fprintf( stderr, "," );
fprintf( stderr, " class=" );
dump_varargs_unicode_str( cur_size );
}
@ -2650,13 +2662,15 @@ static void dump_get_window_info_reply( const struct get_window_info_reply *req
static void dump_set_window_info_request( const struct set_window_info_request *req )
{
fprintf( stderr, " flags=%08x,", req->flags );
fprintf( stderr, " flags=%04x,", req->flags );
fprintf( stderr, " is_unicode=%d,", req->is_unicode );
fprintf( stderr, " handle=%08x,", req->handle );
fprintf( stderr, " style=%08x,", req->style );
fprintf( stderr, " ex_style=%08x,", req->ex_style );
fprintf( stderr, " id=%08x,", req->id );
fprintf( stderr, " is_unicode=%d,", req->is_unicode );
fprintf( stderr, " instance=%p,", req->instance );
fprintf( stderr, " instance=" );
dump_uint64( &req->instance );
fprintf( stderr, "," );
fprintf( stderr, " user_data=" );
dump_uint64( &req->user_data );
fprintf( stderr, "," );
@ -2670,13 +2684,16 @@ static void dump_set_window_info_reply( const struct set_window_info_reply *req
{
fprintf( stderr, " old_style=%08x,", req->old_style );
fprintf( stderr, " old_ex_style=%08x,", req->old_ex_style );
fprintf( stderr, " old_id=%08x,", req->old_id );
fprintf( stderr, " old_instance=%p,", req->old_instance );
fprintf( stderr, " old_instance=" );
dump_uint64( &req->old_instance );
fprintf( stderr, "," );
fprintf( stderr, " old_user_data=" );
dump_uint64( &req->old_user_data );
fprintf( stderr, "," );
fprintf( stderr, " old_extra_value=" );
dump_uint64( &req->old_extra_value );
fprintf( stderr, "," );
fprintf( stderr, " old_id=%08x", req->old_id );
}
static void dump_set_parent_request( const struct set_parent_request *req )
@ -3296,7 +3313,9 @@ static void dump_create_class_request( const struct create_class_request *req )
fprintf( stderr, " local=%d,", req->local );
fprintf( stderr, " atom=%04x,", req->atom );
fprintf( stderr, " style=%08x,", req->style );
fprintf( stderr, " instance=%p,", req->instance );
fprintf( stderr, " instance=" );
dump_uint64( &req->instance );
fprintf( stderr, "," );
fprintf( stderr, " extra=%d,", req->extra );
fprintf( stderr, " win_extra=%d,", req->win_extra );
fprintf( stderr, " client_ptr=%p,", req->client_ptr );
@ -3312,7 +3331,9 @@ static void dump_create_class_reply( const struct create_class_reply *req )
static void dump_destroy_class_request( const struct destroy_class_request *req )
{
fprintf( stderr, " atom=%04x,", req->atom );
fprintf( stderr, " instance=%p,", req->instance );
fprintf( stderr, " instance=" );
dump_uint64( &req->instance );
fprintf( stderr, "," );
fprintf( stderr, " name=" );
dump_varargs_unicode_str( cur_size );
}
@ -3329,7 +3350,9 @@ static void dump_set_class_info_request( const struct set_class_info_request *re
fprintf( stderr, " atom=%04x,", req->atom );
fprintf( stderr, " style=%08x,", req->style );
fprintf( stderr, " win_extra=%d,", req->win_extra );
fprintf( stderr, " instance=%p,", req->instance );
fprintf( stderr, " instance=" );
dump_uint64( &req->instance );
fprintf( stderr, "," );
fprintf( stderr, " extra_offset=%d,", req->extra_offset );
fprintf( stderr, " extra_size=%u,", req->extra_size );
fprintf( stderr, " extra_value=" );
@ -3342,7 +3365,9 @@ static void dump_set_class_info_reply( const struct set_class_info_reply *req )
fprintf( stderr, " old_style=%08x,", req->old_style );
fprintf( stderr, " old_extra=%d,", req->old_extra );
fprintf( stderr, " old_win_extra=%d,", req->old_win_extra );
fprintf( stderr, " old_instance=%p,", req->old_instance );
fprintf( stderr, " old_instance=" );
dump_uint64( &req->old_instance );
fprintf( stderr, "," );
fprintf( stderr, " old_extra_value=" );
dump_uint64( &req->old_extra_value );
}

View File

@ -480,7 +480,7 @@ static struct window *create_window( struct window *parent, struct window *owner
win->style = 0;
win->ex_style = 0;
win->id = 0;
win->instance = NULL;
win->instance = 0;
win->is_unicode = 1;
win->is_linked = 0;
win->is_layered = 0;

View File

@ -36,7 +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" ],
"mod_handle_t" => [ 8, 8, "&dump_uint64" ],
"lparam_t" => [ 8, 8, "&dump_uint64" ],
"apc_param_t" => [ 8, 8, "&dump_uint64" ],
"file_pos_t" => [ 8, 8, "&dump_uint64" ],