Index: message.c
===================================================================
--- message.c   (revision 65582)
+++ message.c   (working copy)
@@ -2,7 +2,7 @@
  * COPYRIGHT:        See COPYING in the top level directory
  * PROJECT:          ReactOS Win32k subsystem
  * PURPOSE:          Messages
- * FILE:             subsystems/win32/win32k/ntuser/message.c
+ * FILE:             win32ss/user/ntuser/message.c
  * PROGRAMER:        Casper S. Hornstrup (chorns@users.sourceforge.net)
  */
 
@@ -216,6 +216,7 @@
                 {
                 COPYDATASTRUCT *cds = (COPYDATASTRUCT *)lParam;
                 Size = sizeof(COPYDATASTRUCT) + cds->cbData;
+                ERR("WM_COPYDATA data %d\n",cds->dwData);
                 }
                 break;
 
@@ -500,6 +501,12 @@
                 return Status;
             }
         }
+        if (KernelModeMsg->message == WM_COPYDATA)
+        {
+           // Only the current process or thread can free the message lParam pointer.
+           ERR("WM_COPYDATA Free2 ppi %p pti %p lParam %p\n",PsGetCurrentProcessWin32Process(),PsGetCurrentThreadWin32Thread(),KernelModeMsg->lParam);
+           //return STATUS_SUCCESS;
+        }
         ExFreePool((PVOID) KernelModeMsg->lParam);
     }
 
@@ -1389,7 +1396,7 @@
            (uFlags & SMTO_NOTIMEOUTIFNOTHUNG) &&
            !MsqIsHung(ptiSendTo)); // FIXME: Set window hung and add to a list.
 
-    if (STATUS_TIMEOUT == Status)
+    if (Status == STATUS_TIMEOUT)
     {
 /*
  *  MSDN says:
@@ -1412,6 +1419,12 @@
 
 CLEANUP:
     if (Window) UserDerefObjectCo(Window);
+    // Current Thread and it's a Copy Data message, then free kernel memory.
+    if ( !ptiSendTo && Msg == WM_COPYDATA )
+    {
+       ERR("WM_COPYDATA Free1 ppi %p pti %p lParam %p\n",PsGetCurrentProcessWin32Process(),Win32Thread,lParam);
+       //ExFreePool((PVOID) lParam);
+    }
     END_CLEANUP;
 }
 
@@ -1766,6 +1779,10 @@
           EngSetLastError(ERROR_INVALID_PARAMETER);
           return (dsm ? 0 : -1);
        }
+       if (Msg == WM_COPYDATA){
+       ERR("WM_COPYDATA Start ppi %p pti %p lParam %p\n",PsGetCurrentProcessWin32Process(),gptiCurrent,KernelModeMsg.lParam);
+       KeRosDumpStackFrames(NULL, 20);
+       }
     }
     else
     {