- Add temporary hack to prevent MS Sndvol32 from crashing
[reactos.git] / dll / win32 / user32 / windows / message.c
index bff9ee5..1761c62 100644 (file)
@@ -60,6 +60,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(user32);
  * content). When a ACK message is generated, the list of pair is searched for a
  * matching pair, so that the client memory handle can be returned.
  */
+
 typedef struct tagDDEPAIR
 {
   HGLOBAL     ClientMem;
@@ -171,11 +172,11 @@ MsgiUMToKMMessage(PMSG UMMsg, PMSG KMMsg, BOOL Posted)
               if (0 != HIWORD(DdeLparam->Value.Packed.uiHi))
                 {
                   /* uiHi should contain a hMem from WM_DDE_EXECUTE */
-                  HGLOBAL h = DdeGetPair((HGLOBAL) DdeLparam->Value.Packed.uiHi);
+                  HGLOBAL h = DdeGetPair((HGLOBAL)(ULONG_PTR)DdeLparam->Value.Packed.uiHi);
                   if (NULL != h)
                     {
-                      GlobalFree((HGLOBAL) DdeLparam->Value.Packed.uiHi);
-                      DdeLparam->Value.Packed.uiHi = (UINT) h;
+                      GlobalFree((HGLOBAL)(ULONG_PTR)DdeLparam->Value.Packed.uiHi);
+                      DdeLparam->Value.Packed.uiHi = (UINT_PTR) h;
                     }
                 }
               FreeDDElParam(UMMsg->message, UMMsg->lParam);
@@ -685,7 +686,7 @@ MsgiUnicodeToAnsiMessage(LPMSG AnsiMsg, LPMSG UnicodeMsg)
               return FALSE;
             }
           CsA->lpszName = AnsiString.Buffer;
-          if (HIWORD((ULONG)CsW->lpszClass) != 0)
+          if (HIWORD((ULONG_PTR)CsW->lpszClass) != 0)
             {
               RtlInitUnicodeString(&UnicodeString, CsW->lpszClass);
               Status = RtlUnicodeStringToAnsiString(&AnsiString, &UnicodeString, TRUE);
@@ -849,7 +850,7 @@ MsgiUnicodeToAnsiCleanup(LPMSG AnsiMsg, LPMSG UnicodeMsg)
           Cs = (CREATESTRUCTA*) AnsiMsg->lParam;
           RtlInitAnsiString(&AnsiString, Cs->lpszName);
           RtlFreeAnsiString(&AnsiString);
-          if (HIWORD((ULONG)Cs->lpszClass) != 0)
+          if (HIWORD((ULONG_PTR)Cs->lpszClass) != 0)
             {
               RtlInitAnsiString(&AnsiString, Cs->lpszClass);
               RtlFreeAnsiString(&AnsiString);
@@ -946,7 +947,7 @@ typedef struct tagMSGCONVERSION
   MSG UnicodeMsg;
   MSG AnsiMsg;
   PMSG FinalMsg;
-  ULONG LParamSize;
+  SIZE_T LParamSize;
 } MSGCONVERSION, *PMSGCONVERSION;
 
 static PMSGCONVERSION MsgConversions = NULL;
@@ -1211,7 +1212,14 @@ IntCallWindowProcW(BOOL IsAnsiProc,
 
       if (PreResult) goto Exit;
 
-      Result = WndProc(AnsiMsg.hwnd, AnsiMsg.message, AnsiMsg.wParam, AnsiMsg.lParam);
+      _SEH2_TRY // wine does this.
+      {
+         Result = WndProc(AnsiMsg.hwnd, AnsiMsg.message, AnsiMsg.wParam, AnsiMsg.lParam);
+      }
+      _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+      {
+      }
+      _SEH2_END;
 
       if (Hook && MsgOverride)
       {
@@ -1252,7 +1260,14 @@ IntCallWindowProcW(BOOL IsAnsiProc,
 
       if (PreResult) goto Exit;
 
-      Result = WndProc(hWnd, Msg, wParam, lParam);
+      //_SEH2_TRY
+      //{
+         Result = WndProc(hWnd, Msg, wParam, lParam);
+      //}
+      //_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+      //{
+      //}
+      //_SEH2_END;
 
       if (Hook && MsgOverride)
       {
@@ -1329,7 +1344,14 @@ IntCallWindowProcA(BOOL IsAnsiProc,
 
       if (PreResult) goto Exit;
 
-      Result = WndProc(hWnd, Msg, wParam, lParam);
+      _SEH2_TRY
+      {
+         Result = WndProc(hWnd, Msg, wParam, lParam);
+      }
+      _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+      {
+      }
+      _SEH2_END;
 
       if (Hook && MsgOverride)
       {
@@ -1374,8 +1396,15 @@ IntCallWindowProcA(BOOL IsAnsiProc,
 
       if (PreResult) goto Exit;
 
-      Result = WndProc(UnicodeMsg.hwnd, UnicodeMsg.message,
-                       UnicodeMsg.wParam, UnicodeMsg.lParam);
+      _SEH2_TRY
+      {
+         Result = WndProc(UnicodeMsg.hwnd, UnicodeMsg.message,
+                          UnicodeMsg.wParam, UnicodeMsg.lParam);
+      }
+      _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+      {
+      }
+      _SEH2_END;
 
       if (Hook && MsgOverride)
       {
@@ -1573,10 +1602,18 @@ DispatchMessageA(CONST MSG *lpmsg)
         if ( lpmsg->message == WM_SYSTIMER )
            return NtUserDispatchMessage( (PMSG)lpmsg );
 
-        Ret = WndProc(lpmsg->hwnd,
-                      lpmsg->message,
-                      lpmsg->wParam,
-                      GetTickCount());
+       _SEH2_TRY // wine does this.
+       {
+           Ret = WndProc(lpmsg->hwnd,
+                         lpmsg->message,
+                         lpmsg->wParam,
+                         GetTickCount());
+       }
+       _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+       {
+       }
+       _SEH2_END;
+
     }
     else if (Wnd != NULL)
     {
@@ -1633,10 +1670,17 @@ DispatchMessageW(CONST MSG *lpmsg)
         if ( lpmsg->message == WM_SYSTIMER )
            return NtUserDispatchMessage( (PMSG) lpmsg );
 
-        Ret = WndProc(lpmsg->hwnd,
-                      lpmsg->message,
-                      lpmsg->wParam,
-                      GetTickCount());
+       _SEH2_TRY
+       {
+           Ret = WndProc(lpmsg->hwnd,
+                         lpmsg->message,
+                         lpmsg->wParam,
+                         GetTickCount());
+       }
+       _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+       {
+       }
+       _SEH2_END;
     }
     else if (Wnd != NULL)
     {
@@ -2171,11 +2215,16 @@ SendMessageCallbackA(
   SENDASYNCPROC lpCallBack,
   ULONG_PTR dwData)
 {
+  CALL_BACK_INFO CallBackInfo;
+
+  CallBackInfo.CallBack = lpCallBack;
+  CallBackInfo.Context = dwData;
+
   return NtUserMessageCall(hWnd,
                             Msg, 
                          wParam,
                          lParam,
-         (ULONG_PTR)&lpCallBack,
+       (ULONG_PTR)&CallBackInfo,
        FNID_SENDMESSAGECALLBACK,
                            TRUE);
 }
@@ -2193,11 +2242,17 @@ SendMessageCallbackW(
   SENDASYNCPROC lpCallBack,
   ULONG_PTR dwData)
 {
+
+  CALL_BACK_INFO CallBackInfo;
+
+  CallBackInfo.CallBack = lpCallBack;
+  CallBackInfo.Context = dwData;
+
   return NtUserMessageCall(hWnd,
                             Msg, 
                          wParam,
                          lParam,
-         (ULONG_PTR)&lpCallBack,
+       (ULONG_PTR)&CallBackInfo,
        FNID_SENDMESSAGECALLBACK,
                           FALSE);
 }
@@ -2397,7 +2452,7 @@ SendNotifyMessageW(
  * @implemented
  */
 BOOL WINAPI
-TranslateMessageEx(CONST MSG *lpMsg, DWORD unk)
+TranslateMessageEx(CONST MSG *lpMsg, UINT Flags)
 {
     switch (lpMsg->message)
     {
@@ -2405,7 +2460,7 @@ TranslateMessageEx(CONST MSG *lpMsg, DWORD unk)
         case WM_KEYUP:
         case WM_SYSKEYDOWN:
         case WM_SYSKEYUP:
-            return(NtUserTranslateMessage((LPMSG)lpMsg, (HKL)unk));
+            return(NtUserTranslateMessage((LPMSG)lpMsg, Flags));
 
         default:
             if ( lpMsg->message & ~WM_MAXIMUM )
@@ -2569,7 +2624,7 @@ User32CallWindowProcFromKernel(PVOID Arguments, ULONG ArgumentLength)
     }
 
   if (pci->CallbackWnd.hWnd == UMMsg.hwnd)
-     pWnd  = pci->CallbackWnd.pvWnd;
+     pWnd  = pci->CallbackWnd.pWnd;
     
   CallbackArgs->Result = IntCallWindowProcW( CallbackArgs->IsAnsiProc,
                                              CallbackArgs->Proc,