[USER32] Small fixes for messages carrying pointers

SendNotifyMessageW: It doesn't support messages with pointers so there is no need to call MsgiUMToKMMessage
SendMessageTimeoutW, SendMessageTimeoutA: These two do support marshaling pointers so they need to use MsgiUMToKMMessage.
This is actually a bug that happens only in the rare case where we send a WM_COPYDATA with a timeout.
This commit is contained in:
Giannis Adamopoulos 2018-02-24 20:26:24 +02:00
parent ec91188fff
commit e3610035ce

View file

@ -2587,7 +2587,7 @@ SendMessageTimeoutA(
UINT uTimeout,
PDWORD_PTR lpdwResult)
{
MSG AnsiMsg, UcMsg;
MSG AnsiMsg, UcMsg, KMMsg;
LRESULT Result;
DOSENDMESSAGE dsm;
@ -2618,14 +2618,21 @@ SendMessageTimeoutA(
return FALSE;
}
if (!MsgiUMToKMMessage(&UcMsg, &KMMsg, FALSE))
{
MsgiAnsiToUnicodeCleanup(&UcMsg, &AnsiMsg);
return FALSE;
}
Result = NtUserMessageCall( hWnd,
UcMsg.message,
UcMsg.wParam,
UcMsg.lParam,
KMMsg.message,
KMMsg.wParam,
KMMsg.lParam,
(ULONG_PTR)&dsm,
FNID_SENDMESSAGEWTOOPTION,
TRUE);
MsgiUMToKMCleanup(&UcMsg, &KMMsg);
MsgiAnsiToUnicodeReply(&UcMsg, &AnsiMsg, &Result);
if (lpdwResult) *lpdwResult = dsm.Result;
@ -2652,6 +2659,7 @@ SendMessageTimeoutW(
{
LRESULT Result;
DOSENDMESSAGE dsm;
MSG UMMsg, KMMsg;
if ( Msg & ~WM_MAXIMUM || fuFlags & ~(SMTO_NOTIMEOUTIFNOTHUNG|SMTO_ABORTIFHUNG|SMTO_BLOCK))
{
@ -2667,14 +2675,28 @@ SendMessageTimeoutW(
dsm.uTimeout = uTimeout;
dsm.Result = 0;
UMMsg.hwnd = hWnd;
UMMsg.message = Msg;
UMMsg.wParam = wParam;
UMMsg.lParam = lParam;
UMMsg.time = 0;
UMMsg.pt.x = 0;
UMMsg.pt.y = 0;
if (! MsgiUMToKMMessage(&UMMsg, &KMMsg, TRUE))
{
return FALSE;
}
Result = NtUserMessageCall( hWnd,
Msg,
wParam,
lParam,
KMMsg.message,
KMMsg.wParam,
KMMsg.lParam,
(ULONG_PTR)&dsm,
FNID_SENDMESSAGEWTOOPTION,
FALSE);
MsgiUMToKMCleanup(&UMMsg, &KMMsg);
if (lpdwResult) *lpdwResult = dsm.Result;
SPY_ExitMessage(SPY_RESULT_OK, hWnd, Msg, Result, wParam, lParam);
@ -2731,7 +2753,6 @@ SendNotifyMessageW(
WPARAM wParam,
LPARAM lParam)
{
MSG UMMsg, KMMsg;
LRESULT Result;
if (is_pointer_message(Msg))
@ -2740,27 +2761,14 @@ SendNotifyMessageW(
return FALSE;
}
UMMsg.hwnd = hWnd;
UMMsg.message = Msg;
UMMsg.wParam = wParam;
UMMsg.lParam = lParam;
UMMsg.time = 0;
UMMsg.pt.x = 0;
UMMsg.pt.y = 0;
if (! MsgiUMToKMMessage(&UMMsg, &KMMsg, TRUE))
{
return FALSE;
}
Result = NtUserMessageCall( hWnd,
KMMsg.message,
KMMsg.wParam,
KMMsg.lParam,
Msg,
wParam,
lParam,
0,
FNID_SENDNOTIFYMESSAGE,
FALSE);
MsgiUMToKMCleanup(&UMMsg, &KMMsg);
return Result;
}