[Win32k|User32]
authorJames Tabor <james.tabor@reactos.org>
Wed, 16 Nov 2011 16:24:18 +0000 (16:24 +0000)
committerJames Tabor <james.tabor@reactos.org>
Wed, 16 Nov 2011 16:24:18 +0000 (16:24 +0000)
- Patch by Shinobu Maehara: fix for kernel-mode/user-mode marshalling of WM_DDE_ACK.

svn path=/trunk/; revision=54396

reactos/dll/win32/user32/windows/dialog.c
reactos/dll/win32/user32/windows/message.c
reactos/include/reactos/win32k/ntuser.h

index c45e8d5..1641ce6 100644 (file)
@@ -288,7 +288,7 @@ static const WORD *DIALOG_GetControl32( const WORD *p, DLG_CONTROL_INFO *info,
         info->windowName = HeapAlloc( GetProcessHeap(), 0, sizeof(L"#65535") );
         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;
         }
         else
index fdfb273..7bff66d 100644 (file)
@@ -234,36 +234,24 @@ MsgiUMToKMMessage(PMSG UMMsg, PMSG KMMsg, BOOL Posted)
         {
           PKMDDELPARAM DdeLparam;
           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;
-            }
-          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);
+              HGLOBAL h = DdeGetPair((HGLOBAL)(ULONG_PTR)DdeLparam->uiHi);
                   if (NULL != h)
                     {
-                      GlobalFree((HGLOBAL)(ULONG_PTR)DdeLparam->Value.Packed.uiHi);
-                      DdeLparam->Value.Packed.uiHi = (UINT_PTR) h;
+                  GlobalFree((HGLOBAL)(ULONG_PTR)DdeLparam->uiHi);
+                  DdeLparam->uiHi = (UINT_PTR) h;
                     }
                 }
               FreeDDElParam(UMMsg->message, UMMsg->lParam);
-            }
-          else
-            {
-              DdeLparam->Packed = FALSE;
-              DdeLparam->Value.Unpacked = UMMsg->lParam;
-            }
           KMMsg->lParam = (LPARAM) DdeLparam;
         }
         break;
@@ -376,17 +364,8 @@ MsgiKMToUMMessage(PMSG KMMsg, PMSG UMMsg)
       case WM_DDE_ACK:
         {
           PKMDDELPARAM DdeLparam = (PKMDDELPARAM) KMMsg->lParam;
-          if (DdeLparam->Packed)
-            {
-              UMMsg->lParam = PackDDElParam(KMMsg->message,
-                                            DdeLparam->Value.Packed.uiLo,
-                                            DdeLparam->Value.Packed.uiHi);
+          UMMsg->lParam = PackDDElParam(KMMsg->message, DdeLparam->uiLo, DdeLparam->uiHi);
             }
-          else
-            {
-              UMMsg->lParam = DdeLparam->Value.Unpacked;
-            }
-        }
         break;
 
       case WM_DDE_EXECUTE:
index 5725aa2..e2535ad 100644 (file)
@@ -488,7 +488,7 @@ typedef struct _SBINFOEX
 #define WNDS_HASCREATESTRUCTNAME     0X00020000
 #define WNDS_SERVERSIDEWINDOWPROC    0x00040000 // Call proc inside win32k.
 #define WNDS_ANSIWINDOWPROC          0x00080000
-#define WNDS_BEGINGACTIVATED         0x00100000
+#define WNDS_BEINGACTIVATED          0x00100000
 #define WNDS_HASPALETTE              0x00200000
 #define WNDS_PAINTNOTPROCESSED       0x00400000
 #define WNDS_SYNCPAINTPENDING        0x00800000
@@ -2692,15 +2692,15 @@ NtUserSetCursorContents(
   HANDLE Handle,
   PICONINFO IconInfo);
 
+#if 0 // Correct type.
 BOOL
 NTAPI
 NtUserSetCursorIconData(
-  HANDLE Handle,
-  PBOOL fIcon,
-  POINT *Hotspot,
-  HMODULE hModule,
-  HRSRC hRsrc,
-  HRSRC hGroupRsrc);
+  HCURSOR hCursor,
+  PUNICODE_STRING ModuleName,
+  PUNICODE_STRING ResourceName,
+  PCURSORDATA pCursorData);
+#endif
 
 DWORD
 NTAPI
@@ -3178,16 +3178,8 @@ typedef struct tagKMDDEEXECUTEDATA
 
 typedef struct tagKMDDELPARAM
 {
-  BOOL Packed;
-  union
-    {
-      struct
-        {
           UINT_PTR uiLo;
           UINT_PTR uiHi;
-        } Packed;
-      LPARAM Unpacked;
-    } Value;
 } KMDDELPARAM, *PKMDDELPARAM;
 
 
@@ -3329,6 +3321,16 @@ NtUserMonitorFromWindow(
   IN HWND hWnd,
   IN DWORD dwFlags);
 
+BOOL
+NTAPI
+NtUserSetCursorIconData(
+  HANDLE Handle,
+  PBOOL fIcon,
+  POINT *Hotspot,
+  HMODULE hModule,
+  HRSRC hRsrc,
+  HRSRC hGroupRsrc);
+
 typedef struct _SETSCROLLBARINFO
 {
   int nTrackPos;