user32: Return result through NtCallbackReturn for the enum monitors callback.
This commit is contained in:
parent
a9e42169ca
commit
3f9de12980
3 changed files with 16 additions and 12 deletions
dlls
|
@ -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,
|
||||||
¶ms->rect, params->lparam );
|
¶ms->rect, params->lparam );
|
||||||
#else
|
#else
|
||||||
return params->proc( params->monitor, params->hdc, ¶ms->rect, params->lparam );
|
ret = params->proc( params->monitor, params->hdc, ¶ms->rect, params->lparam );
|
||||||
#endif
|
#endif
|
||||||
|
return NtCallbackReturn( &ret, sizeof(ret), STATUS_SUCCESS );
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
|
|
|
@ -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 );
|
||||||
|
|
|
@ -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, ¶ms, sizeof(params),
|
status = KeUserModeCallback( NtUserCallEnumDisplayMonitor, ¶ms, 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;
|
||||||
|
|
Loading…
Add table
Reference in a new issue