From c865c87d3061ee9d1027a513af1022be7beb0e5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A9=20van=20Geldorp?= Date: Sat, 17 May 2003 14:37:23 +0000 Subject: [PATCH] When sending WM_WINDOWPOSCHANGING and WM_WINDOWPOSCHANGED messages from Win32k, make sure the WINDOWPOS structure referenced by lParam is located in user space svn path=/trunk/; revision=4703 --- reactos/lib/user32/windows/window.c | 48 ++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/reactos/lib/user32/windows/window.c b/reactos/lib/user32/windows/window.c index 81c8d61ca15..2a920382e19 100644 --- a/reactos/lib/user32/windows/window.c +++ b/reactos/lib/user32/windows/window.c @@ -1,4 +1,4 @@ -/* $Id: window.c,v 1.30 2003/05/17 09:20:23 gvg Exp $ +/* $Id: window.c,v 1.31 2003/05/17 14:37:23 gvg Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS user32.dll @@ -131,6 +131,52 @@ User32SendNCCREATEMessageForKernel(PVOID Arguments, ULONG ArgumentLength) return(ZwCallbackReturn(&Result, sizeof(LRESULT), STATUS_SUCCESS)); } +NTSTATUS STDCALL +User32SendWINDOWPOSCHANGINGMessageForKernel(PVOID Arguments, ULONG ArgumentLength) +{ + PSENDWINDOWPOSCHANGING_CALLBACK_ARGUMENTS CallbackArgs; + WNDPROC Proc; + LRESULT Result; + + DPRINT("User32SendWINDOWPOSCHANGINGMessageForKernel.\n"); + CallbackArgs = (PSENDWINDOWPOSCHANGING_CALLBACK_ARGUMENTS)Arguments; + if (ArgumentLength != sizeof(SENDWINDOWPOSCHANGING_CALLBACK_ARGUMENTS)) + { + DPRINT("Wrong length.\n"); + return(STATUS_INFO_LENGTH_MISMATCH); + } + Proc = (WNDPROC)GetWindowLongW(CallbackArgs->Wnd, GWL_WNDPROC); + DPRINT("Proc %X\n", Proc); + /* Call the window procedure; notice kernel messages are always unicode. */ + Result = CallWindowProcW(Proc, CallbackArgs->Wnd, WM_WINDOWPOSCHANGING, 0, + (LPARAM)&CallbackArgs->WindowPos); + DPRINT("Returning result %d.\n", Result); + return(ZwCallbackReturn(&Result, sizeof(LRESULT), STATUS_SUCCESS)); +} + +NTSTATUS STDCALL +User32SendWINDOWPOSCHANGEDMessageForKernel(PVOID Arguments, ULONG ArgumentLength) +{ + PSENDWINDOWPOSCHANGED_CALLBACK_ARGUMENTS CallbackArgs; + WNDPROC Proc; + LRESULT Result; + + DPRINT("User32SendWINDOWPOSCHANGEDMessageForKernel.\n"); + CallbackArgs = (PSENDWINDOWPOSCHANGED_CALLBACK_ARGUMENTS)Arguments; + if (ArgumentLength != sizeof(SENDWINDOWPOSCHANGED_CALLBACK_ARGUMENTS)) + { + DPRINT("Wrong length.\n"); + return(STATUS_INFO_LENGTH_MISMATCH); + } + Proc = (WNDPROC)GetWindowLongW(CallbackArgs->Wnd, GWL_WNDPROC); + DPRINT("Proc %X\n", Proc); + /* Call the window procedure; notice kernel messages are always unicode. */ + Result = CallWindowProcW(Proc, CallbackArgs->Wnd, WM_WINDOWPOSCHANGED, 0, + (LPARAM)&CallbackArgs->WindowPos); + DPRINT("Returning result %d.\n", Result); + return(ZwCallbackReturn(&Result, sizeof(LRESULT), STATUS_SUCCESS)); +} + NTSTATUS STDCALL User32CallSendAsyncProcForKernel(PVOID Arguments, ULONG ArgumentLength) {