Overwatch 2 verifies that every kernel callback that is run, lives in user32. Introduce a callback in user32 that just forwards to the other modules' callbacks.
-- v8: user32: Remove NtUserDriverCallback* kernel callbacks. winex11.drv: Route kernel callbacks through user32. winemac.drv: Route kernel callbacks through user32. wineandroid.drv: Route kernel callbacks through user32. winevulkan: Route kernel callbacks through user32. user32: Add NtUserDispatchCallback kernel callback.
From: Torge Matthies tmatthies@codeweavers.com
Signed-off-by: Torge Matthies tmatthies@codeweavers.com --- dlls/user.exe16/message.c | 20 ++++++++------------ dlls/user.exe16/user_private.h | 2 ++ dlls/user32/controls.h | 2 ++ dlls/user32/user_main.c | 13 +++++++++++++ dlls/user32/winproc.c | 2 ++ 5 files changed, 27 insertions(+), 12 deletions(-)
diff --git a/dlls/user.exe16/message.c b/dlls/user.exe16/message.c index 9af217bf5f1..d4ea1b44742 100644 --- a/dlls/user.exe16/message.c +++ b/dlls/user.exe16/message.c @@ -2581,28 +2581,26 @@ HWND create_window16( CREATESTRUCTW *cs, LPCWSTR className, HINSTANCE instance, }
-static void WINAPI User16CallFreeIcon( ULONG *param, ULONG size ) +static void call_free_icon16( HICON16 hIcon ) { - GlobalFree16( LOWORD(*param) ); + GlobalFree16( hIcon ); }
-static DWORD WINAPI User16ThunkLock( DWORD *param, ULONG size ) +static DWORD thunk_lock16( DWORD lock, BOOL release ) { - if (size != sizeof(DWORD)) + if (release) { - DWORD lock; ReleaseThunkLock( &lock ); return lock; } - RestoreThunkLock( *param ); + RestoreThunkLock( lock ); return 0; }
void register_wow_handlers(void) { - void **callback_table = NtCurrentTeb()->Peb->KernelCallbackTable; static const struct wow_handlers16 handlers16 = { button_proc16, @@ -2615,12 +2613,10 @@ void register_wow_handlers(void) create_window16, call_window_proc_Ato16, call_dialog_proc_Ato16, + call_free_icon16, + thunk_lock16 };
- callback_table[NtUserCallFreeIcon] = User16CallFreeIcon; - callback_table[NtUserThunkLock] = User16ThunkLock; - - NtUserEnableThunkLock( TRUE ); - UserRegisterWowHandlers( &handlers16, &wow_handlers32 ); + NtUserEnableThunkLock( TRUE ); } diff --git a/dlls/user.exe16/user_private.h b/dlls/user.exe16/user_private.h index 0805997246b..c3e1d9c9c84 100644 --- a/dlls/user.exe16/user_private.h +++ b/dlls/user.exe16/user_private.h @@ -44,6 +44,8 @@ struct wow_handlers16 HWND (*create_window)(CREATESTRUCTW*,LPCWSTR,HINSTANCE,BOOL); LRESULT (*call_window_proc)(HWND,UINT,WPARAM,LPARAM,LRESULT*,void*); LRESULT (*call_dialog_proc)(HWND,UINT,WPARAM,LPARAM,LRESULT*,void*); + void (*call_free_icon)(HICON16); + DWORD (*thunk_lock)(DWORD,BOOL); };
struct wow_handlers32 diff --git a/dlls/user32/controls.h b/dlls/user32/controls.h index 613de0af6c2..7da105a9dfc 100644 --- a/dlls/user32/controls.h +++ b/dlls/user32/controls.h @@ -45,6 +45,8 @@ struct wow_handlers16 HWND (*create_window)(CREATESTRUCTW*,LPCWSTR,HINSTANCE,BOOL); LRESULT (*call_window_proc)(HWND,UINT,WPARAM,LPARAM,LRESULT*,void*); LRESULT (*call_dialog_proc)(HWND,UINT,WPARAM,LPARAM,LRESULT*,void*); + void (*call_free_icon)(WORD); + DWORD (*thunk_lock)(DWORD,BOOL); };
struct wow_handlers32 diff --git a/dlls/user32/user_main.c b/dlls/user32/user_main.c index 963f07b70ef..bfaee6ca649 100644 --- a/dlls/user32/user_main.c +++ b/dlls/user32/user_main.c @@ -192,6 +192,17 @@ static NTSTATUS WINAPI User32UnpackDDEMessage( const struct unpack_dde_message_p return TRUE; }
+static void WINAPI User32CallFreeIcon( ULONG *param, ULONG size ) +{ + if (wow_handlers.call_free_icon) + wow_handlers.call_free_icon( LOWORD(*param) ); +} + +static DWORD WINAPI User32ThunkLock( DWORD *param, ULONG size ) +{ + return wow_handlers.thunk_lock( param ? *param : 0, size == sizeof(DWORD) ); +} + static const void *kernel_callback_table[NtUserCallCount] = { User32CallEnumDisplayMonitor, @@ -212,6 +223,8 @@ static const void *kernel_callback_table[NtUserCallCount] = User32PostDDEMessage, User32RenderSsynthesizedFormat, User32UnpackDDEMessage, + User32CallFreeIcon, + User32ThunkLock, };
diff --git a/dlls/user32/winproc.c b/dlls/user32/winproc.c index 6cd41b51435..37b3dcab969 100644 --- a/dlls/user32/winproc.c +++ b/dlls/user32/winproc.c @@ -1453,6 +1453,8 @@ struct wow_handlers16 wow_handlers = WIN_CreateWindowEx, NULL, /* call_window_proc */ NULL, /* call_dialog_proc */ + NULL, /* call_free_icon */ + NULL, /* thunk_lock */ };
static const struct user_client_procs client_procsA =
From: Torge Matthies tmatthies@codeweavers.com
Signed-off-by: Torge Matthies tmatthies@codeweavers.com --- dlls/user32/user_main.c | 8 ++++++++ dlls/wow64win/user.c | 27 +++++++++++++++++++++++++++ include/ntuser.h | 10 ++++++++++ 3 files changed, 45 insertions(+)
diff --git a/dlls/user32/user_main.c b/dlls/user32/user_main.c index bfaee6ca649..01f8b325f3a 100644 --- a/dlls/user32/user_main.c +++ b/dlls/user32/user_main.c @@ -18,6 +18,8 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */
+#include "ntstatus.h" +#define WIN32_NO_STATUS #include "user_private.h" #include "controls.h" #include "imm.h" @@ -203,6 +205,11 @@ static DWORD WINAPI User32ThunkLock( DWORD *param, ULONG size ) return wow_handlers.thunk_lock( param ? *param : 0, size == sizeof(DWORD) ); }
+static NTSTATUS WINAPI User32DispatchCallback( const struct user32_callback_params *params, ULONG size ) +{ + return params->func( params->args, params->len ); +} + static const void *kernel_callback_table[NtUserCallCount] = { User32CallEnumDisplayMonitor, @@ -225,6 +232,7 @@ static const void *kernel_callback_table[NtUserCallCount] = User32UnpackDDEMessage, User32CallFreeIcon, User32ThunkLock, + User32DispatchCallback, };
diff --git a/dlls/wow64win/user.c b/dlls/wow64win/user.c index 041285fa37f..5daff79c58a 100644 --- a/dlls/wow64win/user.c +++ b/dlls/wow64win/user.c @@ -328,6 +328,13 @@ struct unpack_dde_message_params32 char data[1]; };
+struct user32_callback_params32 +{ + ULONG func; + ULONG args; + ULONG len; +}; + static MSG *msg_32to64( MSG *msg, const MSG32 *msg32 ) { if (!msg32) return NULL; @@ -986,6 +993,25 @@ static NTSTATUS WINAPI wow64_NtUserUnpackDDEMessage( void *arg, ULONG size ) return TRUE; }
+static NTSTATUS WINAPI wow64_NtUserDispatchCallback( void *arg, ULONG size ) +{ + struct user32_callback_params *params = arg; + struct user32_callback_params32 params32; + NTSTATUS status; + void *ret_ptr; + ULONG ret_len; + void *args32; + + if (!(args32 = Wow64AllocateTemp( params->len ))) + return 0; + memcpy( args32, params->args, params->len ); + + params32.func = (ULONG)(ULONG_PTR)params->func; + params32.args = (ULONG)(ULONG_PTR)args32; + params32.len = params->len; + return dispatch_callback( NtUserDispatchCallback, ¶ms32, sizeof(params32) ); +} + static NTSTATUS WINAPI wow64_NtUserCallFreeIcon( void *arg, ULONG size ) { return dispatch_callback( NtUserCallFreeIcon, arg, size ); @@ -1079,6 +1105,7 @@ user_callback user_callbacks[] = wow64_NtUserPostDDEMessage, wow64_NtUserRenderSynthesizedFormat, wow64_NtUserUnpackDDEMessage, + wow64_NtUserDispatchCallback, /* win16 hooks */ wow64_NtUserCallFreeIcon, wow64_NtUserThunkLock, diff --git a/include/ntuser.h b/include/ntuser.h index d724ccad103..015f4cb7e35 100644 --- a/include/ntuser.h +++ b/include/ntuser.h @@ -46,6 +46,7 @@ enum NtUserPostDDEMessage, NtUserRenderSynthesizedFormat, NtUserUnpackDDEMessage, + NtUserDispatchCallback, /* win16 hooks */ NtUserCallFreeIcon, NtUserThunkLock, @@ -267,6 +268,15 @@ struct unpack_dde_message_params char data[1]; };
+typedef NTSTATUS (WINAPI *user32_callback_func)( void *args, ULONG len ); + +struct user32_callback_params +{ + user32_callback_func func; + void *args; + ULONG len; +}; + /* process DPI awareness contexts */ #define NTUSER_DPI_UNAWARE 0x00006010 #define NTUSER_DPI_SYSTEM_AWARE 0x00006011
From: Torge Matthies tmatthies@codeweavers.com
Signed-off-by: Torge Matthies tmatthies@codeweavers.com --- dlls/winevulkan/loader.c | 18 ++++++++++++------ dlls/winevulkan/loader_thunks.h | 1 + dlls/winevulkan/make_vulkan | 3 +++ dlls/winevulkan/vulkan.c | 26 ++++++++++++++++++++++---- dlls/winevulkan/vulkan_loader.h | 7 +++++++ dlls/winevulkan/vulkan_private.h | 2 ++ dlls/winevulkan/vulkan_thunks.c | 2 ++ dlls/wow64win/user.c | 15 --------------- include/ntuser.h | 3 --- 9 files changed, 49 insertions(+), 28 deletions(-)
diff --git a/dlls/winevulkan/loader.c b/dlls/winevulkan/loader.c index d6fe9fe078f..6ae82f23ffc 100644 --- a/dlls/winevulkan/loader.c +++ b/dlls/winevulkan/loader.c @@ -89,6 +89,11 @@ static void *wine_vk_get_global_proc_addr(const char *name) return NULL; }
+static void set_callback_functions(const struct vk_callback_funcs *funcs) +{ + vk_unix_call(unix_set_callback_functions, &funcs); +} + static BOOL is_available_instance_function(VkInstance instance, const char *name) { struct is_available_instance_function_params params = { .instance = instance, .name = name }; @@ -597,10 +602,14 @@ static BOOL WINAPI call_vulkan_debug_utils_callback( struct wine_vk_debug_utils_ return params->user_callback(params->severity, params->message_types, ¶ms->data, params->user_data); }
-BOOL WINAPI DllMain(HINSTANCE hinst, DWORD reason, void *reserved) +static const struct vk_callback_funcs callback_funcs = { - void **kernel_callback_table; + (user32_callback_func)call_vulkan_debug_report_callback, + (user32_callback_func)call_vulkan_debug_utils_callback, +};
+BOOL WINAPI DllMain(HINSTANCE hinst, DWORD reason, void *reserved) +{ TRACE("%p, %lu, %p\n", hinst, reason, reserved);
switch (reason) @@ -608,10 +617,7 @@ BOOL WINAPI DllMain(HINSTANCE hinst, DWORD reason, void *reserved) case DLL_PROCESS_ATTACH: hinstance = hinst; DisableThreadLibraryCalls(hinst); - - kernel_callback_table = NtCurrentTeb()->Peb->KernelCallbackTable; - kernel_callback_table[NtUserCallVulkanDebugReportCallback] = call_vulkan_debug_report_callback; - kernel_callback_table[NtUserCallVulkanDebugUtilsCallback] = call_vulkan_debug_utils_callback; + set_callback_functions(&callback_funcs); break; } return TRUE; diff --git a/dlls/winevulkan/loader_thunks.h b/dlls/winevulkan/loader_thunks.h index b262c9d29fb..ff7a1408bf7 100644 --- a/dlls/winevulkan/loader_thunks.h +++ b/dlls/winevulkan/loader_thunks.h @@ -15,6 +15,7 @@ enum unix_call { unix_init, + unix_set_callback_functions, unix_is_available_instance_function, unix_is_available_device_function, unix_vkAcquireNextImage2KHR, diff --git a/dlls/winevulkan/make_vulkan b/dlls/winevulkan/make_vulkan index 2dbb2d18bd0..b6bdfd1b0d7 100755 --- a/dlls/winevulkan/make_vulkan +++ b/dlls/winevulkan/make_vulkan @@ -2479,6 +2479,7 @@ class VkGenerator(object): f.write("const unixlib_entry_t __wine_unix_call_funcs[] =\n") f.write("{\n") f.write(" init_vulkan,\n") + f.write(" vk_set_callback_functions,\n") f.write(" vk_is_available_instance_function,\n") f.write(" vk_is_available_device_function,\n") for vk_func in self.registry.funcs.values(): @@ -2496,6 +2497,7 @@ class VkGenerator(object): f.write("const unixlib_entry_t __wine_unix_call_funcs[] =\n") f.write("{\n") f.write(" init_vulkan,\n") + f.write(" vk_set_callback_functions,\n") f.write(" vk_is_available_instance_function,\n") f.write(" vk_is_available_device_function,\n") for vk_func in self.registry.funcs.values(): @@ -2697,6 +2699,7 @@ class VkGenerator(object): f.write("enum unix_call\n") f.write("{\n") f.write(" unix_init,\n") + f.write(" unix_set_callback_functions,\n") f.write(" unix_is_available_instance_function,\n") f.write(" unix_is_available_device_function,\n") for vk_func in self.registry.funcs.values(): diff --git a/dlls/winevulkan/vulkan.c b/dlls/winevulkan/vulkan.c index 0edc1ae492d..b80f175e24e 100644 --- a/dlls/winevulkan/vulkan.c +++ b/dlls/winevulkan/vulkan.c @@ -114,6 +114,12 @@ static VkBool32 debug_utils_callback_conversion(VkDebugUtilsMessageSeverityFlagB void *user_data) { struct wine_vk_debug_utils_params params; + struct user32_callback_params cbparams = + { + callback_funcs.call_vulkan_debug_utils_callback, + ¶ms, + sizeof(params) + }; VkDebugUtilsObjectNameInfoEXT *object_name_infos; struct wine_debug_utils_messenger *object; void *ret_ptr; @@ -166,8 +172,7 @@ static VkBool32 debug_utils_callback_conversion(VkDebugUtilsMessageSeverityFlagB params.data.pObjects = object_name_infos;
/* applications should always return VK_FALSE */ - result = KeUserModeCallback( NtUserCallVulkanDebugUtilsCallback, ¶ms, sizeof(params), - &ret_ptr, &ret_len ); + result = KeUserModeCallback( NtUserDispatchCallback, &cbparams, sizeof(cbparams), &ret_ptr, &ret_len );
free(object_name_infos);
@@ -178,6 +183,12 @@ static VkBool32 debug_report_callback_conversion(VkDebugReportFlagsEXT flags, Vk uint64_t object_handle, size_t location, int32_t code, const char *layer_prefix, const char *message, void *user_data) { struct wine_vk_debug_report_params params; + struct user32_callback_params cbparams = + { + callback_funcs.call_vulkan_debug_report_callback, + ¶ms, + sizeof(params) + }; struct wine_debug_report_callback *object; void *ret_ptr; ULONG ret_len; @@ -207,8 +218,7 @@ static VkBool32 debug_report_callback_conversion(VkDebugReportFlagsEXT flags, Vk if (!params.object_handle) params.object_type = VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT;
- return KeUserModeCallback( NtUserCallVulkanDebugReportCallback, ¶ms, sizeof(params), - &ret_ptr, &ret_len ); + return KeUserModeCallback( NtUserDispatchCallback, &cbparams, sizeof(cbparams), &ret_ptr, &ret_len ); }
static void wine_vk_physical_device_free(struct wine_phys_dev *phys_dev) @@ -1723,6 +1733,14 @@ VkResult wine_vkCreateRayTracingPipelinesNV(VkDevice handle, VkPipelineCache pip return res; }
+struct vk_callback_funcs callback_funcs; + +NTSTATUS vk_set_callback_functions(void *arg) +{ + callback_funcs = *(struct vk_callback_funcs*)arg; + return STATUS_SUCCESS; +} + NTSTATUS vk_is_available_instance_function(void *arg) { struct is_available_instance_function_params *params = arg; diff --git a/dlls/winevulkan/vulkan_loader.h b/dlls/winevulkan/vulkan_loader.h index 64a136b0804..784adfe91a9 100644 --- a/dlls/winevulkan/vulkan_loader.h +++ b/dlls/winevulkan/vulkan_loader.h @@ -27,6 +27,7 @@ #include "windef.h" #include "winbase.h" #include "winternl.h" +#include "ntuser.h" #include "wine/debug.h" #include "wine/vulkan.h" #include "wine/unixlib.h" @@ -108,6 +109,12 @@ void *wine_vk_get_instance_proc_addr(const char *name) DECLSPEC_HIDDEN;
/* debug callbacks params */
+struct vk_callback_funcs +{ + user32_callback_func call_vulkan_debug_report_callback; + user32_callback_func call_vulkan_debug_utils_callback; +}; + struct wine_vk_debug_utils_params { PFN_vkDebugUtilsMessengerCallbackEXT user_callback; diff --git a/dlls/winevulkan/vulkan_private.h b/dlls/winevulkan/vulkan_private.h index 4221e97b73a..4b72f65e8c1 100644 --- a/dlls/winevulkan/vulkan_private.h +++ b/dlls/winevulkan/vulkan_private.h @@ -236,6 +236,8 @@ NTSTATUS init_vulkan(void *args) DECLSPEC_HIDDEN;
NTSTATUS WINAPI vk_direct_unix_call(unixlib_handle_t handle, unsigned int code, void *arg) DECLSPEC_HIDDEN;
+extern struct vk_callback_funcs callback_funcs; +NTSTATUS vk_set_callback_functions(void *arg) DECLSPEC_HIDDEN; NTSTATUS vk_is_available_instance_function(void *arg) DECLSPEC_HIDDEN; NTSTATUS vk_is_available_device_function(void *arg) DECLSPEC_HIDDEN;
diff --git a/dlls/winevulkan/vulkan_thunks.c b/dlls/winevulkan/vulkan_thunks.c index 98cabee0aae..3224195480c 100644 --- a/dlls/winevulkan/vulkan_thunks.c +++ b/dlls/winevulkan/vulkan_thunks.c @@ -18382,6 +18382,7 @@ uint64_t wine_vk_unwrap_handle(VkObjectType type, uint64_t handle) const unixlib_entry_t __wine_unix_call_funcs[] = { init_vulkan, + vk_set_callback_functions, vk_is_available_instance_function, vk_is_available_device_function, thunk64_vkAcquireNextImage2KHR, @@ -18903,6 +18904,7 @@ C_ASSERT(ARRAYSIZE(__wine_unix_call_funcs) == unix_count); const unixlib_entry_t __wine_unix_call_funcs[] = { init_vulkan, + vk_set_callback_functions, vk_is_available_instance_function, vk_is_available_device_function, thunk32_vkAcquireNextImage2KHR, diff --git a/dlls/wow64win/user.c b/dlls/wow64win/user.c index 5daff79c58a..dba12fe6628 100644 --- a/dlls/wow64win/user.c +++ b/dlls/wow64win/user.c @@ -1022,18 +1022,6 @@ static NTSTATUS WINAPI wow64_NtUserThunkLock( void *arg, ULONG size ) return dispatch_callback( NtUserThunkLock, arg, size ); }
-static NTSTATUS WINAPI wow64_NtUserCallVulkanDebugReportCallback( void *arg, ULONG size ) -{ - FIXME( "\n" ); - return 0; -} - -static NTSTATUS WINAPI wow64_NtUserCallVulkanDebugUtilsCallback( void *arg, ULONG size ) -{ - FIXME( "\n" ); - return 0; -} - static NTSTATUS WINAPI wow64_NtUserDriverCallbackFirst0( void *arg, ULONG size ) { return dispatch_callback( NtUserDriverCallbackFirst + 0, arg, size ); @@ -1109,9 +1097,6 @@ user_callback user_callbacks[] = /* win16 hooks */ wow64_NtUserCallFreeIcon, wow64_NtUserThunkLock, - /* Vulkan support */ - wow64_NtUserCallVulkanDebugReportCallback, - wow64_NtUserCallVulkanDebugUtilsCallback, /* Driver-specific callbacks */ wow64_NtUserDriverCallbackFirst0, wow64_NtUserDriverCallbackFirst1, diff --git a/include/ntuser.h b/include/ntuser.h index 015f4cb7e35..09f56ab252d 100644 --- a/include/ntuser.h +++ b/include/ntuser.h @@ -50,9 +50,6 @@ enum /* win16 hooks */ NtUserCallFreeIcon, NtUserThunkLock, - /* Vulkan support */ - NtUserCallVulkanDebugReportCallback, - NtUserCallVulkanDebugUtilsCallback, /* Driver-specific callbacks */ NtUserDriverCallbackFirst, NtUserDriverCallbackLast = NtUserDriverCallbackFirst + 9,
From: Torge Matthies tmatthies@codeweavers.com
Signed-off-by: Torge Matthies tmatthies@codeweavers.com --- dlls/wineandroid.drv/android.h | 1 + dlls/wineandroid.drv/device.c | 4 +++- dlls/wineandroid.drv/dllmain.c | 9 ++------- dlls/wineandroid.drv/init.c | 2 ++ dlls/wineandroid.drv/unixlib.h | 7 +------ 5 files changed, 9 insertions(+), 14 deletions(-)
diff --git a/dlls/wineandroid.drv/android.h b/dlls/wineandroid.drv/android.h index 22652f11d27..f767ceb4187 100644 --- a/dlls/wineandroid.drv/android.h +++ b/dlls/wineandroid.drv/android.h @@ -120,6 +120,7 @@ extern NTSTATUS android_java_init( void *arg ) DECLSPEC_HIDDEN; extern NTSTATUS android_java_uninit( void *arg ) DECLSPEC_HIDDEN; extern NTSTATUS android_register_window( void *arg ) DECLSPEC_HIDDEN; extern PNTAPCFUNC register_window_callback; +extern user32_callback_func start_device;
extern unsigned int screen_width DECLSPEC_HIDDEN; extern unsigned int screen_height DECLSPEC_HIDDEN; diff --git a/dlls/wineandroid.drv/device.c b/dlls/wineandroid.drv/device.c index b7292b5faf1..0ef4211c236 100644 --- a/dlls/wineandroid.drv/device.c +++ b/dlls/wineandroid.drv/device.c @@ -1180,7 +1180,9 @@ void start_android_device(void) { void *ret_ptr; ULONG ret_len; - thread = ULongToHandle( KeUserModeCallback( client_start_device, NULL, 0, &ret_ptr, &ret_len )); + struct user32_callback_params cbparams = { start_device, NULL, 0 }; + NTSTATUS ret = KeUserModeCallback( NtUserDispatchCallback, &cbparams, sizeof(cbparams), &ret_ptr, &ret_len ); + thread = ULongToHandle( ret ); }
diff --git a/dlls/wineandroid.drv/dllmain.c b/dlls/wineandroid.drv/dllmain.c index b10491a22d8..1e3c0d20631 100644 --- a/dlls/wineandroid.drv/dllmain.c +++ b/dlls/wineandroid.drv/dllmain.c @@ -119,7 +119,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; - void **callback_table;
if (reason == DLL_PROCESS_ATTACH) return TRUE;
@@ -129,12 +128,8 @@ BOOL WINAPI DllMain( HINSTANCE inst, DWORD reason, LPVOID reserved ) 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 = android_start_device; + return !ANDROID_CALL( init, ¶ms ); }
diff --git a/dlls/wineandroid.drv/init.c b/dlls/wineandroid.drv/init.c index 6011e20c8ce..c1b601d5df9 100644 --- a/dlls/wineandroid.drv/init.c +++ b/dlls/wineandroid.drv/init.c @@ -53,6 +53,7 @@ static int device_init_done; static BOOL force_display_devices_refresh;
PNTAPCFUNC register_window_callback; +user32_callback_func start_device;
typedef struct { @@ -586,6 +587,7 @@ static HRESULT android_init( void *arg ) pthread_mutexattr_destroy( &attr );
register_window_callback = params->register_window_callback; + start_device = params->start_device;
if ((java_vm = *p_java_vm)) /* running under Java */ { diff --git a/dlls/wineandroid.drv/unixlib.h b/dlls/wineandroid.drv/unixlib.h index 98da6528fd5..4cdc6f7a407 100644 --- a/dlls/wineandroid.drv/unixlib.h +++ b/dlls/wineandroid.drv/unixlib.h @@ -36,6 +36,7 @@ enum android_funcs struct init_params { PNTAPCFUNC register_window_callback; + user32_callback_func start_device; };
@@ -54,9 +55,3 @@ struct register_window_params UINT_PTR arg2; UINT_PTR arg3; }; - - -enum -{ - client_start_device = NtUserDriverCallbackFirst, -};
From: Torge Matthies tmatthies@codeweavers.com
Signed-off-by: Torge Matthies tmatthies@codeweavers.com --- dlls/winex11.drv/dllmain.c | 14 +++----------- dlls/winex11.drv/event.c | 10 +++++----- dlls/winex11.drv/unixlib.h | 28 +++++++++++++--------------- dlls/winex11.drv/x11drv.h | 4 ++-- dlls/winex11.drv/x11drv_main.c | 13 ++++++++++--- dlls/winex11.drv/xim.c | 4 ++-- 6 files changed, 35 insertions(+), 38 deletions(-)
diff --git a/dlls/winex11.drv/dllmain.c b/dlls/winex11.drv/dllmain.c index 8ed0e40d1ac..18710b5b403 100644 --- a/dlls/winex11.drv/dllmain.c +++ b/dlls/winex11.drv/dllmain.c @@ -46,8 +46,7 @@ static NTSTATUS WINAPI x11drv_callback( void *arg, ULONG size ) return callback_funcs[params->id]( params->arg ); }
-typedef NTSTATUS (WINAPI *kernel_callback)( void *params, ULONG size ); -static const kernel_callback kernel_callbacks[] = +static const struct x11drv_client_funcs client_funcs = { x11drv_callback, x11drv_dnd_enter_event, @@ -58,16 +57,13 @@ static const kernel_callback kernel_callbacks[] = x11drv_systray_change_owner, };
-C_ASSERT( NtUserDriverCallbackFirst + ARRAYSIZE(kernel_callbacks) == client_func_last ); - - BOOL WINAPI DllMain( HINSTANCE instance, DWORD reason, void *reserved ) { - void **callback_table; struct init_params params = { foreign_window_proc, &show_systray, + &client_funcs, };
if (reason != DLL_PROCESS_ATTACH) return TRUE; @@ -78,11 +74,7 @@ BOOL WINAPI DllMain( HINSTANCE instance, DWORD reason, void *reserved ) &x11drv_handle, sizeof(x11drv_handle), NULL )) return FALSE;
- if (X11DRV_CALL( init, ¶ms )) return FALSE; - - callback_table = NtCurrentTeb()->Peb->KernelCallbackTable; - memcpy( callback_table + NtUserDriverCallbackFirst, kernel_callbacks, sizeof(kernel_callbacks) ); - return TRUE; + return !X11DRV_CALL( init, ¶ms ); }
diff --git a/dlls/winex11.drv/event.c b/dlls/winex11.drv/event.c index 4a1a8dc0443..e54e90d07f2 100644 --- a/dlls/winex11.drv/event.c +++ b/dlls/winex11.drv/event.c @@ -627,7 +627,7 @@ static void handle_manager_message( HWND hwnd, XClientMessageEvent *event ) TRACE( "new owner %lx\n", event->data.l[2] );
params.event_handle = (UINT_PTR)event; - x11drv_client_func( client_func_systray_change_owner, ¶ms, sizeof(params) ); + x11drv_client_func( client_funcs.systray_change_owner, ¶ms, sizeof(params) ); } }
@@ -1454,7 +1454,7 @@ static HWND find_drop_window( HWND hQueryWnd, LPPOINT lpPt ) RECT tempRect;
if (!NtUserIsWindowEnabled(hQueryWnd)) return 0; - + NtUserGetWindowRect(hQueryWnd, &tempRect);
if(!PtInRect(&tempRect, *lpPt)) return 0; @@ -1487,7 +1487,7 @@ static HWND find_drop_window( HWND hQueryWnd, LPPOINT lpPt ) static void post_drop( HWND hwnd, DROPFILES *drop, ULONG size ) { drop->fWide = HandleToUlong( hwnd ); /* abuse fWide to pass window handle */ - x11drv_client_func( client_func_dnd_post_drop, drop, size ); + x11drv_client_func( client_funcs.dnd_post_drop, drop, size ); }
/********************************************************************** @@ -1752,7 +1752,7 @@ static void handle_xdnd_enter_event( HWND hWnd, XClientMessageEvent *event ) xdndtypes, count, &size ); if (data) { - x11drv_client_func( client_func_dnd_enter_event, data, size ); + x11drv_client_func( client_funcs.dnd_enter_event, data, size ); free( data ); }
@@ -1807,7 +1807,7 @@ static void handle_xdnd_position_event( HWND hwnd, XClientMessageEvent *event ) params.point = root_to_virtual_screen( event->data.l[2] >> 16, event->data.l[2] & 0xFFFF ); params.effect = effect = xdnd_action_to_drop_effect( event->data.l[4] );
- effect = x11drv_client_func( client_func_dnd_position_event, ¶ms, sizeof(params) ); + effect = x11drv_client_func( client_funcs.dnd_position_event, ¶ms, sizeof(params) );
TRACE( "actionRequested(%ld) chosen(0x%x) at x(%d),y(%d)\n", event->data.l[4], effect, params.point.x, params.point.y ); diff --git a/dlls/winex11.drv/unixlib.h b/dlls/winex11.drv/unixlib.h index e8b243d67a1..b8f520da43e 100644 --- a/dlls/winex11.drv/unixlib.h +++ b/dlls/winex11.drv/unixlib.h @@ -46,11 +46,24 @@ struct create_desktop_params UINT height; };
+/* driver client callbacks called through NtUserDispatchCallback interface */ +struct x11drv_client_funcs +{ + user32_callback_func callback; + user32_callback_func dnd_enter_event; + user32_callback_func dnd_position_event; + user32_callback_func dnd_post_drop; + user32_callback_func ime_set_composition_string; + user32_callback_func ime_set_result; + user32_callback_func systray_change_owner; +}; + /* x11drv_init params */ struct init_params { WNDPROC foreign_window_proc; BOOL *show_systray; + const struct x11drv_client_funcs *client_funcs; };
struct systray_dock_params @@ -77,21 +90,6 @@ struct xim_preedit_state_params BOOL open; };
-/* driver client callbacks exposed with KernelCallbackTable interface */ -enum x11drv_client_funcs -{ - client_func_callback = NtUserDriverCallbackFirst, - client_func_dnd_enter_event, - client_func_dnd_position_event, - client_func_dnd_post_drop, - client_func_ime_set_composition_string, - client_func_ime_set_result, - client_func_systray_change_owner, - client_func_last -}; - -C_ASSERT( client_func_last <= NtUserDriverCallbackLast + 1 ); - /* simplified interface for client callbacks requiring only a single UINT parameter */ enum client_callback { diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h index f8f8fe3d4d1..03eb58725bf 100644 --- a/dlls/winex11.drv/x11drv.h +++ b/dlls/winex11.drv/x11drv.h @@ -414,6 +414,7 @@ static inline size_t get_property_size( int format, unsigned long count ) return count * (format / 8); }
+extern struct x11drv_client_funcs client_funcs DECLSPEC_HIDDEN; extern XVisualInfo default_visual DECLSPEC_HIDDEN; extern XVisualInfo argb_visual DECLSPEC_HIDDEN; extern Colormap default_colormap DECLSPEC_HIDDEN; @@ -838,8 +839,7 @@ extern NTSTATUS x11drv_tablet_info( void *arg ) DECLSPEC_HIDDEN; extern NTSTATUS x11drv_xim_preedit_state( void *arg ) DECLSPEC_HIDDEN; extern NTSTATUS x11drv_xim_reset( void *arg ) DECLSPEC_HIDDEN;
-extern NTSTATUS x11drv_client_func( enum x11drv_client_funcs func, const void *params, - ULONG size ) DECLSPEC_HIDDEN; +extern NTSTATUS x11drv_client_func( user32_callback_func func, const void *params, ULONG size ) DECLSPEC_HIDDEN; extern NTSTATUS x11drv_client_call( enum client_callback func, UINT arg ) DECLSPEC_HIDDEN;
/* GDI helpers */ diff --git a/dlls/winex11.drv/x11drv_main.c b/dlls/winex11.drv/x11drv_main.c index 497e270ee8a..86dca9893f2 100644 --- a/dlls/winex11.drv/x11drv_main.c +++ b/dlls/winex11.drv/x11drv_main.c @@ -62,6 +62,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(x11drv); WINE_DECLARE_DEBUG_CHANNEL(synchronous); WINE_DECLARE_DEBUG_CHANNEL(winediag);
+struct x11drv_client_funcs client_funcs; + XVisualInfo default_visual = { 0 }; XVisualInfo argb_visual = { 0 }; Colormap default_colormap = None; @@ -669,6 +671,8 @@ static NTSTATUS x11drv_init( void *arg ) dlopen( SONAME_LIBXEXT, RTLD_NOW|RTLD_GLOBAL ); #endif
+ client_funcs = *params->client_funcs; + setup_options();
/* Open display */ @@ -1309,18 +1313,19 @@ done: return status; }
-NTSTATUS x11drv_client_func( enum x11drv_client_funcs id, const void *params, ULONG size ) +NTSTATUS x11drv_client_func( user32_callback_func func, const void *params, ULONG size ) { void *ret_ptr; ULONG ret_len; - return KeUserModeCallback( id, params, size, &ret_ptr, &ret_len ); + struct user32_callback_params cbparams = { func, (void*)params, size }; + return KeUserModeCallback( NtUserDispatchCallback, &cbparams, sizeof(cbparams), &ret_ptr, &ret_len ); }
NTSTATUS x11drv_client_call( enum client_callback func, UINT arg ) { struct client_callback_params params = { .id = func, .arg = arg }; - return x11drv_client_func( client_func_callback, ¶ms, sizeof(params) ); + return x11drv_client_func( client_funcs.callback, ¶ms, sizeof(params) ); }
@@ -1352,11 +1357,13 @@ static NTSTATUS x11drv_wow64_init( void *arg ) { ULONG foreign_window_proc; ULONG show_systray; + ULONG client_funcs; } *params32 = arg; struct init_params params;
params.foreign_window_proc = UlongToPtr( params32->foreign_window_proc ); params.show_systray = UlongToPtr( params32->show_systray ); + params.client_funcs = UlongToPtr( params32->client_funcs ); return x11drv_init( ¶ms ); }
diff --git a/dlls/winex11.drv/xim.c b/dlls/winex11.drv/xim.c index 00c15bb3bcf..1a06036df6b 100644 --- a/dlls/winex11.drv/xim.c +++ b/dlls/winex11.drv/xim.c @@ -92,7 +92,7 @@ static void X11DRV_ImmSetInternalString(DWORD dwOffset, if (lpComp) memcpy(ptr_new, lpComp, byte_length); dwCompStringLength += byte_expansion;
- x11drv_client_func( client_func_ime_set_composition_string, + x11drv_client_func( client_funcs.ime_set_composition_string, CompositionString, dwCompStringLength ); }
@@ -106,7 +106,7 @@ void X11DRV_XIMLookupChars( const char *str, DWORD count ) if (!(output = malloc( count * sizeof(WCHAR) ))) return; len = ntdll_umbstowcs( str, count, output, count );
- x11drv_client_func( client_func_ime_set_result, output, len * sizeof(WCHAR) ); + x11drv_client_func( client_funcs.ime_set_result, output, len * sizeof(WCHAR) ); free( output ); }
From: Torge Matthies tmatthies@codeweavers.com
Signed-off-by: Torge Matthies tmatthies@codeweavers.com --- dlls/winemac.drv/dllmain.c | 14 +++----------- dlls/winemac.drv/event.c | 10 +++++----- dlls/winemac.drv/image.c | 2 +- dlls/winemac.drv/macdrv.h | 4 ++-- dlls/winemac.drv/macdrv_main.c | 9 +++++++-- dlls/winemac.drv/unixlib.h | 28 +++++++++++++--------------- dlls/winemac.drv/window.c | 2 +- 7 files changed, 32 insertions(+), 37 deletions(-)
diff --git a/dlls/winemac.drv/dllmain.c b/dlls/winemac.drv/dllmain.c index 083c539dd26..cea432b3a71 100644 --- a/dlls/winemac.drv/dllmain.c +++ b/dlls/winemac.drv/dllmain.c @@ -367,8 +367,7 @@ cleanup: return 0; }
-typedef NTSTATUS (WINAPI *kernel_callback)(void *params, ULONG size); -static const kernel_callback kernel_callbacks[] = +static const struct macdrv_client_funcs client_funcs = { macdrv_app_icon, macdrv_app_quit_request, @@ -379,13 +378,10 @@ static const kernel_callback kernel_callbacks[] = macdrv_ime_set_text, };
-C_ASSERT(NtUserDriverCallbackFirst + ARRAYSIZE(kernel_callbacks) == client_func_last); -
static BOOL process_attach(void) { struct init_params params; - void **callback_table;
struct localized_string *str; struct localized_string strings[] = { @@ -413,12 +409,8 @@ static BOOL process_attach(void) for (str = strings; str->id; str++) str->len = LoadStringW(macdrv_module, str->id, (WCHAR *)&str->str, 0); params.strings = strings; - - if (MACDRV_CALL(init, ¶ms)) return FALSE; - - callback_table = NtCurrentTeb()->Peb->KernelCallbackTable; - memcpy( callback_table + NtUserDriverCallbackFirst, kernel_callbacks, sizeof(kernel_callbacks) ); - return TRUE; + params.client_funcs = &client_funcs; + return !MACDRV_CALL(init, ¶ms); }
BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, void *reserved) diff --git a/dlls/winemac.drv/event.c b/dlls/winemac.drv/event.c index 6ca46f55dff..dfd8279fc06 100644 --- a/dlls/winemac.drv/event.c +++ b/dlls/winemac.drv/event.c @@ -170,7 +170,7 @@ static void macdrv_im_set_text(const macdrv_event *event) if (length) CFStringGetCharacters(event->im_set_text.text, CFRangeMake(0, length), params->text);
- macdrv_client_func(client_func_ime_set_text, params, size); + macdrv_client_func(client_funcs.ime_set_text, params, size); }
/*********************************************************************** @@ -235,7 +235,7 @@ static BOOL query_drag_drop(macdrv_query *query) params.y = query->drag_drop.y + data->whole_rect.top; params.handle = (UINT_PTR)query->drag_drop.pasteboard; release_win_data(data); - return macdrv_client_func(client_func_dnd_query_drop, ¶ms, sizeof(params)); + return macdrv_client_func(client_funcs.dnd_query_drop, ¶ms, sizeof(params)); }
/************************************************************************** @@ -245,7 +245,7 @@ static BOOL query_drag_exited(macdrv_query *query) { struct dnd_query_exited_params params; params.hwnd = HandleToUlong(macdrv_get_window_hwnd(query->window)); - return macdrv_client_func(client_func_dnd_query_exited, ¶ms, sizeof(params)); + return macdrv_client_func(client_funcs.dnd_query_exited, ¶ms, sizeof(params)); }
@@ -272,7 +272,7 @@ static BOOL query_drag_operation(macdrv_query *query) params.handle = (UINT_PTR)query->drag_operation.pasteboard; release_win_data(data);
- effect = macdrv_client_func(client_func_dnd_query_drag, ¶ms, sizeof(params)); + effect = macdrv_client_func(client_funcs.dnd_query_drag, ¶ms, sizeof(params)); if (!effect) return FALSE;
query->drag_operation.accepted_op = dropeffect_to_drag_operation(effect, @@ -302,7 +302,7 @@ BOOL query_ime_char_rect(macdrv_query* query) params.result = (UINT_PTR)&result; params.location = range->location; params.length = range->length; - ret = macdrv_client_func(client_func_ime_query_char_rect, ¶ms, sizeof(params)); + ret = macdrv_client_func(client_funcs.ime_query_char_rect, ¶ms, sizeof(params)); *range = CFRangeMake(result.location, result.length); *rect = cgrect_from_rect(result.rect);
diff --git a/dlls/winemac.drv/image.c b/dlls/winemac.drv/image.c index 857684db9c2..bfea9b8ac6d 100644 --- a/dlls/winemac.drv/image.c +++ b/dlls/winemac.drv/image.c @@ -256,7 +256,7 @@ CFArrayRef create_app_icon_images(void)
TRACE("()\n");
- macdrv_client_func(client_func_app_icon, ¶ms, sizeof(params)); + macdrv_client_func(client_funcs.app_icon, ¶ms, sizeof(params));
if (!icons.count) return NULL;
diff --git a/dlls/winemac.drv/macdrv.h b/dlls/winemac.drv/macdrv.h index ea51cf0f702..8e262a23f68 100644 --- a/dlls/winemac.drv/macdrv.h +++ b/dlls/winemac.drv/macdrv.h @@ -35,6 +35,7 @@ #include "wine/gdi_driver.h" #include "unixlib.h"
+extern struct macdrv_client_funcs client_funcs;
extern BOOL skip_single_buffer_flushes DECLSPEC_HIDDEN; extern BOOL allow_vsync DECLSPEC_HIDDEN; @@ -280,8 +281,7 @@ extern NTSTATUS macdrv_dnd_retain(void *arg) DECLSPEC_HIDDEN; extern NTSTATUS macdrv_ime_process_text_input(void *arg) DECLSPEC_HIDDEN; extern NTSTATUS macdrv_notify_icon(void *arg) DECLSPEC_HIDDEN;
-extern NTSTATUS macdrv_client_func(enum macdrv_client_funcs func, const void *params, - ULONG size) DECLSPEC_HIDDEN; +extern NTSTATUS macdrv_client_func(user32_callback_func func, const void *params, ULONG size) DECLSPEC_HIDDEN;
/* user helpers */
diff --git a/dlls/winemac.drv/macdrv_main.c b/dlls/winemac.drv/macdrv_main.c index 2350ec61b21..38d34f3a303 100644 --- a/dlls/winemac.drv/macdrv_main.c +++ b/dlls/winemac.drv/macdrv_main.c @@ -49,6 +49,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(macdrv);
C_ASSERT(NUM_EVENT_TYPES <= sizeof(macdrv_event_mask) * 8);
+struct macdrv_client_funcs client_funcs; + int topmost_float_inactive = TOPMOST_FLOAT_INACTIVE_NONFULLSCREEN; int capture_displays_for_fullscreen = 0; BOOL skip_single_buffer_flushes = FALSE; @@ -444,6 +446,8 @@ static NTSTATUS macdrv_init(void *arg) if (status != noErr || !(attributes & sessionHasGraphicAccess)) return STATUS_UNSUCCESSFUL;
+ client_funcs = *params->client_funcs; + init_win_context(); setup_options(); load_strings(params->strings); @@ -610,11 +614,12 @@ BOOL macdrv_SystemParametersInfo( UINT action, UINT int_param, void *ptr_param, }
-NTSTATUS macdrv_client_func(enum macdrv_client_funcs id, const void *params, ULONG size) +NTSTATUS macdrv_client_func(user32_callback_func func, const void *params, ULONG size) { void *ret_ptr; ULONG ret_len; - return KeUserModeCallback(id, params, size, &ret_ptr, &ret_len); + struct user32_callback_params cbparams = { func, params, size }; + return KeUserModeCallback(NtUserDispatchCallback, &cbparams, sizeof(cbparams), &ret_ptr, &ret_len); }
diff --git a/dlls/winemac.drv/unixlib.h b/dlls/winemac.drv/unixlib.h index 5fe19a94fee..a4fb610353a 100644 --- a/dlls/winemac.drv/unixlib.h +++ b/dlls/winemac.drv/unixlib.h @@ -80,9 +80,22 @@ struct localized_string UINT64 str; };
+/* driver client callbacks called through NtUserDispatchCallback interface */ +struct macdrv_client_funcs +{ + user32_callback_func app_icon; + user32_callback_func app_quit_request; + user32_callback_func dnd_query_drag; + user32_callback_func dnd_query_drop; + user32_callback_func dnd_query_exited; + user32_callback_func ime_query_char_rect; + user32_callback_func ime_set_text; +}; + struct init_params { struct localized_string *strings; + const struct macdrv_client_funcs *client_funcs; };
/* macdrv_notify_icon params */ @@ -98,19 +111,6 @@ struct quit_result_params int result; };
-/* driver client callbacks exposed with KernelCallbackTable interface */ -enum macdrv_client_funcs -{ - client_func_app_icon = NtUserDriverCallbackFirst, - client_func_app_quit_request, - client_func_dnd_query_drag, - client_func_dnd_query_drop, - client_func_dnd_query_exited, - client_func_ime_query_char_rect, - client_func_ime_set_text, - client_func_last -}; - /* macdrv_app_icon result */ struct app_icon_entry { @@ -197,5 +197,3 @@ static inline void *param_ptr(UINT64 param) { return (void *)(UINT_PTR)param; } - -C_ASSERT(client_func_last <= NtUserDriverCallbackLast + 1); diff --git a/dlls/winemac.drv/window.c b/dlls/winemac.drv/window.c index 37696f02d25..37b73276284 100644 --- a/dlls/winemac.drv/window.c +++ b/dlls/winemac.drv/window.c @@ -2670,7 +2670,7 @@ void macdrv_app_quit_requested(const macdrv_event *event) if (event->app_quit_requested.reason == QUIT_REASON_LOGOUT) params.flags = ENDSESSION_LOGOFF;
- macdrv_client_func(client_func_app_quit_request, ¶ms, sizeof(params)); + macdrv_client_func(client_funcs.app_quit_request, ¶ms, sizeof(params)); }
From: Torge Matthies tmatthies@codeweavers.com
Signed-off-by: Torge Matthies tmatthies@codeweavers.com --- dlls/wow64win/user.c | 61 -------------------------------------------- include/ntuser.h | 3 --- 2 files changed, 64 deletions(-)
diff --git a/dlls/wow64win/user.c b/dlls/wow64win/user.c index dba12fe6628..564c865641f 100644 --- a/dlls/wow64win/user.c +++ b/dlls/wow64win/user.c @@ -1022,56 +1022,6 @@ static NTSTATUS WINAPI wow64_NtUserThunkLock( void *arg, ULONG size ) return dispatch_callback( NtUserThunkLock, arg, size ); }
-static NTSTATUS WINAPI wow64_NtUserDriverCallbackFirst0( void *arg, ULONG size ) -{ - return dispatch_callback( NtUserDriverCallbackFirst + 0, arg, size ); -} - -static NTSTATUS WINAPI wow64_NtUserDriverCallbackFirst1( void *arg, ULONG size ) -{ - return dispatch_callback( NtUserDriverCallbackFirst + 1, arg, size ); -} - -static NTSTATUS WINAPI wow64_NtUserDriverCallbackFirst2( void *arg, ULONG size ) -{ - return dispatch_callback( NtUserDriverCallbackFirst + 2, arg, size ); -} - -static NTSTATUS WINAPI wow64_NtUserDriverCallbackFirst3( void *arg, ULONG size ) -{ - return dispatch_callback( NtUserDriverCallbackFirst + 3, arg, size ); -} - -static NTSTATUS WINAPI wow64_NtUserDriverCallbackFirst4( void *arg, ULONG size ) -{ - return dispatch_callback( NtUserDriverCallbackFirst + 4, arg, size ); -} - -static NTSTATUS WINAPI wow64_NtUserDriverCallbackFirst5( void *arg, ULONG size ) -{ - return dispatch_callback( NtUserDriverCallbackFirst + 5, arg, size ); -} - -static NTSTATUS WINAPI wow64_NtUserDriverCallbackFirst6( void *arg, ULONG size ) -{ - return dispatch_callback( NtUserDriverCallbackFirst + 6, arg, size ); -} - -static NTSTATUS WINAPI wow64_NtUserDriverCallbackFirst7( void *arg, ULONG size ) -{ - return dispatch_callback( NtUserDriverCallbackFirst + 7, arg, size ); -} - -static NTSTATUS WINAPI wow64_NtUserDriverCallbackFirst8( void *arg, ULONG size ) -{ - return dispatch_callback( NtUserDriverCallbackFirst + 8, arg, size ); -} - -static NTSTATUS WINAPI wow64_NtUserDriverCallbackFirst9( void *arg, ULONG size ) -{ - return dispatch_callback( NtUserDriverCallbackFirst + 9, arg, size ); -} - user_callback user_callbacks[] = { /* user32 callbacks */ @@ -1097,17 +1047,6 @@ user_callback user_callbacks[] = /* win16 hooks */ wow64_NtUserCallFreeIcon, wow64_NtUserThunkLock, - /* Driver-specific callbacks */ - wow64_NtUserDriverCallbackFirst0, - wow64_NtUserDriverCallbackFirst1, - wow64_NtUserDriverCallbackFirst2, - wow64_NtUserDriverCallbackFirst3, - wow64_NtUserDriverCallbackFirst4, - wow64_NtUserDriverCallbackFirst5, - wow64_NtUserDriverCallbackFirst6, - wow64_NtUserDriverCallbackFirst7, - wow64_NtUserDriverCallbackFirst8, - wow64_NtUserDriverCallbackFirst9, };
C_ASSERT( ARRAYSIZE(user_callbacks) == NtUserCallCount ); diff --git a/include/ntuser.h b/include/ntuser.h index 09f56ab252d..e80b2979286 100644 --- a/include/ntuser.h +++ b/include/ntuser.h @@ -50,9 +50,6 @@ enum /* win16 hooks */ NtUserCallFreeIcon, NtUserThunkLock, - /* Driver-specific callbacks */ - NtUserDriverCallbackFirst, - NtUserDriverCallbackLast = NtUserDriverCallbackFirst + 9, NtUserCallCount };
Hi,
It looks like your patch introduced the new failures shown below. Please investigate and fix them before resubmitting your patch. If they are not new, fixing them anyway would help a lot. Otherwise please ask for the known failures list to be updated.
The tests also ran into some preexisting test failures. If you know how to fix them that would be helpful. See the TestBot job for the details:
The full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=125581
Your paranoid android.
=== debian11 (32 bit report) ===
d3drm: d3drm.c:5223: Test failed: Cannot create IM device, skipping tests.
=== debian11 (build log) ===
0638:err:winediag:d3d_device_create The application wants to create a Direct3D device, but the current DirectDrawRenderer does not support this. 0638:err:winediag:d3d_device_create The application wants to create a Direct3D device, but the current DirectDrawRenderer does not support this. 0638:err:winediag:d3d_device_create The application wants to create a Direct3D device, but the current DirectDrawRenderer does not support this.
On Mon Oct 31 19:05:24 2022 +0000, Torge Matthies wrote:
actually I probably shouldn't copy the data back
how's this?
eRrOr UnUsEd VaRiAbLe