Author: jimtabor Date: Sun Apr 3 12:22:00 2011 New Revision: 51239
URL: http://svn.reactos.org/svn/reactos?rev=51239&view=rev Log: [Win32k] - Fix DDE test crash. it's a band-aide. - Fix the last two post quite message test, all pass now.
Modified: trunk/reactos/subsystems/win32/win32k/ntuser/message.c
Modified: trunk/reactos/subsystems/win32/win32k/ntuser/message.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntu... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/ntuser/message.c [iso-8859-1] (original) +++ trunk/reactos/subsystems/win32/win32k/ntuser/message.c [iso-8859-1] Sun Apr 3 12:22:00 2011 @@ -320,6 +320,7 @@ { PMSGMEMORY MsgMemoryEntry; PVOID PackedData; + SIZE_T size;
MsgMemoryEntry = FindMsgMemory(Msg);
@@ -328,7 +329,13 @@ /* Keep previous behavior */ return STATUS_SUCCESS; } - PackedData = ExAllocatePoolWithTag(NonPagedPool, MsgMemorySize(MsgMemoryEntry, wParam, lParam), TAG_MSG); + size = MsgMemorySize(MsgMemoryEntry, wParam, lParam); + if (!size) + { + DPRINT1("No size for lParamPacked\n"); + return STATUS_SUCCESS; + } + PackedData = ExAllocatePoolWithTag(NonPagedPool, size, TAG_MSG); RtlCopyMemory(PackedData, (PVOID)lParam, MsgMemorySize(MsgMemoryEntry, wParam, lParam)); *lParamPacked = (LPARAM)PackedData; } @@ -937,11 +944,7 @@
co_HOOK_CallHooks( WH_GETMESSAGE, HC_ACTION, RemoveMsg & PM_REMOVE, (LPARAM)pMsg);
- if ( bGMSG ) - { - Present = (WM_QUIT != pMsg->message); - break; - } + if ( bGMSG ) break; }
if ( bGMSG ) @@ -1044,7 +1047,6 @@ PTHREADINFO pti; MSG Message, KernelModeMsg; LARGE_INTEGER LargeTickCount; - PMSGMEMORY MsgMemoryEntry;
Message.hwnd = Wnd; Message.message = Msg; @@ -1054,11 +1056,18 @@ KeQueryTickCount(&LargeTickCount); Message.time = MsqCalculateMessageTime(&LargeTickCount);
- MsgMemoryEntry = FindMsgMemory(Message.message); + if (is_pointer_message(Message.message)) + { + EngSetLastError(ERROR_MESSAGE_SYNC_ONLY ); + return FALSE; + }
if( Msg >= WM_DDE_FIRST && Msg <= WM_DDE_LAST ) { NTSTATUS Status; + PMSGMEMORY MsgMemoryEntry; + + MsgMemoryEntry = FindMsgMemory(Message.message);
Status = CopyMsgToKernelMem(&KernelModeMsg, &Message, MsgMemoryEntry); if (! NT_SUCCESS(Status)) @@ -1075,12 +1084,6 @@ ExFreePool((PVOID) KernelModeMsg.lParam);
return TRUE; - } - - if (is_pointer_message(Message.message)) - { - EngSetLastError(ERROR_MESSAGE_SYNC_ONLY ); - return FALSE; }
if (!Wnd) @@ -1276,8 +1279,8 @@
if (STATUS_TIMEOUT == Status) { - /* -MSDN says: +/* + MSDN says: Microsoft Windows 2000: If GetLastError returns zero, then the function timed out. XP+ : If the function fails or times out, the return value is zero. @@ -1873,7 +1876,7 @@ _SEH2_END; }
- return Ret; + return Ret ? (WM_QUIT != pMsg->message) : FALSE; }
BOOL APIENTRY