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/nt…
==============================================================================
--- 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