Module: wine Branch: master Commit: 8dc6987ba5c3fdaa5baea8b00a860f62a3716c08 URL: https://source.winehq.org/git/wine.git/?a=commit;h=8dc6987ba5c3fdaa5baea8b00...
Author: Alexandre Julliard julliard@winehq.org Date: Tue Nov 9 12:33:30 2021 +0100
ntdll: Create a remote thread in DbgUiIssueRemoteBreakin().
Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/ntdll/process.c | 9 ++++++++- dlls/ntdll/unix/loader.c | 3 --- dlls/ntdll/unix/server.c | 28 ---------------------------- dlls/ntdll/unix/unix_private.h | 1 - dlls/ntdll/unixlib.h | 3 +-- include/wine/server_protocol.h | 5 ++--- server/protocol.def | 3 +-- server/thread.c | 1 - server/trace.c | 6 ------ 9 files changed, 12 insertions(+), 47 deletions(-)
diff --git a/dlls/ntdll/process.c b/dlls/ntdll/process.c index 160b1f549c9..82b8daa47af 100644 --- a/dlls/ntdll/process.c +++ b/dlls/ntdll/process.c @@ -552,5 +552,12 @@ void WINAPI DbgUiRemoteBreakin( void *arg ) */ NTSTATUS WINAPI DbgUiIssueRemoteBreakin( HANDLE process ) { - return unix_funcs->DbgUiIssueRemoteBreakin( process ); + HANDLE handle; + NTSTATUS status; + OBJECT_ATTRIBUTES attr = { sizeof(attr) }; + + status = NtCreateThreadEx( &handle, THREAD_ALL_ACCESS, &attr, process, + DbgUiRemoteBreakin, NULL, 0, 0, 0, 0, NULL ); + if (!status) NtClose( handle ); + return status; } diff --git a/dlls/ntdll/unix/loader.c b/dlls/ntdll/unix/loader.c index ea7f18602da..99226d472da 100644 --- a/dlls/ntdll/unix/loader.c +++ b/dlls/ntdll/unix/loader.c @@ -110,7 +110,6 @@ static const char so_dir[] = "/aarch64-unix"; static const char so_dir[] = ""; #endif
-void (WINAPI *pDbgUiRemoteBreakin)( void *arg ) = NULL; NTSTATUS (WINAPI *pKiRaiseUserExceptionDispatcher)(void) = NULL; NTSTATUS (WINAPI *pKiUserExceptionDispatcher)(EXCEPTION_RECORD*,CONTEXT*) = NULL; void (WINAPI *pKiUserApcDispatcher)(CONTEXT*,ULONG_PTR,ULONG_PTR,ULONG_PTR,PNTAPCFUNC) = NULL; @@ -1082,7 +1081,6 @@ static void load_ntdll_functions( HMODULE module ) if (!(p##name = (void *)find_named_export( module, ntdll_exports, #name ))) \ ERR( "%s not found\n", #name )
- GET_FUNC( DbgUiRemoteBreakin ); GET_FUNC( KiRaiseUserExceptionDispatcher ); GET_FUNC( KiUserExceptionDispatcher ); GET_FUNC( KiUserApcDispatcher ); @@ -2144,7 +2142,6 @@ static struct unix_funcs unix_funcs = #ifdef __aarch64__ NtCurrentTeb, #endif - DbgUiIssueRemoteBreakin, RtlGetSystemTimePrecise, RtlWaitOnAddress, RtlWakeAddressAll, diff --git a/dlls/ntdll/unix/server.c b/dlls/ntdll/unix/server.c index 46d403df326..399b1cceb16 100644 --- a/dlls/ntdll/unix/server.c +++ b/dlls/ntdll/unix/server.c @@ -574,17 +574,6 @@ static void invoke_system_apc( const apc_call_t *call, apc_result_t *result, BOO if (!self) NtClose( wine_server_ptr_handle(call->dup_handle.dst_process) ); break; } - case APC_BREAK_PROCESS: - { - HANDLE handle; - - result->type = APC_BREAK_PROCESS; - result->break_process.status = NtCreateThreadEx( &handle, THREAD_ALL_ACCESS, NULL, - NtCurrentProcess(), pDbgUiRemoteBreakin, NULL, - 0, 0, 0, 0, NULL ); - if (!result->break_process.status) NtClose( handle ); - break; - } default: server_protocol_error( "get_apc_request: bad type %d\n", call->type ); break; @@ -1639,23 +1628,6 @@ void server_init_thread( void *entry_point, BOOL *suspend ) }
-/*********************************************************************** - * DbgUiIssueRemoteBreakin - */ -NTSTATUS WINAPI DbgUiIssueRemoteBreakin( HANDLE process ) -{ - apc_call_t call; - apc_result_t result; - NTSTATUS status; - - memset( &call, 0, sizeof(call) ); - call.type = APC_BREAK_PROCESS; - status = server_queue_process_apc( process, &call, &result ); - if (status) return status; - return result.break_process.status; -} - - /****************************************************************************** * NtDuplicateObject */ diff --git a/dlls/ntdll/unix/unix_private.h b/dlls/ntdll/unix/unix_private.h index 6b8835bcba0..641de0c465f 100644 --- a/dlls/ntdll/unix/unix_private.h +++ b/dlls/ntdll/unix/unix_private.h @@ -92,7 +92,6 @@ static const LONG teb_offset = 0x2000; #define FILE_USE_FILE_POINTER_POSITION ((LONGLONG)-2)
/* callbacks to PE ntdll from the Unix side */ -extern void (WINAPI *pDbgUiRemoteBreakin)( void *arg ) DECLSPEC_HIDDEN; extern NTSTATUS (WINAPI *pKiRaiseUserExceptionDispatcher)(void) DECLSPEC_HIDDEN; extern NTSTATUS (WINAPI *pKiUserExceptionDispatcher)(EXCEPTION_RECORD*,CONTEXT*) DECLSPEC_HIDDEN; extern void (WINAPI *pKiUserApcDispatcher)(CONTEXT*,ULONG_PTR,ULONG_PTR,ULONG_PTR,PNTAPCFUNC) DECLSPEC_HIDDEN; diff --git a/dlls/ntdll/unixlib.h b/dlls/ntdll/unixlib.h index d56259deff2..62030d91cdb 100644 --- a/dlls/ntdll/unixlib.h +++ b/dlls/ntdll/unixlib.h @@ -26,7 +26,7 @@ struct _DISPATCHER_CONTEXT;
/* increment this when you change the function table */ -#define NTDLL_UNIXLIB_VERSION 127 +#define NTDLL_UNIXLIB_VERSION 128
struct unix_funcs { @@ -36,7 +36,6 @@ struct unix_funcs #endif
/* other Win32 API functions */ - NTSTATUS (WINAPI *DbgUiIssueRemoteBreakin)( HANDLE process ); LONGLONG (WINAPI *RtlGetSystemTimePrecise)(void); NTSTATUS (WINAPI *RtlWaitOnAddress)( const void *addr, const void *cmp, SIZE_T size, const LARGE_INTEGER *timeout ); diff --git a/include/wine/server_protocol.h b/include/wine/server_protocol.h index c561b48714d..5a66e9aff8f 100644 --- a/include/wine/server_protocol.h +++ b/include/wine/server_protocol.h @@ -470,8 +470,7 @@ enum apc_type APC_MAP_VIEW, APC_UNMAP_VIEW, APC_CREATE_THREAD, - APC_DUP_HANDLE, - APC_BREAK_PROCESS + APC_DUP_HANDLE };
typedef struct @@ -6263,7 +6262,7 @@ union generic_reply
/* ### protocol_version begin ### */
-#define SERVER_PROTOCOL_VERSION 735 +#define SERVER_PROTOCOL_VERSION 736
/* ### protocol_version end ### */
diff --git a/server/protocol.def b/server/protocol.def index 6a25db0326f..ad6d2bb58d0 100644 --- a/server/protocol.def +++ b/server/protocol.def @@ -486,8 +486,7 @@ enum apc_type APC_MAP_VIEW, APC_UNMAP_VIEW, APC_CREATE_THREAD, - APC_DUP_HANDLE, - APC_BREAK_PROCESS + APC_DUP_HANDLE };
typedef struct diff --git a/server/thread.c b/server/thread.c index b85df68af92..55eb8513af8 100644 --- a/server/thread.c +++ b/server/thread.c @@ -1734,7 +1734,6 @@ DECL_HANDLER(queue_apc) } break; case APC_CREATE_THREAD: - case APC_BREAK_PROCESS: process = get_process_from_handle( req->handle, PROCESS_CREATE_THREAD ); break; case APC_DUP_HANDLE: diff --git a/server/trace.c b/server/trace.c index 6e78f8281f0..903e323273b 100644 --- a/server/trace.c +++ b/server/trace.c @@ -237,9 +237,6 @@ static void dump_apc_call( const char *prefix, const apc_call_t *call ) call->dup_handle.src_handle, call->dup_handle.dst_process, call->dup_handle.access, call->dup_handle.attributes, call->dup_handle.options ); break; - case APC_BREAK_PROCESS: - fprintf( stderr, "APC_BREAK_PROCESS" ); - break; default: fprintf( stderr, "type=%u", call->type ); break; @@ -324,9 +321,6 @@ static void dump_apc_result( const char *prefix, const apc_result_t *result ) fprintf( stderr, "APC_DUP_HANDLE,status=%s,handle=%04x", get_status_name( result->dup_handle.status ), result->dup_handle.handle ); break; - case APC_BREAK_PROCESS: - fprintf( stderr, "APC_BREAK_PROCESS,status=%s", get_status_name( result->break_process.status ) ); - break; default: fprintf( stderr, "type=%u", result->type ); break;