Convert user handles received from client to full handles.

This commit is contained in:
Alexandre Julliard 2001-09-12 17:09:24 +00:00
parent cf07d8bf73
commit bc878ef4d9
3 changed files with 23 additions and 9 deletions

View File

@ -723,7 +723,7 @@ DECL_HANDLER(send_message)
if ((msg = mem_alloc( sizeof(*msg) )))
{
msg->type = req->type;
msg->win = req->win;
msg->win = get_user_full_handle( req->win );
msg->msg = req->msg;
msg->wparam = req->wparam;
msg->lparam = req->lparam;
@ -848,6 +848,7 @@ DECL_HANDLER(get_message)
struct timer *timer;
struct message *msg;
struct msg_queue *queue = get_current_queue();
user_handle_t get_win = get_user_full_handle( req->get_win );
if (!queue)
{
@ -874,7 +875,7 @@ DECL_HANDLER(get_message)
queue->changed_bits = 0;
/* then check for posted messages */
if ((msg = find_matching_message( &queue->msg_list[POST_MESSAGE], req->get_win,
if ((msg = find_matching_message( &queue->msg_list[POST_MESSAGE], get_win,
req->get_first, req->get_last )))
{
return_message_to_app( queue, req, msg, POST_MESSAGE );
@ -882,7 +883,7 @@ DECL_HANDLER(get_message)
}
/* then check for cooked hardware messages */
if ((msg = find_matching_message( &queue->msg_list[COOKED_HW_MESSAGE], req->get_win,
if ((msg = find_matching_message( &queue->msg_list[COOKED_HW_MESSAGE], get_win,
req->get_first, req->get_last )))
{
return_message_to_app( queue, req, msg, COOKED_HW_MESSAGE );
@ -913,7 +914,7 @@ DECL_HANDLER(get_message)
}
/* now check for timer */
if ((timer = find_expired_timer( queue, req->get_win, req->get_first,
if ((timer = find_expired_timer( queue, get_win, req->get_first,
req->get_last, (req->flags & GET_MSG_REMOVE) )))
{
req->type = MSG_POSTED;
@ -987,7 +988,7 @@ DECL_HANDLER(get_message_reply)
/* cleanup a queue when a window is deleted */
DECL_HANDLER(cleanup_window_queue)
{
queue_cleanup_window( current, req->win );
queue_cleanup_window( current, get_user_full_handle(req->win) );
}
@ -996,15 +997,16 @@ DECL_HANDLER(set_win_timer)
{
struct timer *timer;
struct msg_queue *queue = get_current_queue();
user_handle_t win = get_user_full_handle( req->win );
if (!queue) return;
/* remove it if it existed already */
if (req->win) kill_timer( queue, req->win, req->msg, req->id );
if (win) kill_timer( queue, win, req->msg, req->id );
if ((timer = set_timer( queue, req->rate )))
{
timer->win = req->win;
timer->win = win;
timer->msg = req->msg;
timer->id = req->id;
timer->lparam = req->lparam;
@ -1016,6 +1018,6 @@ DECL_HANDLER(kill_win_timer)
{
struct msg_queue *queue = current->queue;
if (!queue || !kill_timer( queue, req->win, req->msg, req->id ))
if (!queue || !kill_timer( queue, get_user_full_handle(req->win), req->msg, req->id ))
set_error( STATUS_INVALID_PARAMETER );
}

View File

@ -20,7 +20,8 @@ static int nb_handles;
static int allocated_handles;
#define FIRST_HANDLE 32 /* handle value for first table entry */
#define MAX_HANDLES (65536-FIRST_HANDLE)
#define LAST_HANDLE (65536 - 16)
#define MAX_HANDLES (LAST_HANDLE - FIRST_HANDLE)
static struct user_handle *handle_to_entry( user_handle_t handle )
{
@ -98,6 +99,16 @@ void *get_user_object( user_handle_t handle, enum user_object type )
return entry->ptr;
}
/* get the full handle for a possibly truncated handle */
user_handle_t get_user_full_handle( user_handle_t handle )
{
struct user_handle *entry;
if (handle >> 16) return handle;
if (!(entry = handle_to_entry( handle ))) return handle;
return entry_to_handle( entry );
}
/* same as get_user_object plus set the handle to the full 32-bit value */
void *get_user_object_handle( user_handle_t *handle, enum user_object type )
{

View File

@ -22,6 +22,7 @@ enum user_object
extern user_handle_t alloc_user_handle( void *ptr, enum user_object type );
extern void *get_user_object( user_handle_t handle, enum user_object type );
extern void *get_user_object_handle( user_handle_t *handle, enum user_object type );
extern user_handle_t get_user_full_handle( user_handle_t handle );
extern void *free_user_handle( user_handle_t handle );
extern void *next_user_handle( user_handle_t *handle, enum user_object type );