Module: wine Branch: master Commit: 8de06f12dd267cd56284c4f307852486e867b229 URL: http://source.winehq.org/git/wine.git/?a=commit;h=8de06f12dd267cd56284c4f307...
Author: Dmitry Timoshkov dmitry@baikal.ru Date: Fri Feb 10 17:21:32 2017 +0100
kernel32: Replace Peb->BeingDebugged check by CheckRemoteDebuggerPresent().
misctool.dll from AmiBroker intentionally sets PEB->BeingDebugged to a random value returned by RDTSC instruction on PROCESS_ATTACH.
Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru Signed-off-by: Sebastian Lackner sebastian@fds-team.de Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/kernel32/process.c | 6 +++++- include/winbase.h | 1 + 2 files changed, 6 insertions(+), 1 deletion(-)
diff --git a/dlls/kernel32/process.c b/dlls/kernel32/process.c index 0cb3d9b..70c38eb 100644 --- a/dlls/kernel32/process.c +++ b/dlls/kernel32/process.c @@ -1085,6 +1085,7 @@ static inline DWORD call_process_entry( PEB *peb, LPTHREAD_START_ROUTINE entry ) */ static DWORD WINAPI start_process( LPTHREAD_START_ROUTINE entry ) { + BOOL being_debugged; PEB *peb = NtCurrentTeb()->Peb;
if (!entry) @@ -1098,8 +1099,11 @@ static DWORD WINAPI start_process( LPTHREAD_START_ROUTINE entry ) DPRINTF( "%04x:Starting process %s (entryproc=%p)\n", GetCurrentThreadId(), debugstr_w(peb->ProcessParameters->ImagePathName.Buffer), entry );
+ if (!CheckRemoteDebuggerPresent( GetCurrentProcess(), &being_debugged )) + being_debugged = FALSE; + SetLastError( 0 ); /* clear error code */ - if (peb->BeingDebugged) DbgBreakPoint(); + if (being_debugged) DbgBreakPoint(); return call_process_entry( peb, entry ); }
diff --git a/include/winbase.h b/include/winbase.h index 84cda0f..b07d4df 100644 --- a/include/winbase.h +++ b/include/winbase.h @@ -1737,6 +1737,7 @@ WINBASEAPI BOOL WINAPI CancelTimerQueueTimer(HANDLE,HANDLE); WINBASEAPI BOOL WINAPI CancelWaitableTimer(HANDLE); WINBASEAPI BOOL WINAPI CheckNameLegalDOS8Dot3A(const char*,char*,DWORD,BOOL*,BOOL*); WINBASEAPI BOOL WINAPI CheckNameLegalDOS8Dot3W(const WCHAR*, char*,DWORD,BOOL*,BOOL*); +WINBASEAPI BOOL WINAPI CheckRemoteDebuggerPresent(HANDLE,BOOL*); WINBASEAPI BOOL WINAPI ChangeTimerQueueTimer(HANDLE,HANDLE,ULONG,ULONG); WINADVAPI BOOL WINAPI CheckTokenMembership(HANDLE,PSID,PBOOL); WINBASEAPI BOOL WINAPI ClearCommBreak(HANDLE);