1
0
Fork 0
mirror of synced 2025-03-07 03:53:26 +01:00

user32: Return result through NtCallbackReturn for the enum monitors callback.

This commit is contained in:
Alexandre Julliard 2024-01-18 15:07:39 +01:00
parent a9e42169ca
commit 3f9de12980
3 changed files with 16 additions and 12 deletions

View file

@ -18,6 +18,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/ */
#include "ntstatus.h"
#define WIN32_NO_STATUS
#include "user_private.h" #include "user_private.h"
#include "controls.h" #include "controls.h"
#include "wine/asm.h" #include "wine/asm.h"
@ -849,14 +851,17 @@ __ASM_GLOBAL_FUNC( enum_mon_callback_wrapper,
"ret" ) "ret" )
#endif /* __i386__ */ #endif /* __i386__ */
BOOL WINAPI User32CallEnumDisplayMonitor( struct enum_display_monitor_params *params, ULONG size ) NTSTATUS WINAPI User32CallEnumDisplayMonitor( void *args, ULONG size )
{ {
struct enum_display_monitor_params *params = args;
BOOL ret;
#ifdef __i386__ #ifdef __i386__
return enum_mon_callback_wrapper( params->proc, params->monitor, params->hdc, ret = enum_mon_callback_wrapper( params->proc, params->monitor, params->hdc,
&params->rect, params->lparam ); &params->rect, params->lparam );
#else #else
return params->proc( params->monitor, params->hdc, &params->rect, params->lparam ); ret = params->proc( params->monitor, params->hdc, &params->rect, params->lparam );
#endif #endif
return NtCallbackReturn( &ret, sizeof(ret), STATUS_SUCCESS );
} }
/*********************************************************************** /***********************************************************************

View file

@ -81,7 +81,7 @@ extern ATOM get_class_info( HINSTANCE instance, const WCHAR *name, WNDCLASSEXW *
/* kernel callbacks */ /* kernel callbacks */
BOOL WINAPI User32CallEnumDisplayMonitor( struct enum_display_monitor_params *params, ULONG size ); NTSTATUS WINAPI User32CallEnumDisplayMonitor( void *args, ULONG size );
BOOL WINAPI User32CallSendAsyncCallback( const struct send_async_params *params, ULONG size ); BOOL WINAPI User32CallSendAsyncCallback( const struct send_async_params *params, ULONG size );
BOOL WINAPI User32CallWinEventHook( const struct win_event_hook_params *params, ULONG size ); BOOL WINAPI User32CallWinEventHook( const struct win_event_hook_params *params, ULONG size );
BOOL WINAPI User32CallWindowProc( struct win_proc_params *params, ULONG size ); BOOL WINAPI User32CallWindowProc( struct win_proc_params *params, ULONG size );

View file

@ -3435,18 +3435,17 @@ BOOL WINAPI NtUserEnumDisplayMonitors( HDC hdc, RECT *rect, MONITORENUMPROC proc
params.proc = proc; params.proc = proc;
params.hdc = hdc; params.hdc = hdc;
params.lparam = lparam; params.lparam = lparam;
for (i = 0; i < count; i++) for (i = 0; i < count && ret; i++)
{ {
void *ret_ptr; void *ret_ptr;
ULONG ret_len; ULONG ret_len;
NTSTATUS status;
params.monitor = enum_info[i].handle; params.monitor = enum_info[i].handle;
params.rect = enum_info[i].rect; params.rect = enum_info[i].rect;
if (!KeUserModeCallback( NtUserCallEnumDisplayMonitor, &params, sizeof(params), status = KeUserModeCallback( NtUserCallEnumDisplayMonitor, &params, sizeof(params),
&ret_ptr, &ret_len )) &ret_ptr, &ret_len );
{ if (!status && ret_len == sizeof(ret)) ret = *(BOOL *)ret_ptr;
ret = FALSE; else ret = FALSE;
break;
}
} }
if (enum_info != enum_buf) free( enum_info ); if (enum_info != enum_buf) free( enum_info );
return ret; return ret;