Fix CBT create hook for NULL window name

svn path=/trunk/; revision=7077
This commit is contained in:
Gé van Geldorp 2003-12-15 19:32:32 +00:00
parent 2eea196a4a
commit 2836686955
3 changed files with 36 additions and 21 deletions

View file

@ -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;
}

View file

@ -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,

View file

@ -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)