From fafe030e9a2b50f694bc9f31a75660295ab717b5 Mon Sep 17 00:00:00 2001 From: Dmitry Timoshkov Date: Wed, 1 Dec 2004 15:37:26 +0000 Subject: [PATCH] Always create a suspended thread in CreateThread and resume it if CREATE_SUSPENDED flag is not set as Windows does. --- dlls/kernel/thread.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/dlls/kernel/thread.c b/dlls/kernel/thread.c index cbdc7c777f..2382128d61 100644 --- a/dlls/kernel/thread.c +++ b/dlls/kernel/thread.c @@ -164,7 +164,7 @@ HANDLE WINAPI CreateRemoteThread( HANDLE hProcess, SECURITY_ATTRIBUTES *sa, SIZE if (flags & STACK_SIZE_PARAM_IS_A_RESERVATION) stack_reserve = stack; else stack_commit = stack; - status = RtlCreateUserThread( hProcess, NULL, (flags & CREATE_SUSPENDED) != 0, + status = RtlCreateUserThread( hProcess, NULL, TRUE, NULL, stack_reserve, stack_commit, THREAD_Start, info, &handle, &client_id ); if (status == STATUS_SUCCESS) @@ -172,6 +172,17 @@ HANDLE WINAPI CreateRemoteThread( HANDLE hProcess, SECURITY_ATTRIBUTES *sa, SIZE if (id) *id = (DWORD)client_id.UniqueThread; if (sa && (sa->nLength >= sizeof(*sa)) && sa->bInheritHandle) SetHandleInformation( handle, HANDLE_FLAG_INHERIT, HANDLE_FLAG_INHERIT ); + if (!(flags & CREATE_SUSPENDED)) + { + ULONG ret; + if (NtResumeThread( handle, &ret )) + { + NtClose( handle ); + RtlFreeHeap( GetProcessHeap(), 0, info ); + SetLastError( ERROR_NOT_ENOUGH_MEMORY ); + handle = 0; + } + } } else { -- 2.33.8