Moved the wine server client-side support to dlls/ntdll. Removed a
couple of unnecessary functions.
This commit is contained in:
parent
ba71316172
commit
52f692fb9b
|
@ -306,7 +306,7 @@ static BOOL process_init( char *argv[] )
|
||||||
InitializeListHead(&process_ldr.InInitializationOrderModuleList);
|
InitializeListHead(&process_ldr.InInitializationOrderModuleList);
|
||||||
|
|
||||||
/* Setup the server connection */
|
/* Setup the server connection */
|
||||||
CLIENT_InitServer();
|
wine_server_init_thread();
|
||||||
|
|
||||||
/* Retrieve startup info from the server */
|
/* Retrieve startup info from the server */
|
||||||
SERVER_START_REQ( init_process )
|
SERVER_START_REQ( init_process )
|
||||||
|
@ -386,7 +386,13 @@ static BOOL process_init( char *argv[] )
|
||||||
SHELL_LoadRegistry();
|
SHELL_LoadRegistry();
|
||||||
|
|
||||||
/* global boot finished, the rest is process-local */
|
/* global boot finished, the rest is process-local */
|
||||||
CLIENT_BootDone( TRACE_ON(server) );
|
SERVER_START_REQ( boot_done )
|
||||||
|
{
|
||||||
|
req->debug_level = TRACE_ON(server);
|
||||||
|
wine_server_call( req );
|
||||||
|
}
|
||||||
|
SERVER_END_REQ;
|
||||||
|
|
||||||
if (TRACE_ON(relay) || TRACE_ON(snoop)) RELAY_InitDebugLists();
|
if (TRACE_ON(relay) || TRACE_ON(snoop)) RELAY_InitDebugLists();
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
|
@ -189,7 +189,7 @@ static void THREAD_Start( TEB *teb )
|
||||||
|
|
||||||
SYSDEPS_SetCurThread( teb );
|
SYSDEPS_SetCurThread( teb );
|
||||||
SIGNAL_Init();
|
SIGNAL_Init();
|
||||||
CLIENT_InitThread();
|
wine_server_init_thread();
|
||||||
|
|
||||||
if (TRACE_ON(relay))
|
if (TRACE_ON(relay))
|
||||||
DPRINTF("%04lx:Starting thread (entryproc=%p)\n", GetCurrentThreadId(), func );
|
DPRINTF("%04lx:Starting thread (entryproc=%p)\n", GetCurrentThreadId(), func );
|
||||||
|
|
|
@ -31,7 +31,6 @@ C_SRCS = \
|
||||||
$(TOPOBJDIR)/relay32/builtin32.c \
|
$(TOPOBJDIR)/relay32/builtin32.c \
|
||||||
$(TOPOBJDIR)/relay32/relay386.c \
|
$(TOPOBJDIR)/relay32/relay386.c \
|
||||||
$(TOPOBJDIR)/relay32/snoop.c \
|
$(TOPOBJDIR)/relay32/snoop.c \
|
||||||
$(TOPOBJDIR)/scheduler/client.c \
|
|
||||||
$(TOPOBJDIR)/scheduler/handle.c \
|
$(TOPOBJDIR)/scheduler/handle.c \
|
||||||
$(TOPOBJDIR)/scheduler/process.c \
|
$(TOPOBJDIR)/scheduler/process.c \
|
||||||
$(TOPOBJDIR)/scheduler/pthread.c \
|
$(TOPOBJDIR)/scheduler/pthread.c \
|
||||||
|
@ -58,6 +57,7 @@ C_SRCS = \
|
||||||
rtlbitmap.c \
|
rtlbitmap.c \
|
||||||
rtlstr.c \
|
rtlstr.c \
|
||||||
sec.c \
|
sec.c \
|
||||||
|
server.c \
|
||||||
signal_i386.c \
|
signal_i386.c \
|
||||||
signal_powerpc.c \
|
signal_powerpc.c \
|
||||||
signal_sparc.c \
|
signal_sparc.c \
|
||||||
|
|
|
@ -1062,6 +1062,7 @@
|
||||||
|
|
||||||
# Server interface
|
# Server interface
|
||||||
@ cdecl -norelay wine_server_call(ptr)
|
@ cdecl -norelay wine_server_call(ptr)
|
||||||
|
@ cdecl wine_server_init_thread()
|
||||||
@ cdecl wine_server_fd_to_handle(long long long ptr)
|
@ cdecl wine_server_fd_to_handle(long long long ptr)
|
||||||
@ cdecl wine_server_handle_to_fd(long long ptr ptr ptr)
|
@ cdecl wine_server_handle_to_fd(long long ptr ptr ptr)
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Client part of the client/server communication
|
* Wine server communication
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 Alexandre Julliard
|
* Copyright (C) 1998 Alexandre Julliard
|
||||||
*
|
*
|
||||||
|
@ -76,9 +76,8 @@ struct cmsg_fd
|
||||||
};
|
};
|
||||||
#endif /* HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTS */
|
#endif /* HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTS */
|
||||||
|
|
||||||
static HANDLE boot_thread_id;
|
|
||||||
static sigset_t block_set; /* signals to block during server calls */
|
static sigset_t block_set; /* signals to block during server calls */
|
||||||
static int fd_socket; /* socket to exchange file descriptors with the server */
|
static int fd_socket = -1; /* socket to exchange file descriptors with the server */
|
||||||
|
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
static void fatal_error( const char *err, ... ) __attribute__((noreturn, format(printf,1,2)));
|
static void fatal_error( const char *err, ... ) __attribute__((noreturn, format(printf,1,2)));
|
||||||
|
@ -602,11 +601,11 @@ static int server_connect( const char *oldcwd, const char *serverdir )
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* CLIENT_InitServer
|
* server_init
|
||||||
*
|
*
|
||||||
* Start the server and create the initial socket pair.
|
* Start the server and create the initial socket pair.
|
||||||
*/
|
*/
|
||||||
void CLIENT_InitServer(void)
|
static void server_init(void)
|
||||||
{
|
{
|
||||||
int size;
|
int size;
|
||||||
char *oldcwd;
|
char *oldcwd;
|
||||||
|
@ -658,23 +657,23 @@ void CLIENT_InitServer(void)
|
||||||
|
|
||||||
/* receive the first thread request fd on the main socket */
|
/* receive the first thread request fd on the main socket */
|
||||||
NtCurrentTeb()->request_fd = receive_fd( &dummy_handle );
|
NtCurrentTeb()->request_fd = receive_fd( &dummy_handle );
|
||||||
|
|
||||||
CLIENT_InitThread();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* CLIENT_InitThread
|
* wine_server_init_thread
|
||||||
*
|
*
|
||||||
* Send an init thread request. Return 0 if OK.
|
* Send an init thread request. Return 0 if OK.
|
||||||
*/
|
*/
|
||||||
void CLIENT_InitThread(void)
|
void wine_server_init_thread(void)
|
||||||
{
|
{
|
||||||
TEB *teb = NtCurrentTeb();
|
TEB *teb = NtCurrentTeb();
|
||||||
int version, ret;
|
int version, ret;
|
||||||
int reply_pipe[2];
|
int reply_pipe[2];
|
||||||
struct sigaction sig_act;
|
struct sigaction sig_act;
|
||||||
|
|
||||||
|
if (fd_socket == -1) server_init();
|
||||||
|
|
||||||
sig_act.sa_handler = SIG_IGN;
|
sig_act.sa_handler = SIG_IGN;
|
||||||
sig_act.sa_flags = 0;
|
sig_act.sa_flags = 0;
|
||||||
sigemptyset( &sig_act.sa_mask );
|
sigemptyset( &sig_act.sa_mask );
|
||||||
|
@ -712,8 +711,6 @@ void CLIENT_InitThread(void)
|
||||||
teb->ClientId.UniqueProcess = (HANDLE)reply->pid;
|
teb->ClientId.UniqueProcess = (HANDLE)reply->pid;
|
||||||
teb->ClientId.UniqueThread = (HANDLE)reply->tid;
|
teb->ClientId.UniqueThread = (HANDLE)reply->tid;
|
||||||
version = reply->version;
|
version = reply->version;
|
||||||
if (reply->boot) boot_thread_id = teb->ClientId.UniqueThread;
|
|
||||||
else if (boot_thread_id == teb->ClientId.UniqueThread) boot_thread_id = 0;
|
|
||||||
}
|
}
|
||||||
SERVER_END_REQ;
|
SERVER_END_REQ;
|
||||||
|
|
||||||
|
@ -726,30 +723,3 @@ void CLIENT_InitThread(void)
|
||||||
version, SERVER_PROTOCOL_VERSION,
|
version, SERVER_PROTOCOL_VERSION,
|
||||||
(version > SERVER_PROTOCOL_VERSION) ? "wine" : "wineserver" );
|
(version > SERVER_PROTOCOL_VERSION) ? "wine" : "wineserver" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
|
||||||
* CLIENT_BootDone
|
|
||||||
*
|
|
||||||
* Signal that we have finished booting, and set debug level.
|
|
||||||
*/
|
|
||||||
void CLIENT_BootDone( int debug_level )
|
|
||||||
{
|
|
||||||
SERVER_START_REQ( boot_done )
|
|
||||||
{
|
|
||||||
req->debug_level = debug_level;
|
|
||||||
wine_server_call( req );
|
|
||||||
}
|
|
||||||
SERVER_END_REQ;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
|
||||||
* CLIENT_IsBootThread
|
|
||||||
*
|
|
||||||
* Return TRUE if current thread is the boot thread.
|
|
||||||
*/
|
|
||||||
int CLIENT_IsBootThread(void)
|
|
||||||
{
|
|
||||||
return (GetCurrentThreadId() == (DWORD)boot_thread_id);
|
|
||||||
}
|
|
|
@ -56,6 +56,7 @@ extern void wine_server_send_fd( int fd );
|
||||||
extern int wine_server_fd_to_handle( int fd, unsigned int access, int inherit, obj_handle_t *handle );
|
extern int wine_server_fd_to_handle( int fd, unsigned int access, int inherit, obj_handle_t *handle );
|
||||||
extern int wine_server_handle_to_fd( obj_handle_t handle, unsigned int access, int *unix_fd,
|
extern int wine_server_handle_to_fd( obj_handle_t handle, unsigned int access, int *unix_fd,
|
||||||
enum fd_type *type, int *flags );
|
enum fd_type *type, int *flags );
|
||||||
|
extern void wine_server_init_thread(void);
|
||||||
|
|
||||||
/* do a server call and set the last error code */
|
/* do a server call and set the last error code */
|
||||||
inline static unsigned int wine_server_call_err( void *req_ptr )
|
inline static unsigned int wine_server_call_err( void *req_ptr )
|
||||||
|
@ -113,9 +114,5 @@ inline static void wine_server_set_reply( void *req_ptr, void *ptr, unsigned int
|
||||||
/* non-exported functions */
|
/* non-exported functions */
|
||||||
extern void DECLSPEC_NORETURN server_protocol_error( const char *err, ... );
|
extern void DECLSPEC_NORETURN server_protocol_error( const char *err, ... );
|
||||||
extern void DECLSPEC_NORETURN server_protocol_perror( const char *err );
|
extern void DECLSPEC_NORETURN server_protocol_perror( const char *err );
|
||||||
extern void CLIENT_InitServer(void);
|
|
||||||
extern void CLIENT_InitThread(void);
|
|
||||||
extern void CLIENT_BootDone( int debug_level );
|
|
||||||
extern int CLIENT_IsBootThread(void);
|
|
||||||
|
|
||||||
#endif /* __WINE_WINE_SERVER_H */
|
#endif /* __WINE_WINE_SERVER_H */
|
||||||
|
|
|
@ -1654,6 +1654,7 @@ void SHELL_LoadRegistry( void )
|
||||||
OBJECT_ATTRIBUTES attr;
|
OBJECT_ATTRIBUTES attr;
|
||||||
UNICODE_STRING nameW;
|
UNICODE_STRING nameW;
|
||||||
DWORD count;
|
DWORD count;
|
||||||
|
ULONG dispos;
|
||||||
BOOL res;
|
BOOL res;
|
||||||
int all, period;
|
int all, period;
|
||||||
char tmp[1024];
|
char tmp[1024];
|
||||||
|
@ -1677,8 +1678,6 @@ void SHELL_LoadRegistry( void )
|
||||||
|
|
||||||
TRACE("(void)\n");
|
TRACE("(void)\n");
|
||||||
|
|
||||||
if (!CLIENT_IsBootThread()) return; /* already loaded */
|
|
||||||
|
|
||||||
attr.Length = sizeof(attr);
|
attr.Length = sizeof(attr);
|
||||||
attr.RootDirectory = 0;
|
attr.RootDirectory = 0;
|
||||||
attr.ObjectName = &nameW;
|
attr.ObjectName = &nameW;
|
||||||
|
@ -1686,10 +1685,17 @@ void SHELL_LoadRegistry( void )
|
||||||
attr.SecurityDescriptor = NULL;
|
attr.SecurityDescriptor = NULL;
|
||||||
attr.SecurityQualityOfService = NULL;
|
attr.SecurityQualityOfService = NULL;
|
||||||
|
|
||||||
|
RtlInitUnicodeString( &nameW, UserW );
|
||||||
|
NtCreateKey( &hkey_users, KEY_ALL_ACCESS, &attr, 0, NULL, 0, &dispos );
|
||||||
|
if (dispos == REG_OPENED_EXISTING_KEY)
|
||||||
|
{
|
||||||
|
/* someone else already loaded the registry */
|
||||||
|
NtClose( hkey_users );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
RtlInitUnicodeString( &nameW, MachineW );
|
RtlInitUnicodeString( &nameW, MachineW );
|
||||||
NtCreateKey( &hkey_local_machine, KEY_ALL_ACCESS, &attr, 0, NULL, 0, NULL );
|
NtCreateKey( &hkey_local_machine, KEY_ALL_ACCESS, &attr, 0, NULL, 0, NULL );
|
||||||
RtlInitUnicodeString( &nameW, UserW );
|
|
||||||
NtCreateKey( &hkey_users, KEY_ALL_ACCESS, &attr, 0, NULL, 0, NULL );
|
|
||||||
|
|
||||||
attr.RootDirectory = hkey_users;
|
attr.RootDirectory = hkey_users;
|
||||||
RtlInitUnicodeString( &nameW, DefaultW );
|
RtlInitUnicodeString( &nameW, DefaultW );
|
||||||
|
|
Loading…
Reference in New Issue