From 28366869557da32eab42b3a751f9500e3af8a255 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A9=20van=20Geldorp?= Date: Mon, 15 Dec 2003 19:32:32 +0000 Subject: [PATCH] Fix CBT create hook for NULL window name svn path=/trunk/; revision=7077 --- reactos/lib/user32/windows/hook.c | 23 ++++++++++++++++------- reactos/subsys/win32k/ntuser/callback.c | 22 ++++++++++++++-------- reactos/subsys/win32k/ntuser/msgqueue.c | 12 ++++++------ 3 files changed, 36 insertions(+), 21 deletions(-) diff --git a/reactos/lib/user32/windows/hook.c b/reactos/lib/user32/windows/hook.c index 79b0695f821..43b35cd4e4b 100644 --- a/reactos/lib/user32/windows/hook.c +++ b/reactos/lib/user32/windows/hook.c @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* $Id: hook.c,v 1.12 2003/12/12 14:22:37 gvg Exp $ +/* $Id: hook.c,v 1.13 2003/12/15 19:32:31 gvg Exp $ * * PROJECT: ReactOS user32.dll * FILE: lib/user32/windows/input.c @@ -297,8 +297,11 @@ User32CallHookProcFromKernel(PVOID Arguments, ULONG ArgumentLength) CbtCreatewndExtra = (PHOOKPROC_CBT_CREATEWND_EXTRA_ARGUMENTS) ((PCHAR) Common + Common->lParam); Csw = CbtCreatewndExtra->Cs; - Csw.lpszName = (LPCWSTR)((PCHAR) CbtCreatewndExtra - + (ULONG) CbtCreatewndExtra->Cs.lpszName); + if (NULL != CbtCreatewndExtra->Cs.lpszName) + { + Csw.lpszName = (LPCWSTR)((PCHAR) CbtCreatewndExtra + + (ULONG) CbtCreatewndExtra->Cs.lpszName); + } if (0 != HIWORD(CbtCreatewndExtra->Cs.lpszClass)) { Csw.lpszClass = (LPCWSTR)((PCHAR) CbtCreatewndExtra @@ -308,9 +311,12 @@ User32CallHookProcFromKernel(PVOID Arguments, ULONG ArgumentLength) if (Common->Ansi) { memcpy(&Csa, &Csw, sizeof(CREATESTRUCTW)); - RtlInitUnicodeString(&UString, Csw.lpszName); - RtlUnicodeStringToAnsiString(&AString, &UString, TRUE); - Csa.lpszName = AString.Buffer; + if (NULL != Csw.lpszName) + { + RtlInitUnicodeString(&UString, Csw.lpszName); + RtlUnicodeStringToAnsiString(&AString, &UString, TRUE); + Csa.lpszName = AString.Buffer; + } if (0 != HIWORD(Csw.lpszClass)) { RtlInitUnicodeString(&UString, Csw.lpszClass); @@ -343,7 +349,10 @@ User32CallHookProcFromKernel(PVOID Arguments, ULONG ArgumentLength) { RtlFreeHeap(RtlGetProcessHeap(), 0, (LPSTR) Csa.lpszClass); } - RtlFreeHeap(RtlGetProcessHeap(), 0, (LPSTR) Csa.lpszName); + if (NULL != Csa.lpszName) + { + RtlFreeHeap(RtlGetProcessHeap(), 0, (LPSTR) Csa.lpszName); + } } break; } diff --git a/reactos/subsys/win32k/ntuser/callback.c b/reactos/subsys/win32k/ntuser/callback.c index 78311aa94e6..3c41c703f6e 100644 --- a/reactos/subsys/win32k/ntuser/callback.c +++ b/reactos/subsys/win32k/ntuser/callback.c @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* $Id: callback.c,v 1.19 2003/12/12 14:22:37 gvg Exp $ +/* $Id: callback.c,v 1.20 2003/12/15 19:32:32 gvg Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -448,9 +448,12 @@ IntCallHookProc(INT HookId, { case HCBT_CREATEWND: CbtCreateWnd = (CBT_CREATEWNDW *) lParam; - ArgumentLength += sizeof(HOOKPROC_CBT_CREATEWND_EXTRA_ARGUMENTS) - + (wcslen(CbtCreateWnd->lpcs->lpszName) - + 1) * sizeof(WCHAR); + ArgumentLength += sizeof(HOOKPROC_CBT_CREATEWND_EXTRA_ARGUMENTS); + if (NULL != CbtCreateWnd->lpcs->lpszName) + { + ArgumentLength += (wcslen(CbtCreateWnd->lpcs->lpszName) + + 1) * sizeof(WCHAR); + } if (0 != HIWORD(CbtCreateWnd->lpcs->lpszClass)) { ArgumentLength += (wcslen(CbtCreateWnd->lpcs->lpszClass) @@ -495,10 +498,13 @@ IntCallHookProc(INT HookId, CbtCreatewndExtra->Cs = *(CbtCreateWnd->lpcs); CbtCreatewndExtra->WndInsertAfter = CbtCreateWnd->hwndInsertAfter; Extra = (PCHAR) (CbtCreatewndExtra + 1); - memcpy(Extra, CbtCreateWnd->lpcs->lpszName, - (wcslen(CbtCreateWnd->lpcs->lpszName) + 1) * sizeof(WCHAR)); - CbtCreatewndExtra->Cs.lpszName = (LPCWSTR) (Extra - (PCHAR) CbtCreatewndExtra); - Extra += (wcslen(CbtCreateWnd->lpcs->lpszName) + 1) * sizeof(WCHAR); + if (NULL != CbtCreateWnd->lpcs->lpszName) + { + memcpy(Extra, CbtCreateWnd->lpcs->lpszName, + (wcslen(CbtCreateWnd->lpcs->lpszName) + 1) * sizeof(WCHAR)); + CbtCreatewndExtra->Cs.lpszName = (LPCWSTR) (Extra - (PCHAR) CbtCreatewndExtra); + Extra += (wcslen(CbtCreateWnd->lpcs->lpszName) + 1) * sizeof(WCHAR); + } if (0 != HIWORD(CbtCreateWnd->lpcs->lpszClass)) { memcpy(Extra, CbtCreateWnd->lpcs->lpszClass, diff --git a/reactos/subsys/win32k/ntuser/msgqueue.c b/reactos/subsys/win32k/ntuser/msgqueue.c index 492d03f46eb..4ebb1aef487 100644 --- a/reactos/subsys/win32k/ntuser/msgqueue.c +++ b/reactos/subsys/win32k/ntuser/msgqueue.c @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* $Id: msgqueue.c,v 1.48 2003/12/15 15:08:33 weiden Exp $ +/* $Id: msgqueue.c,v 1.49 2003/12/15 19:32:32 gvg Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -667,11 +667,11 @@ MsqDispatchOneSentMessage(PUSER_MESSAGE_QUEUE MessageQueue) ExReleaseFastMutex(&MessageQueue->Lock); /* Call the window procedure. */ - Result = IntCallWindowProc(NULL, - Message->Msg.hwnd, - Message->Msg.message, - Message->Msg.wParam, - Message->Msg.lParam); + Result = IntSendMessage(Message->Msg.hwnd, + Message->Msg.message, + Message->Msg.wParam, + Message->Msg.lParam, + TRUE); /* Let the sender know the result. */ if (Message->Result != NULL)