Index: reactos/sdk/include/ndk/rtltypes.h =================================================================== --- reactos/sdk/include/ndk/rtltypes.h (revision 75354) +++ reactos/sdk/include/ndk/rtltypes.h (working copy) @@ -53,6 +53,7 @@ #define RTL_USER_PROCESS_PARAMETERS_LOCAL_DLL_PATH 0x2000 #define RTL_USER_PROCESS_PARAMETERS_IMAGE_KEY_MISSING 0x4000 #define RTL_USER_PROCESS_PARAMETERS_NX 0x20000 +#define RTL_USER_PROCESS_PARAMETERS_MASK_EXCEPTIONS 0x80000 #define RTL_MAX_DRIVE_LETTERS 32 #define RTL_DRIVE_LETTER_VALID (USHORT)0x0001 Index: reactos/win32ss/user/user32/windows/message.c =================================================================== --- reactos/win32ss/user/user32/windows/message.c (revision 75354) +++ reactos/win32ss/user/user32/windows/message.c (working copy) @@ -1398,6 +1398,17 @@ return NtUserxSetMessageExtraInfo(lParam); } +static DWORD FilterWindowProcException(BOOL IsDialog) +{ + if (IsDialog) + return EXCEPTION_EXECUTE_HANDLER; + + if (NtCurrentPeb()->ProcessParameters->Flags & RTL_USER_PROCESS_PARAMETERS_MASK_EXCEPTIONS) + return EXCEPTION_EXECUTE_HANDLER; + + return EXCEPTION_CONTINUE_SEARCH; +} + LRESULT FASTCALL IntCallWindowProcW(BOOL IsAnsiProc, WNDPROC WndProc, @@ -1463,20 +1474,15 @@ if (PreResult) goto Exit; - if (!Dialog) - Result = CALL_EXTERN_WNDPROC(WndProc, AnsiMsg.hwnd, AnsiMsg.message, AnsiMsg.wParam, AnsiMsg.lParam); - else - { _SEH2_TRY { Result = CALL_EXTERN_WNDPROC(WndProc, AnsiMsg.hwnd, AnsiMsg.message, AnsiMsg.wParam, AnsiMsg.lParam); } - _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) + _SEH2_EXCEPT(FilterWindowProcException(Dialog)) { - ERR("Exception Dialog Ansi %p Msg %d pti %p Wndpti %p\n",WndProc,Msg,GetW32ThreadInfo(),pWnd->head.pti); + ERR("Exception %s Ansi %p Msg %d pti %p Wndpti %p\n",Dialog?"Dialog":"ProcParam",WndProc,Msg,GetW32ThreadInfo(),pWnd->head.pti); } _SEH2_END; - } if (Hook && (MsgOverride || DlgOverride)) { @@ -1517,20 +1523,15 @@ if (PreResult) goto Exit; - if (!Dialog) - Result = CALL_EXTERN_WNDPROC(WndProc, hWnd, Msg, wParam, lParam); - else - { _SEH2_TRY { Result = CALL_EXTERN_WNDPROC(WndProc, hWnd, Msg, wParam, lParam); } - _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) + _SEH2_EXCEPT(FilterWindowProcException(Dialog)) { - ERR("Exception Dialog unicode %p Msg %d pti %p Wndpti %p\n",WndProc, Msg,GetW32ThreadInfo(),pWnd->head.pti); + ERR("Exception %s unicode %p Msg %d pti %p Wndpti %p\n",Dialog?"Dialog":"ProcParam",WndProc, Msg,GetW32ThreadInfo(),pWnd->head.pti); } _SEH2_END; - } if (Hook && (MsgOverride || DlgOverride)) { @@ -1609,20 +1610,15 @@ if (PreResult) goto Exit; - if (!Dialog) - Result = CALL_EXTERN_WNDPROC(WndProc, hWnd, Msg, wParam, lParam); - else - { _SEH2_TRY { Result = CALL_EXTERN_WNDPROC(WndProc, hWnd, Msg, wParam, lParam); } - _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) + _SEH2_EXCEPT(FilterWindowProcException(Dialog)) { - ERR("Exception Dialog Ansi %p Msg %d pti %p Wndpti %p\n",WndProc,Msg,GetW32ThreadInfo(),pWnd->head.pti); + ERR("Exception %s Ansi %p Msg %d pti %p Wndpti %p\n",Dialog?"Dialog":"ProcParam",WndProc,Msg,GetW32ThreadInfo(),pWnd->head.pti); } _SEH2_END; - } if (Hook && (MsgOverride || DlgOverride)) { @@ -1670,20 +1666,15 @@ if (PreResult) goto Exit; - if (!Dialog) - Result = CALL_EXTERN_WNDPROC(WndProc, UnicodeMsg.hwnd, UnicodeMsg.message, UnicodeMsg.wParam, UnicodeMsg.lParam); - else - { _SEH2_TRY { Result = CALL_EXTERN_WNDPROC(WndProc, UnicodeMsg.hwnd, UnicodeMsg.message, UnicodeMsg.wParam, UnicodeMsg.lParam); } - _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) + _SEH2_EXCEPT(FilterWindowProcException(Dialog)) { - ERR("Exception Dialog unicode %p Msg %d pti %p Wndpti %p\n",WndProc, Msg,GetW32ThreadInfo(),pWnd->head.pti); + ERR("Exception %s unicode %p Msg %d pti %p Wndpti %p\n",Dialog?"Dialog":"ProcParam",WndProc, Msg,GetW32ThreadInfo(),pWnd->head.pti); } _SEH2_END; - } if (Hook && (MsgOverride || DlgOverride)) {