From: Torge Matthies tmatthies@codeweavers.com
--- dlls/wineandroid.drv/android.h | 1 + dlls/wineandroid.drv/device.c | 3 ++- dlls/wineandroid.drv/dllmain.c | 9 ++------- dlls/wineandroid.drv/init.c | 2 ++ dlls/wineandroid.drv/unixlib.h | 7 +------ 5 files changed, 8 insertions(+), 14 deletions(-)
diff --git a/dlls/wineandroid.drv/android.h b/dlls/wineandroid.drv/android.h index 850b235f3a1..c48b7c7b121 100644 --- a/dlls/wineandroid.drv/android.h +++ b/dlls/wineandroid.drv/android.h @@ -107,6 +107,7 @@ extern NTSTATUS android_java_init( void *arg ); extern NTSTATUS android_java_uninit( void *arg ); extern NTSTATUS android_register_window( void *arg ); extern PNTAPCFUNC register_window_callback; +extern UINT64 start_device_callback;
extern unsigned int screen_width; extern unsigned int screen_height; diff --git a/dlls/wineandroid.drv/device.c b/dlls/wineandroid.drv/device.c index d00ea5da8e8..0c4b77ebb6e 100644 --- a/dlls/wineandroid.drv/device.c +++ b/dlls/wineandroid.drv/device.c @@ -1177,7 +1177,8 @@ void start_android_device(void) { void *ret_ptr; ULONG ret_len; - KeUserModeCallback( client_start_device, NULL, 0, &ret_ptr, &ret_len ); + struct dispatch_callback_params params = {.callback = start_device_callback}; + if (KeUserDispatchCallback( ¶ms, sizeof(params), &ret_ptr, &ret_len )) return; if (ret_len == sizeof(thread)) thread = *(HANDLE *)ret_ptr; }
diff --git a/dlls/wineandroid.drv/dllmain.c b/dlls/wineandroid.drv/dllmain.c index 58d001886eb..c8495d679f9 100644 --- a/dlls/wineandroid.drv/dllmain.c +++ b/dlls/wineandroid.drv/dllmain.c @@ -116,7 +116,6 @@ static void CALLBACK register_window_callback( ULONG_PTR arg1, ULONG_PTR arg2, U BOOL WINAPI DllMain( HINSTANCE inst, DWORD reason, LPVOID reserved ) { struct init_params params; - KERNEL_CALLBACK_PROC *callback_table;
if (reason != DLL_PROCESS_ATTACH) return TRUE;
@@ -124,10 +123,6 @@ BOOL WINAPI DllMain( HINSTANCE inst, DWORD reason, LPVOID reserved ) if (__wine_init_unix_call()) return FALSE;
params.register_window_callback = register_window_callback; - if (ANDROID_CALL( init, ¶ms )) return FALSE; - - callback_table = NtCurrentTeb()->Peb->KernelCallbackTable; - callback_table[client_start_device] = android_start_device; - - return TRUE; + params.start_device_callback = android_start_device; + return !ANDROID_CALL( init, ¶ms ); } diff --git a/dlls/wineandroid.drv/init.c b/dlls/wineandroid.drv/init.c index d747ce5d091..d5488388e0d 100644 --- a/dlls/wineandroid.drv/init.c +++ b/dlls/wineandroid.drv/init.c @@ -50,6 +50,7 @@ static RECT monitor_rc_work; static int device_init_done;
PNTAPCFUNC register_window_callback; +UINT64 start_device_callback;
typedef struct { @@ -573,6 +574,7 @@ static HRESULT android_init( void *arg ) pthread_mutexattr_destroy( &attr );
register_window_callback = params->register_window_callback; + start_device_callback = params->start_device_callback;
if ((java_vm = *p_java_vm)) /* running under Java */ { diff --git a/dlls/wineandroid.drv/unixlib.h b/dlls/wineandroid.drv/unixlib.h index f1ba25720fd..46c59f8f201 100644 --- a/dlls/wineandroid.drv/unixlib.h +++ b/dlls/wineandroid.drv/unixlib.h @@ -35,6 +35,7 @@ enum android_funcs struct init_params { PNTAPCFUNC register_window_callback; + UINT64 start_device_callback; };
@@ -53,9 +54,3 @@ struct register_window_params UINT_PTR arg2; UINT_PTR arg3; }; - - -enum -{ - client_start_device = NtUserDriverCallbackFirst, -};