diff options
author | midipix <writeonce@midipix.org> | 2016-12-14 14:36:25 +0000 |
---|---|---|
committer | midipix <writeonce@midipix.org> | 2016-12-15 01:48:02 -0500 |
commit | 3bc37f8fb297f48788ebb34ff7bdbed96566bd2a (patch) | |
tree | 721b1c0d9a4d39429e21bc6f01b2ae70b4ff15ed /src/thread | |
parent | 439a91a7b6a3d7384bc5665f86c97d8a06cf43c2 (diff) | |
download | ntapi-3bc37f8fb297f48788ebb34ff7bdbed96566bd2a.tar.bz2 ntapi-3bc37f8fb297f48788ebb34ff7bdbed96566bd2a.tar.xz |
__ntapi_tt_create_thread(): do not alter value of caller's params->reg_context.
Diffstat (limited to 'src/thread')
-rw-r--r-- | src/thread/ntapi_tt_create_thread.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/thread/ntapi_tt_create_thread.c b/src/thread/ntapi_tt_create_thread.c index 50a7d2f..f70d66f 100644 --- a/src/thread/ntapi_tt_create_thread.c +++ b/src/thread/ntapi_tt_create_thread.c @@ -157,9 +157,15 @@ int32_t __stdcall __ntapi_tt_create_thread( status); /* context */ - if (!params->reg_context) { - params->reg_context = &context; - __ntapi->tt_aligned_block_memset(&context,0,sizeof(nt_thread_context)); + if (params->reg_context) { + __ntapi->tt_aligned_block_memcpy( + (uintptr_t *)&context, + (uintptr_t *)params->reg_context, + sizeof(context)); + } else { + __ntapi->tt_aligned_block_memset( + &context,0,sizeof(context)); + __INIT_CONTEXT(context); context.INSTRUCTION_POINTER_REGISTER = (uintptr_t)params->start; context.STACK_POINTER_REGISTER = (uintptr_t)(stack.expandable_stack_base) @@ -265,7 +271,7 @@ int32_t __stdcall __ntapi_tt_create_thread( params->obj_attr, params->hprocess, &cid, - params->reg_context, + &context, &stack, fsuspended); |