Added get/set_handle_info request.
This commit is contained in:
parent
fb02ee91b5
commit
6d4ee73906
|
@ -175,6 +175,26 @@ struct close_handle_request
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/* Get information about a handle */
|
||||||
|
struct get_handle_info_request
|
||||||
|
{
|
||||||
|
int handle; /* handle we are interested in */
|
||||||
|
};
|
||||||
|
struct get_handle_info_reply
|
||||||
|
{
|
||||||
|
int flags; /* handle flags */
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/* Set a handle information */
|
||||||
|
struct set_handle_info_request
|
||||||
|
{
|
||||||
|
int handle; /* handle we are interested in */
|
||||||
|
int flags; /* new handle flags */
|
||||||
|
int mask; /* mask for flags to set */
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/* Duplicate a handle */
|
/* Duplicate a handle */
|
||||||
struct dup_handle_request
|
struct dup_handle_request
|
||||||
{
|
{
|
||||||
|
@ -639,10 +659,6 @@ struct _THDB;
|
||||||
extern int CLIENT_NewThread( struct _THDB *thdb, int *thandle, int *phandle );
|
extern int CLIENT_NewThread( struct _THDB *thdb, int *thandle, int *phandle );
|
||||||
extern int CLIENT_SetDebug( int level );
|
extern int CLIENT_SetDebug( int level );
|
||||||
extern int CLIENT_InitThread(void);
|
extern int CLIENT_InitThread(void);
|
||||||
extern int CLIENT_CloseHandle( int handle );
|
|
||||||
extern int CLIENT_DuplicateHandle( int src_process, int src_handle, int dst_process,
|
|
||||||
int dst_handle, DWORD access, BOOL32 inherit, DWORD options );
|
|
||||||
extern int CLIENT_OpenProcess( void *pid, DWORD access, BOOL32 inherit );
|
|
||||||
#endif /* __WINE_SERVER__ */
|
#endif /* __WINE_SERVER__ */
|
||||||
|
|
||||||
#endif /* __WINE_SERVER_H */
|
#endif /* __WINE_SERVER_H */
|
||||||
|
|
|
@ -18,6 +18,8 @@ enum request
|
||||||
REQ_RESUME_THREAD,
|
REQ_RESUME_THREAD,
|
||||||
REQ_QUEUE_APC,
|
REQ_QUEUE_APC,
|
||||||
REQ_CLOSE_HANDLE,
|
REQ_CLOSE_HANDLE,
|
||||||
|
REQ_GET_HANDLE_INFO,
|
||||||
|
REQ_SET_HANDLE_INFO,
|
||||||
REQ_DUP_HANDLE,
|
REQ_DUP_HANDLE,
|
||||||
REQ_OPEN_PROCESS,
|
REQ_OPEN_PROCESS,
|
||||||
REQ_SELECT,
|
REQ_SELECT,
|
||||||
|
@ -76,6 +78,8 @@ DECL_HANDLER(suspend_thread);
|
||||||
DECL_HANDLER(resume_thread);
|
DECL_HANDLER(resume_thread);
|
||||||
DECL_HANDLER(queue_apc);
|
DECL_HANDLER(queue_apc);
|
||||||
DECL_HANDLER(close_handle);
|
DECL_HANDLER(close_handle);
|
||||||
|
DECL_HANDLER(get_handle_info);
|
||||||
|
DECL_HANDLER(set_handle_info);
|
||||||
DECL_HANDLER(dup_handle);
|
DECL_HANDLER(dup_handle);
|
||||||
DECL_HANDLER(open_process);
|
DECL_HANDLER(open_process);
|
||||||
DECL_HANDLER(select);
|
DECL_HANDLER(select);
|
||||||
|
@ -131,6 +135,8 @@ static const struct handler {
|
||||||
{ (void(*)())req_resume_thread, sizeof(struct resume_thread_request) },
|
{ (void(*)())req_resume_thread, sizeof(struct resume_thread_request) },
|
||||||
{ (void(*)())req_queue_apc, sizeof(struct queue_apc_request) },
|
{ (void(*)())req_queue_apc, sizeof(struct queue_apc_request) },
|
||||||
{ (void(*)())req_close_handle, sizeof(struct close_handle_request) },
|
{ (void(*)())req_close_handle, sizeof(struct close_handle_request) },
|
||||||
|
{ (void(*)())req_get_handle_info, sizeof(struct get_handle_info_request) },
|
||||||
|
{ (void(*)())req_set_handle_info, sizeof(struct set_handle_info_request) },
|
||||||
{ (void(*)())req_dup_handle, sizeof(struct dup_handle_request) },
|
{ (void(*)())req_dup_handle, sizeof(struct dup_handle_request) },
|
||||||
{ (void(*)())req_open_process, sizeof(struct open_process_request) },
|
{ (void(*)())req_open_process, sizeof(struct open_process_request) },
|
||||||
{ (void(*)())req_select, sizeof(struct select_request) },
|
{ (void(*)())req_select, sizeof(struct select_request) },
|
||||||
|
|
|
@ -198,6 +198,21 @@ DECL_HANDLER(close_handle)
|
||||||
send_reply( current, -1, 0 );
|
send_reply( current, -1, 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* get information about a handle */
|
||||||
|
DECL_HANDLER(get_handle_info)
|
||||||
|
{
|
||||||
|
struct get_handle_info_reply reply;
|
||||||
|
reply.flags = set_handle_info( current->process, req->handle, 0, 0 );
|
||||||
|
send_reply( current, -1, 1, &reply, sizeof(reply) );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* set a handle information */
|
||||||
|
DECL_HANDLER(set_handle_info)
|
||||||
|
{
|
||||||
|
set_handle_info( current->process, req->handle, req->mask, req->flags );
|
||||||
|
send_reply( current, -1, 0 );
|
||||||
|
}
|
||||||
|
|
||||||
/* duplicate a handle */
|
/* duplicate a handle */
|
||||||
DECL_HANDLER(dup_handle)
|
DECL_HANDLER(dup_handle)
|
||||||
{
|
{
|
||||||
|
|
|
@ -134,6 +134,26 @@ static int dump_close_handle_request( struct close_handle_request *req, int len
|
||||||
return (int)sizeof(*req);
|
return (int)sizeof(*req);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int dump_get_handle_info_request( struct get_handle_info_request *req, int len )
|
||||||
|
{
|
||||||
|
fprintf( stderr, " handle=%d", req->handle );
|
||||||
|
return (int)sizeof(*req);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int dump_get_handle_info_reply( struct get_handle_info_reply *req, int len )
|
||||||
|
{
|
||||||
|
fprintf( stderr, " flags=%d", req->flags );
|
||||||
|
return (int)sizeof(*req);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int dump_set_handle_info_request( struct set_handle_info_request *req, int len )
|
||||||
|
{
|
||||||
|
fprintf( stderr, " handle=%d,", req->handle );
|
||||||
|
fprintf( stderr, " flags=%d,", req->flags );
|
||||||
|
fprintf( stderr, " mask=%d", req->mask );
|
||||||
|
return (int)sizeof(*req);
|
||||||
|
}
|
||||||
|
|
||||||
static int dump_dup_handle_request( struct dup_handle_request *req, int len )
|
static int dump_dup_handle_request( struct dup_handle_request *req, int len )
|
||||||
{
|
{
|
||||||
fprintf( stderr, " src_process=%d,", req->src_process );
|
fprintf( stderr, " src_process=%d,", req->src_process );
|
||||||
|
@ -603,6 +623,10 @@ static const struct dumper dumpers[REQ_NB_REQUESTS] =
|
||||||
(void(*)())0 },
|
(void(*)())0 },
|
||||||
{ (int(*)(void *,int))dump_close_handle_request,
|
{ (int(*)(void *,int))dump_close_handle_request,
|
||||||
(void(*)())0 },
|
(void(*)())0 },
|
||||||
|
{ (int(*)(void *,int))dump_get_handle_info_request,
|
||||||
|
(void(*)())dump_get_handle_info_reply },
|
||||||
|
{ (int(*)(void *,int))dump_set_handle_info_request,
|
||||||
|
(void(*)())0 },
|
||||||
{ (int(*)(void *,int))dump_dup_handle_request,
|
{ (int(*)(void *,int))dump_dup_handle_request,
|
||||||
(void(*)())dump_dup_handle_reply },
|
(void(*)())dump_dup_handle_reply },
|
||||||
{ (int(*)(void *,int))dump_open_process_request,
|
{ (int(*)(void *,int))dump_open_process_request,
|
||||||
|
@ -694,6 +718,8 @@ static const char * const req_names[REQ_NB_REQUESTS] =
|
||||||
"resume_thread",
|
"resume_thread",
|
||||||
"queue_apc",
|
"queue_apc",
|
||||||
"close_handle",
|
"close_handle",
|
||||||
|
"get_handle_info",
|
||||||
|
"set_handle_info",
|
||||||
"dup_handle",
|
"dup_handle",
|
||||||
"open_process",
|
"open_process",
|
||||||
"select",
|
"select",
|
||||||
|
|
Loading…
Reference in New Issue