Commit f2d7dd64 authored by Alexandre Julliard's avatar Alexandre Julliard

server: Use attributes instead of inherit flag in process and thread requests.

parent f11d0a37
...@@ -1603,9 +1603,11 @@ static BOOL create_process( HANDLE hFile, LPCWSTR filename, LPWSTR cmd_line, LPW ...@@ -1603,9 +1603,11 @@ static BOOL create_process( HANDLE hFile, LPCWSTR filename, LPWSTR cmd_line, LPW
WaitForSingleObject( process_info, INFINITE ); WaitForSingleObject( process_info, INFINITE );
SERVER_START_REQ( get_new_process_info ) SERVER_START_REQ( get_new_process_info )
{ {
req->info = process_info; req->info = process_info;
req->pinherit = (psa && (psa->nLength >= sizeof(*psa)) && psa->bInheritHandle); req->process_access = PROCESS_ALL_ACCESS;
req->tinherit = (tsa && (tsa->nLength >= sizeof(*tsa)) && tsa->bInheritHandle); req->process_attr = (psa && (psa->nLength >= sizeof(*psa)) && psa->bInheritHandle) ? OBJ_INHERIT : 0;
req->thread_access = THREAD_ALL_ACCESS;
req->thread_attr = (tsa && (tsa->nLength >= sizeof(*tsa)) && tsa->bInheritHandle) ? OBJ_INHERIT : 0;
if ((ret = !wine_server_call_err( req ))) if ((ret = !wine_server_call_err( req )))
{ {
info->dwProcessId = (DWORD)reply->pid; info->dwProcessId = (DWORD)reply->pid;
......
...@@ -375,9 +375,9 @@ NTSTATUS WINAPI NtOpenProcess(PHANDLE handle, ACCESS_MASK access, ...@@ -375,9 +375,9 @@ NTSTATUS WINAPI NtOpenProcess(PHANDLE handle, ACCESS_MASK access,
SERVER_START_REQ( open_process ) SERVER_START_REQ( open_process )
{ {
req->pid = (DWORD)cid->UniqueProcess; req->pid = (process_id_t)cid->UniqueProcess;
req->access = access; req->access = access;
req->inherit = attr && (attr->Attributes & OBJ_INHERIT); req->attributes = attr ? attr->Attributes : 0;
status = wine_server_call( req ); status = wine_server_call( req );
if (!status) *handle = reply->handle; if (!status) *handle = reply->handle;
} }
......
...@@ -265,8 +265,9 @@ NTSTATUS WINAPI RtlCreateUserThread( HANDLE process, const SECURITY_DESCRIPTOR * ...@@ -265,8 +265,9 @@ NTSTATUS WINAPI RtlCreateUserThread( HANDLE process, const SECURITY_DESCRIPTOR *
SERVER_START_REQ( new_thread ) SERVER_START_REQ( new_thread )
{ {
req->access = THREAD_ALL_ACCESS;
req->attributes = 0; /* FIXME */
req->suspend = suspended; req->suspend = suspended;
req->inherit = 0; /* FIXME */
req->request_fd = request_pipe[0]; req->request_fd = request_pipe[0];
if (!(status = wine_server_call( req ))) if (!(status = wine_server_call( req )))
{ {
...@@ -362,9 +363,9 @@ NTSTATUS WINAPI NtOpenThread( HANDLE *handle, ACCESS_MASK access, ...@@ -362,9 +363,9 @@ NTSTATUS WINAPI NtOpenThread( HANDLE *handle, ACCESS_MASK access,
SERVER_START_REQ( open_thread ) SERVER_START_REQ( open_thread )
{ {
req->tid = (thread_id_t)id->UniqueThread; req->tid = (thread_id_t)id->UniqueThread;
req->access = access; req->access = access;
req->inherit = attr && (attr->Attributes & OBJ_INHERIT); req->attributes = attr ? attr->Attributes : 0;
ret = wine_server_call( req ); ret = wine_server_call( req );
*handle = reply->handle; *handle = reply->handle;
} }
......
...@@ -206,8 +206,10 @@ struct get_new_process_info_request ...@@ -206,8 +206,10 @@ struct get_new_process_info_request
{ {
struct request_header __header; struct request_header __header;
obj_handle_t info; obj_handle_t info;
int pinherit; unsigned int process_access;
int tinherit; unsigned int process_attr;
unsigned int thread_access;
unsigned int thread_attr;
}; };
struct get_new_process_info_reply struct get_new_process_info_reply
{ {
...@@ -224,8 +226,9 @@ struct get_new_process_info_reply ...@@ -224,8 +226,9 @@ struct get_new_process_info_reply
struct new_thread_request struct new_thread_request
{ {
struct request_header __header; struct request_header __header;
unsigned int access;
unsigned int attributes;
int suspend; int suspend;
int inherit;
int request_fd; int request_fd;
}; };
struct new_thread_reply struct new_thread_reply
...@@ -564,7 +567,7 @@ struct open_process_request ...@@ -564,7 +567,7 @@ struct open_process_request
struct request_header __header; struct request_header __header;
process_id_t pid; process_id_t pid;
unsigned int access; unsigned int access;
int inherit; unsigned int attributes;
}; };
struct open_process_reply struct open_process_reply
{ {
...@@ -579,7 +582,7 @@ struct open_thread_request ...@@ -579,7 +582,7 @@ struct open_thread_request
struct request_header __header; struct request_header __header;
thread_id_t tid; thread_id_t tid;
unsigned int access; unsigned int access;
int inherit; unsigned int attributes;
}; };
struct open_thread_reply struct open_thread_reply
{ {
...@@ -4316,6 +4319,6 @@ union generic_reply ...@@ -4316,6 +4319,6 @@ union generic_reply
struct query_symlink_reply query_symlink_reply; struct query_symlink_reply query_symlink_reply;
}; };
#define SERVER_PROTOCOL_VERSION 211 #define SERVER_PROTOCOL_VERSION 212
#endif /* __WINE_WINE_SERVER_PROTOCOL_H */ #endif /* __WINE_WINE_SERVER_PROTOCOL_H */
...@@ -909,9 +909,9 @@ DECL_HANDLER(get_new_process_info) ...@@ -909,9 +909,9 @@ DECL_HANDLER(get_new_process_info)
reply->pid = get_process_id( info->process ); reply->pid = get_process_id( info->process );
reply->tid = get_thread_id( info->thread ); reply->tid = get_thread_id( info->thread );
reply->phandle = alloc_handle( current->process, info->process, reply->phandle = alloc_handle( current->process, info->process,
PROCESS_ALL_ACCESS, req->pinherit ); req->process_access, req->process_attr & OBJ_INHERIT );
reply->thandle = alloc_handle( current->process, info->thread, reply->thandle = alloc_handle( current->process, info->thread,
THREAD_ALL_ACCESS, req->tinherit ); req->thread_access, req->thread_attr & OBJ_INHERIT );
reply->success = is_process_init_done( info->process ); reply->success = is_process_init_done( info->process );
release_object( info ); release_object( info );
} }
...@@ -1009,7 +1009,8 @@ DECL_HANDLER(open_process) ...@@ -1009,7 +1009,8 @@ DECL_HANDLER(open_process)
reply->handle = 0; reply->handle = 0;
if (process) if (process)
{ {
reply->handle = alloc_handle( current->process, process, req->access, req->inherit ); reply->handle = alloc_handle( current->process, process, req->access,
req->attributes & OBJ_INHERIT );
release_object( process ); release_object( process );
} }
} }
......
...@@ -214,9 +214,11 @@ struct security_descriptor ...@@ -214,9 +214,11 @@ struct security_descriptor
/* Retrieve information about a newly started process */ /* Retrieve information about a newly started process */
@REQ(get_new_process_info) @REQ(get_new_process_info)
obj_handle_t info; /* info handle returned from new_process_request */ obj_handle_t info; /* info handle returned from new_process_request */
int pinherit; /* process handle inherit flag */ unsigned int process_access; /* access rights for process object */
int tinherit; /* thread handle inherit flag */ unsigned int process_attr; /* attributes for process object */
unsigned int thread_access; /* access rights for thread object */
unsigned int thread_attr; /* attributes for thread object */
@REPLY @REPLY
process_id_t pid; /* process id */ process_id_t pid; /* process id */
obj_handle_t phandle; /* process handle (in the current process) */ obj_handle_t phandle; /* process handle (in the current process) */
...@@ -228,8 +230,9 @@ struct security_descriptor ...@@ -228,8 +230,9 @@ struct security_descriptor
/* Create a new thread from the context of the parent */ /* Create a new thread from the context of the parent */
@REQ(new_thread) @REQ(new_thread)
unsigned int access; /* wanted access rights */
unsigned int attributes; /* object attributes */
int suspend; /* new thread should be suspended on creation */ int suspend; /* new thread should be suspended on creation */
int inherit; /* inherit flag */
int request_fd; /* fd for request pipe */ int request_fd; /* fd for request pipe */
@REPLY @REPLY
thread_id_t tid; /* thread id */ thread_id_t tid; /* thread id */
...@@ -462,7 +465,7 @@ enum apc_type { APC_NONE, APC_USER, APC_TIMER, APC_ASYNC_IO }; ...@@ -462,7 +465,7 @@ enum apc_type { APC_NONE, APC_USER, APC_TIMER, APC_ASYNC_IO };
@REQ(open_process) @REQ(open_process)
process_id_t pid; /* process id to open */ process_id_t pid; /* process id to open */
unsigned int access; /* wanted access rights */ unsigned int access; /* wanted access rights */
int inherit; /* inherit flag */ unsigned int attributes; /* object attributes */
@REPLY @REPLY
obj_handle_t handle; /* handle to the process */ obj_handle_t handle; /* handle to the process */
@END @END
...@@ -472,7 +475,7 @@ enum apc_type { APC_NONE, APC_USER, APC_TIMER, APC_ASYNC_IO }; ...@@ -472,7 +475,7 @@ enum apc_type { APC_NONE, APC_USER, APC_TIMER, APC_ASYNC_IO };
@REQ(open_thread) @REQ(open_thread)
thread_id_t tid; /* thread id to open */ thread_id_t tid; /* thread id to open */
unsigned int access; /* wanted access rights */ unsigned int access; /* wanted access rights */
int inherit; /* inherit flag */ unsigned int attributes; /* object attributes */
@REPLY @REPLY
obj_handle_t handle; /* handle to the thread */ obj_handle_t handle; /* handle to the thread */
@END @END
......
...@@ -829,7 +829,7 @@ DECL_HANDLER(new_thread) ...@@ -829,7 +829,7 @@ DECL_HANDLER(new_thread)
if (req->suspend) thread->suspend++; if (req->suspend) thread->suspend++;
reply->tid = get_thread_id( thread ); reply->tid = get_thread_id( thread );
if ((reply->handle = alloc_handle( current->process, thread, if ((reply->handle = alloc_handle( current->process, thread,
THREAD_ALL_ACCESS, req->inherit ))) req->access, req->attributes & OBJ_INHERIT )))
{ {
/* thread object will be released when the thread gets killed */ /* thread object will be released when the thread gets killed */
return; return;
...@@ -931,7 +931,8 @@ DECL_HANDLER(open_thread) ...@@ -931,7 +931,8 @@ DECL_HANDLER(open_thread)
reply->handle = 0; reply->handle = 0;
if (thread) if (thread)
{ {
reply->handle = alloc_handle( current->process, thread, req->access, req->inherit ); reply->handle = alloc_handle( current->process, thread, req->access,
req->attributes & OBJ_INHERIT );
release_object( thread ); release_object( thread );
} }
} }
......
...@@ -589,8 +589,10 @@ static void dump_new_process_reply( const struct new_process_reply *req ) ...@@ -589,8 +589,10 @@ static void dump_new_process_reply( const struct new_process_reply *req )
static void dump_get_new_process_info_request( const struct get_new_process_info_request *req ) static void dump_get_new_process_info_request( const struct get_new_process_info_request *req )
{ {
fprintf( stderr, " info=%p,", req->info ); fprintf( stderr, " info=%p,", req->info );
fprintf( stderr, " pinherit=%d,", req->pinherit ); fprintf( stderr, " process_access=%08x,", req->process_access );
fprintf( stderr, " tinherit=%d", req->tinherit ); fprintf( stderr, " process_attr=%08x,", req->process_attr );
fprintf( stderr, " thread_access=%08x,", req->thread_access );
fprintf( stderr, " thread_attr=%08x", req->thread_attr );
} }
static void dump_get_new_process_info_reply( const struct get_new_process_info_reply *req ) static void dump_get_new_process_info_reply( const struct get_new_process_info_reply *req )
...@@ -604,8 +606,9 @@ static void dump_get_new_process_info_reply( const struct get_new_process_info_r ...@@ -604,8 +606,9 @@ static void dump_get_new_process_info_reply( const struct get_new_process_info_r
static void dump_new_thread_request( const struct new_thread_request *req ) static void dump_new_thread_request( const struct new_thread_request *req )
{ {
fprintf( stderr, " access=%08x,", req->access );
fprintf( stderr, " attributes=%08x,", req->attributes );
fprintf( stderr, " suspend=%d,", req->suspend ); fprintf( stderr, " suspend=%d,", req->suspend );
fprintf( stderr, " inherit=%d,", req->inherit );
fprintf( stderr, " request_fd=%d", req->request_fd ); fprintf( stderr, " request_fd=%d", req->request_fd );
} }
...@@ -857,7 +860,7 @@ static void dump_open_process_request( const struct open_process_request *req ) ...@@ -857,7 +860,7 @@ static void dump_open_process_request( const struct open_process_request *req )
{ {
fprintf( stderr, " pid=%04x,", req->pid ); fprintf( stderr, " pid=%04x,", req->pid );
fprintf( stderr, " access=%08x,", req->access ); fprintf( stderr, " access=%08x,", req->access );
fprintf( stderr, " inherit=%d", req->inherit ); fprintf( stderr, " attributes=%08x", req->attributes );
} }
static void dump_open_process_reply( const struct open_process_reply *req ) static void dump_open_process_reply( const struct open_process_reply *req )
...@@ -869,7 +872,7 @@ static void dump_open_thread_request( const struct open_thread_request *req ) ...@@ -869,7 +872,7 @@ static void dump_open_thread_request( const struct open_thread_request *req )
{ {
fprintf( stderr, " tid=%04x,", req->tid ); fprintf( stderr, " tid=%04x,", req->tid );
fprintf( stderr, " access=%08x,", req->access ); fprintf( stderr, " access=%08x,", req->access );
fprintf( stderr, " inherit=%d", req->inherit ); fprintf( stderr, " attributes=%08x", req->attributes );
} }
static void dump_open_thread_reply( const struct open_thread_reply *req ) static void dump_open_thread_reply( const struct open_thread_reply *req )
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment