mirror of
https://github.com/reactos/wine.git
synced 2025-02-24 15:01:41 +00:00
Pass new arguments (suspend/inherit) to the server.
This commit is contained in:
parent
2f2898b571
commit
4526f2ec66
@ -112,10 +112,12 @@ extern PDB *PROCESS_Current(void);
|
|||||||
extern BOOL PROCESS_IsCurrent( HANDLE handle );
|
extern BOOL PROCESS_IsCurrent( HANDLE handle );
|
||||||
extern PDB *PROCESS_Initial(void);
|
extern PDB *PROCESS_Initial(void);
|
||||||
extern PDB *PROCESS_IdToPDB( DWORD id );
|
extern PDB *PROCESS_IdToPDB( DWORD id );
|
||||||
extern PDB *PROCESS_Create( struct _NE_MODULE *pModule, LPCSTR cmd_line,
|
extern PDB *PROCESS_Create( struct _NE_MODULE *pModule,
|
||||||
LPCSTR env, HINSTANCE16 hInstance,
|
LPCSTR cmd_line, LPCSTR env,
|
||||||
HINSTANCE16 hPrevInstance, BOOL inherit,
|
HINSTANCE16 hInstance, HINSTANCE16 hPrevInstance,
|
||||||
STARTUPINFOA *startup, PROCESS_INFORMATION *info );
|
LPSECURITY_ATTRIBUTES psa, LPSECURITY_ATTRIBUTES tsa,
|
||||||
|
BOOL inherit,
|
||||||
|
STARTUPINFOA *startup, PROCESS_INFORMATION *info );
|
||||||
extern void PROCESS_FreePDB( PDB *pdb );
|
extern void PROCESS_FreePDB( PDB *pdb );
|
||||||
extern void PROCESS_SuspendOtherThreads(void);
|
extern void PROCESS_SuspendOtherThreads(void);
|
||||||
extern void PROCESS_ResumeOtherThreads(void);
|
extern void PROCESS_ResumeOtherThreads(void);
|
||||||
|
@ -116,8 +116,9 @@ extern THDB *pCurrentThread;
|
|||||||
|
|
||||||
/* scheduler/thread.c */
|
/* scheduler/thread.c */
|
||||||
extern THDB *THREAD_CreateInitialThread( struct _PDB *pdb );
|
extern THDB *THREAD_CreateInitialThread( struct _PDB *pdb );
|
||||||
extern THDB *THREAD_Create( struct _PDB *pdb, DWORD stack_size,
|
extern THDB *THREAD_Create( struct _PDB *pdb, DWORD flags,
|
||||||
BOOL alloc_stack16,
|
DWORD stack_size, BOOL alloc_stack16,
|
||||||
|
LPSECURITY_ATTRIBUTES tsa, LPSECURITY_ATTRIBUTES psa,
|
||||||
int *server_thandle, int *server_phandle,
|
int *server_thandle, int *server_phandle,
|
||||||
LPTHREAD_START_ROUTINE start_addr, LPVOID param );
|
LPTHREAD_START_ROUTINE start_addr, LPVOID param );
|
||||||
extern THDB *THREAD_Current(void);
|
extern THDB *THREAD_Current(void);
|
||||||
|
@ -285,9 +285,10 @@ BOOL PROCESS_Init(void)
|
|||||||
* Create a new process database and associated info.
|
* Create a new process database and associated info.
|
||||||
*/
|
*/
|
||||||
PDB *PROCESS_Create( NE_MODULE *pModule, LPCSTR cmd_line, LPCSTR env,
|
PDB *PROCESS_Create( NE_MODULE *pModule, LPCSTR cmd_line, LPCSTR env,
|
||||||
HINSTANCE16 hInstance, HINSTANCE16 hPrevInstance,
|
HINSTANCE16 hInstance, HINSTANCE16 hPrevInstance,
|
||||||
BOOL inherit, STARTUPINFOA *startup,
|
LPSECURITY_ATTRIBUTES psa, LPSECURITY_ATTRIBUTES tsa,
|
||||||
PROCESS_INFORMATION *info )
|
BOOL inherit, STARTUPINFOA *startup,
|
||||||
|
PROCESS_INFORMATION *info )
|
||||||
{
|
{
|
||||||
DWORD size, commit;
|
DWORD size, commit;
|
||||||
int server_thandle, server_phandle;
|
int server_thandle, server_phandle;
|
||||||
@ -326,8 +327,9 @@ PDB *PROCESS_Create( NE_MODULE *pModule, LPCSTR cmd_line, LPCSTR env,
|
|||||||
size = PE_HEADER(pModule->module32)->OptionalHeader.SizeOfStackReserve;
|
size = PE_HEADER(pModule->module32)->OptionalHeader.SizeOfStackReserve;
|
||||||
else
|
else
|
||||||
size = 0;
|
size = 0;
|
||||||
if (!(thdb = THREAD_Create( pdb, size, hInstance == 0,
|
if (!(thdb = THREAD_Create( pdb, 0L, size, hInstance == 0,
|
||||||
&server_thandle, &server_phandle, NULL, NULL )))
|
tsa, psa, &server_thandle, &server_phandle,
|
||||||
|
NULL, NULL )))
|
||||||
goto error;
|
goto error;
|
||||||
info->hThread = server_thandle;
|
info->hThread = server_thandle;
|
||||||
info->hProcess = server_phandle;
|
info->hProcess = server_phandle;
|
||||||
|
@ -94,7 +94,8 @@ THDB *THREAD_IdToTHDB( DWORD id )
|
|||||||
* Initialization of a newly created THDB.
|
* Initialization of a newly created THDB.
|
||||||
*/
|
*/
|
||||||
static BOOL THREAD_InitTHDB( THDB *thdb, DWORD stack_size, BOOL alloc_stack16,
|
static BOOL THREAD_InitTHDB( THDB *thdb, DWORD stack_size, BOOL alloc_stack16,
|
||||||
int *server_thandle, int *server_phandle )
|
LPSECURITY_ATTRIBUTES tsa, LPSECURITY_ATTRIBUTES psa,
|
||||||
|
int *server_thandle, int *server_phandle )
|
||||||
{
|
{
|
||||||
DWORD old_prot;
|
DWORD old_prot;
|
||||||
|
|
||||||
@ -137,7 +138,8 @@ static BOOL THREAD_InitTHDB( THDB *thdb, DWORD stack_size, BOOL alloc_stack16,
|
|||||||
|
|
||||||
/* Create the thread socket */
|
/* Create the thread socket */
|
||||||
|
|
||||||
if (CLIENT_NewThread( thdb, server_thandle, server_phandle )) goto error;
|
if (CLIENT_NewThread( thdb, tsa, psa, server_thandle, server_phandle ))
|
||||||
|
goto error;
|
||||||
|
|
||||||
/* Create the thread event */
|
/* Create the thread event */
|
||||||
|
|
||||||
@ -246,7 +248,8 @@ THDB *THREAD_CreateInitialThread( PDB *pdb )
|
|||||||
|
|
||||||
/* Now proceed with normal initialization */
|
/* Now proceed with normal initialization */
|
||||||
|
|
||||||
if (!THREAD_InitTHDB( &initial_thdb, 0, TRUE, NULL, NULL )) return NULL;
|
if (!THREAD_InitTHDB( &initial_thdb, 0, TRUE,
|
||||||
|
NULL, NULL, NULL, NULL )) return NULL;
|
||||||
return &initial_thdb;
|
return &initial_thdb;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -254,7 +257,8 @@ THDB *THREAD_CreateInitialThread( PDB *pdb )
|
|||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* THREAD_Create
|
* THREAD_Create
|
||||||
*/
|
*/
|
||||||
THDB *THREAD_Create( PDB *pdb, DWORD stack_size, BOOL alloc_stack16,
|
THDB *THREAD_Create( PDB *pdb, DWORD flags, DWORD stack_size, BOOL alloc_stack16,
|
||||||
|
LPSECURITY_ATTRIBUTES tsa, LPSECURITY_ATTRIBUTES psa,
|
||||||
int *server_thandle, int *server_phandle,
|
int *server_thandle, int *server_phandle,
|
||||||
LPTHREAD_START_ROUTINE start_addr, LPVOID param )
|
LPTHREAD_START_ROUTINE start_addr, LPVOID param )
|
||||||
{
|
{
|
||||||
@ -268,6 +272,7 @@ THDB *THREAD_Create( PDB *pdb, DWORD stack_size, BOOL alloc_stack16,
|
|||||||
thdb->teb.tls_ptr = thdb->tls_array;
|
thdb->teb.tls_ptr = thdb->tls_array;
|
||||||
thdb->teb.process = pdb;
|
thdb->teb.process = pdb;
|
||||||
thdb->exit_code = 0x103; /* STILL_ACTIVE */
|
thdb->exit_code = 0x103; /* STILL_ACTIVE */
|
||||||
|
thdb->flags = flags;
|
||||||
thdb->entry_point = start_addr;
|
thdb->entry_point = start_addr;
|
||||||
thdb->entry_arg = param;
|
thdb->entry_arg = param;
|
||||||
thdb->socket = -1;
|
thdb->socket = -1;
|
||||||
@ -280,7 +285,8 @@ THDB *THREAD_Create( PDB *pdb, DWORD stack_size, BOOL alloc_stack16,
|
|||||||
|
|
||||||
/* Do the rest of the initialization */
|
/* Do the rest of the initialization */
|
||||||
|
|
||||||
if (!THREAD_InitTHDB( thdb, stack_size, alloc_stack16, server_thandle, server_phandle ))
|
if (!THREAD_InitTHDB( thdb, stack_size, alloc_stack16,
|
||||||
|
tsa, psa, server_thandle, server_phandle ))
|
||||||
goto error;
|
goto error;
|
||||||
thdb->next = THREAD_First;
|
thdb->next = THREAD_First;
|
||||||
THREAD_First = thdb;
|
THREAD_First = thdb;
|
||||||
@ -313,13 +319,12 @@ void THREAD_Start( THDB *thdb )
|
|||||||
* CreateThread (KERNEL32.63)
|
* CreateThread (KERNEL32.63)
|
||||||
*/
|
*/
|
||||||
HANDLE WINAPI CreateThread( SECURITY_ATTRIBUTES *sa, DWORD stack,
|
HANDLE WINAPI CreateThread( SECURITY_ATTRIBUTES *sa, DWORD stack,
|
||||||
LPTHREAD_START_ROUTINE start, LPVOID param,
|
LPTHREAD_START_ROUTINE start, LPVOID param,
|
||||||
DWORD flags, LPDWORD id )
|
DWORD flags, LPDWORD id )
|
||||||
{
|
{
|
||||||
int handle = -1;
|
int handle = -1;
|
||||||
BOOL inherit = (sa && (sa->nLength>=sizeof(*sa)) && sa->bInheritHandle);
|
THDB *thread = THREAD_Create( PROCESS_Current(), flags, stack,
|
||||||
THDB *thread = THREAD_Create( PROCESS_Current(), stack,
|
TRUE, sa, NULL, &handle, NULL, start, param );
|
||||||
TRUE, &handle, NULL, start, param );
|
|
||||||
if (!thread) return INVALID_HANDLE_VALUE;
|
if (!thread) return INVALID_HANDLE_VALUE;
|
||||||
if (SYSDEPS_SpawnThread( thread ) == -1)
|
if (SYSDEPS_SpawnThread( thread ) == -1)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user