[User32] Support WM_COPYGLOBALDATA

Implement support for WM_COPYGLOBALDATA. Needs more tests.

Tested DropTest from CORE-15836.
This commit is contained in:
jimtabor 2019-03-13 12:16:52 -05:00
parent 77e0409ea9
commit bc534efbc5
2 changed files with 36 additions and 1 deletions

View file

@ -748,6 +748,12 @@ User32DefWindowProc(HWND hWnd,
break;
}
case WM_COPYGLOBALDATA:
{
TRACE("WM_COPYGLOBALDATA hGlobal %p Size %d Flags 0x%x\n",lParam,wParam,GlobalFlags((HGLOBAL)lParam));
return lParam;
}
/* Move to Win32k !*/
case WM_SHOWWINDOW:
if (!lParam) break; // Call when it is necessary.

View file

@ -392,6 +392,13 @@ MsgiUMToKMMessage(PMSG UMMsg, PMSG KMMsg, BOOL Posted)
}
break;
case WM_COPYGLOBALDATA:
{
KMMsg->lParam = (LPARAM)GlobalLock((HGLOBAL)UMMsg->lParam);;
TRACE("WM_COPYGLOBALDATA get data ptr %p\n",KMMsg->lParam);
}
break;
default:
break;
}
@ -408,6 +415,11 @@ MsgiUMToKMCleanup(PMSG UMMsg, PMSG KMMsg)
case WM_COPYDATA:
HeapFree(GetProcessHeap(), 0, (LPVOID) KMMsg->lParam);
break;
case WM_COPYGLOBALDATA:
TRACE("WM_COPYGLOBALDATA cleanup return\n");
GlobalUnlock((HGLOBAL)UMMsg->lParam);
GlobalFree((HGLOBAL)UMMsg->lParam);
break;
default:
break;
}
@ -452,6 +464,18 @@ MsgiKMToUMMessage(PMSG KMMsg, PMSG UMMsg)
}
break;
case WM_COPYGLOBALDATA:
{
PVOID Data;
HGLOBAL hGlobal = GlobalAlloc(GHND | GMEM_SHARE, KMMsg->wParam);
Data = GlobalLock(hGlobal);
if (Data) RtlCopyMemory(Data, (PVOID)KMMsg->lParam, KMMsg->wParam);
GlobalUnlock(hGlobal);
TRACE("WM_COPYGLOBALDATA to User hGlobal %p\n",hGlobal);
UMMsg->lParam = (LPARAM)hGlobal;
}
break;
default:
break;
}
@ -465,7 +489,7 @@ MsgiKMToUMCleanup(PMSG KMMsg, PMSG UMMsg)
switch (KMMsg->message)
{
case WM_DDE_EXECUTE:
#ifdef TODO
#ifdef TODO // Kept as historic.
HeapFree(GetProcessHeap(), 0, (LPVOID) KMMsg->lParam);
GlobalUnlock((HGLOBAL) UMMsg->lParam);
#endif
@ -2935,6 +2959,11 @@ User32CallWindowProcFromKernel(PVOID Arguments, ULONG ArgumentLength)
TRACE("WM_CREATE CB %p lParam %p\n",CallbackArgs, KMMsg.lParam);
break;
}
case WM_NCCREATE:
{
TRACE("WM_NCCREATE CB %p lParam %p\n",CallbackArgs, KMMsg.lParam);
break;
}
case WM_SYSTIMER:
{
TRACE("WM_SYSTIMER %p\n",KMMsg.hwnd);