mirror of
https://github.com/reactos/reactos.git
synced 2025-08-04 04:36:40 +00:00
[Win32k|User32]
- Patch by Shinobu Maehara: fix for kernel-mode/user-mode marshalling of WM_DDE_ACK. svn path=/trunk/; revision=54396
This commit is contained in:
parent
2e7cf798a9
commit
cf1e809fa2
3 changed files with 31 additions and 50 deletions
|
@ -288,7 +288,7 @@ static const WORD *DIALOG_GetControl32( const WORD *p, DLG_CONTROL_INFO *info,
|
||||||
info->windowName = HeapAlloc( GetProcessHeap(), 0, sizeof(L"#65535") );
|
info->windowName = HeapAlloc( GetProcessHeap(), 0, sizeof(L"#65535") );
|
||||||
if (info->windowName != NULL)
|
if (info->windowName != NULL)
|
||||||
{
|
{
|
||||||
swprintf((LPWSTR)info->windowName, L"#%d", GET_WORD(p + 1));
|
wsprintf((LPWSTR)info->windowName, L"#%d", GET_WORD(p + 1));
|
||||||
info->windowNameFree = TRUE;
|
info->windowNameFree = TRUE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -234,36 +234,24 @@ MsgiUMToKMMessage(PMSG UMMsg, PMSG KMMsg, BOOL Posted)
|
||||||
{
|
{
|
||||||
PKMDDELPARAM DdeLparam;
|
PKMDDELPARAM DdeLparam;
|
||||||
DdeLparam = HeapAlloc(GetProcessHeap(), 0, sizeof(KMDDELPARAM));
|
DdeLparam = HeapAlloc(GetProcessHeap(), 0, sizeof(KMDDELPARAM));
|
||||||
if (NULL == DdeLparam)
|
if (NULL == DdeLparam || !UnpackDDElParam(
|
||||||
|
UMMsg->message, UMMsg->lParam,
|
||||||
|
&DdeLparam->uiLo, &DdeLparam->uiHi)) return FALSE;
|
||||||
|
/*
|
||||||
|
If this is a reply to WM_DDE_EXECUTE then
|
||||||
|
uiHi will contain a hMem, hence >= 0x10000.
|
||||||
|
Otherwise, it will be be an atom, a 16-bit value.
|
||||||
|
*/
|
||||||
|
if(DdeLparam->uiHi >= 0x10000)
|
||||||
{
|
{
|
||||||
return FALSE;
|
HGLOBAL h = DdeGetPair((HGLOBAL)(ULONG_PTR)DdeLparam->uiHi);
|
||||||
}
|
|
||||||
if (Posted)
|
|
||||||
{
|
|
||||||
DdeLparam->Packed = TRUE;
|
|
||||||
if (! UnpackDDElParam(UMMsg->message, UMMsg->lParam,
|
|
||||||
&DdeLparam->Value.Packed.uiLo,
|
|
||||||
&DdeLparam->Value.Packed.uiHi))
|
|
||||||
{
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
if (0 != HIWORD(DdeLparam->Value.Packed.uiHi))
|
|
||||||
{
|
|
||||||
/* uiHi should contain a hMem from WM_DDE_EXECUTE */
|
|
||||||
HGLOBAL h = DdeGetPair((HGLOBAL)(ULONG_PTR)DdeLparam->Value.Packed.uiHi);
|
|
||||||
if (NULL != h)
|
if (NULL != h)
|
||||||
{
|
{
|
||||||
GlobalFree((HGLOBAL)(ULONG_PTR)DdeLparam->Value.Packed.uiHi);
|
GlobalFree((HGLOBAL)(ULONG_PTR)DdeLparam->uiHi);
|
||||||
DdeLparam->Value.Packed.uiHi = (UINT_PTR) h;
|
DdeLparam->uiHi = (UINT_PTR) h;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
FreeDDElParam(UMMsg->message, UMMsg->lParam);
|
FreeDDElParam(UMMsg->message, UMMsg->lParam);
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
DdeLparam->Packed = FALSE;
|
|
||||||
DdeLparam->Value.Unpacked = UMMsg->lParam;
|
|
||||||
}
|
|
||||||
KMMsg->lParam = (LPARAM) DdeLparam;
|
KMMsg->lParam = (LPARAM) DdeLparam;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -376,17 +364,8 @@ MsgiKMToUMMessage(PMSG KMMsg, PMSG UMMsg)
|
||||||
case WM_DDE_ACK:
|
case WM_DDE_ACK:
|
||||||
{
|
{
|
||||||
PKMDDELPARAM DdeLparam = (PKMDDELPARAM) KMMsg->lParam;
|
PKMDDELPARAM DdeLparam = (PKMDDELPARAM) KMMsg->lParam;
|
||||||
if (DdeLparam->Packed)
|
UMMsg->lParam = PackDDElParam(KMMsg->message, DdeLparam->uiLo, DdeLparam->uiHi);
|
||||||
{
|
|
||||||
UMMsg->lParam = PackDDElParam(KMMsg->message,
|
|
||||||
DdeLparam->Value.Packed.uiLo,
|
|
||||||
DdeLparam->Value.Packed.uiHi);
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
UMMsg->lParam = DdeLparam->Value.Unpacked;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_DDE_EXECUTE:
|
case WM_DDE_EXECUTE:
|
||||||
|
|
|
@ -488,7 +488,7 @@ typedef struct _SBINFOEX
|
||||||
#define WNDS_HASCREATESTRUCTNAME 0X00020000
|
#define WNDS_HASCREATESTRUCTNAME 0X00020000
|
||||||
#define WNDS_SERVERSIDEWINDOWPROC 0x00040000 // Call proc inside win32k.
|
#define WNDS_SERVERSIDEWINDOWPROC 0x00040000 // Call proc inside win32k.
|
||||||
#define WNDS_ANSIWINDOWPROC 0x00080000
|
#define WNDS_ANSIWINDOWPROC 0x00080000
|
||||||
#define WNDS_BEGINGACTIVATED 0x00100000
|
#define WNDS_BEINGACTIVATED 0x00100000
|
||||||
#define WNDS_HASPALETTE 0x00200000
|
#define WNDS_HASPALETTE 0x00200000
|
||||||
#define WNDS_PAINTNOTPROCESSED 0x00400000
|
#define WNDS_PAINTNOTPROCESSED 0x00400000
|
||||||
#define WNDS_SYNCPAINTPENDING 0x00800000
|
#define WNDS_SYNCPAINTPENDING 0x00800000
|
||||||
|
@ -2692,15 +2692,15 @@ NtUserSetCursorContents(
|
||||||
HANDLE Handle,
|
HANDLE Handle,
|
||||||
PICONINFO IconInfo);
|
PICONINFO IconInfo);
|
||||||
|
|
||||||
|
#if 0 // Correct type.
|
||||||
BOOL
|
BOOL
|
||||||
NTAPI
|
NTAPI
|
||||||
NtUserSetCursorIconData(
|
NtUserSetCursorIconData(
|
||||||
HANDLE Handle,
|
HCURSOR hCursor,
|
||||||
PBOOL fIcon,
|
PUNICODE_STRING ModuleName,
|
||||||
POINT *Hotspot,
|
PUNICODE_STRING ResourceName,
|
||||||
HMODULE hModule,
|
PCURSORDATA pCursorData);
|
||||||
HRSRC hRsrc,
|
#endif
|
||||||
HRSRC hGroupRsrc);
|
|
||||||
|
|
||||||
DWORD
|
DWORD
|
||||||
NTAPI
|
NTAPI
|
||||||
|
@ -3178,16 +3178,8 @@ typedef struct tagKMDDEEXECUTEDATA
|
||||||
|
|
||||||
typedef struct tagKMDDELPARAM
|
typedef struct tagKMDDELPARAM
|
||||||
{
|
{
|
||||||
BOOL Packed;
|
|
||||||
union
|
|
||||||
{
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
UINT_PTR uiLo;
|
UINT_PTR uiLo;
|
||||||
UINT_PTR uiHi;
|
UINT_PTR uiHi;
|
||||||
} Packed;
|
|
||||||
LPARAM Unpacked;
|
|
||||||
} Value;
|
|
||||||
} KMDDELPARAM, *PKMDDELPARAM;
|
} KMDDELPARAM, *PKMDDELPARAM;
|
||||||
|
|
||||||
|
|
||||||
|
@ -3329,6 +3321,16 @@ NtUserMonitorFromWindow(
|
||||||
IN HWND hWnd,
|
IN HWND hWnd,
|
||||||
IN DWORD dwFlags);
|
IN DWORD dwFlags);
|
||||||
|
|
||||||
|
BOOL
|
||||||
|
NTAPI
|
||||||
|
NtUserSetCursorIconData(
|
||||||
|
HANDLE Handle,
|
||||||
|
PBOOL fIcon,
|
||||||
|
POINT *Hotspot,
|
||||||
|
HMODULE hModule,
|
||||||
|
HRSRC hRsrc,
|
||||||
|
HRSRC hGroupRsrc);
|
||||||
|
|
||||||
typedef struct _SETSCROLLBARINFO
|
typedef struct _SETSCROLLBARINFO
|
||||||
{
|
{
|
||||||
int nTrackPos;
|
int nTrackPos;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue