http://bugs.winehq.org/show_bug.cgi?id=24328
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW CC| |focht@gmx.net Component|-unknown |user32 Ever Confirmed|0 |1
--- Comment #4 from Anastasius Focht focht@gmx.net 2012-04-10 16:16:53 CDT --- Hello,
confirming.
That app protection is a bit annoying, employing several anti-debugging/anti-attach tricks (openprocess security, high priority watchdog threads, TLS callbacks with debugger threads/entry points detection etc.).
The problem seems to be GetScrollInfo() -> SCROLL_GetScrollInfo() -> SCROLL_GetInternalInfo() failing due to returned infoPtr == NULL and alloc == FALSE. The internal SCROLLBAR_INFO structure (wndPtr->pScroll) has not yet been allocated yet in message sequence between window creation and GetScrollInfo() call.
Relevant trace log, window with v+h scroll bar styles gets created:
--- snip --- ... 0026:Call user32.CreateWindowExW(00000004,0000c043,00b2fd78 L"",52300000,00000000,00000000,00000000,00000000,000100dc,00000000,00400000,00000000) ret=00595fd3 0026:trace:win:WIN_CreateWindowEx L"" #c043 ex=00000004 style=52300000 0,0 0x0 parent=0x100dc menu=(nil) inst=0x400000 params=(nil) 0026:trace:win:dump_window_styles style: WS_CHILD WS_VISIBLE WS_CLIPCHILDREN WS_VSCROLL WS_HSCROLL 0026:trace:win:dump_window_styles exstyle: WS_EX_NOPARENTNOTIFY ... 0026:trace:win:WIN_CreateWindowEx created window 0x100de 0026:Ret user32.CreateWindowExW() retval=000100de ret=00595fd3 ... 0026:trace:win:WIN_SetWindowLong 0x100de -12 248b090 W 0026:Ret user32.SetWindowLongW() retval=00000000 ret=0057a241 ... 0026:Call user32.SetWindowLongW(000100de,fffffffc,0057ca50) ret=0057a3c0 0026:trace:win:WIN_SetWindowLong 0x100de -4 57ca50 W 0026:trace:win:alloc_winproc reusing 0xffff0025 for 0x57ca50 0026:Ret user32.SetWindowLongW() retval=7ec6896c ret=0057a3c0 ... 0026:Call user32.ShowScrollBar(000100de,00000003,00000001) ret=005a15a0 0026:trace:scroll:SCROLL_ShowScrollBar hwnd=0x100de bar=3 horz=1, vert=1 0026:Ret user32.ShowScrollBar() retval=00000001 ret=005a15a0 ... 0026:Call user32.ShowScrollBar(000100de,00000003,00000000) ret=005a1628 0026:trace:scroll:SCROLL_ShowScrollBar hwnd=0x100de bar=3 horz=0, vert=0 ... 0026:Ret user32.ShowScrollBar() retval=00000001 ret=005a1628 ... 0026:Call user32.GetWindowRect(000100de,0033265c) ret=00577190 0026:trace:win:GetWindowRect hwnd 0x100de (12,297)-(12,297) 0026:Ret user32.GetWindowRect() retval=00000001 ret=00577190 ... 0026:Call user32.TranslateMessage(003328b4) ret=0057b80d 0026:Ret user32.TranslateMessage() retval=00000000 ret=0057b80d 0026:Call user32.CallWindowProcW(7ec6896c,000100de,00000083,00000001,00334e74) ret=0057b83e 0026:Call window proc 0x7ec6896c (hwnd=0x100de,msg=WM_NCCALCSIZE,wp=00000001,lp=00334e74) 0026:Call user32.DefWindowProcW(000100de,00000083,00000001,00334e74) ret=7ed0f832 0026:Ret user32.DefWindowProcW() retval=00000000 ret=7ed0f832 0026:Ret window proc 0x7ec6896c (hwnd=0x100de,msg=WM_NCCALCSIZE,wp=00000001,lp=00334e74) retval=00000000 0026:Ret user32.CallWindowProcW() retval=00000000 ret=0057b83e 0026:Ret window proc 0x57ca50 (hwnd=0x100de,msg=WM_NCCALCSIZE,wp=00000001,lp=00334e74) retval=00000000 0026:trace:win:SWP_DoNCCalcSize hwnd 0x100de old win (0,0)-(0,0) old client (0,0)-(0,0) new win (0,0)-(293,371) new client (0,0)-(293,371) 0026:trace:win:GetWindowRect hwnd 0x100de (12,297)-(305,668) 0026:trace:win:invalidate_dce 0x100de scope hwnd = 0x100dc (12,297)-(305,668) ((12,297)-(12,297)) 0026:trace:win:invalidate_dce 0x14f600: hwnd 0x20034 dcx 00000013 Cache 0026:trace:win:invalidate_dce 0x147d58: hwnd (nil) dcx 00000002 Cache 0026:trace:win:USER_SetWindowPos status flags = 1006 0026:Call window proc 0x57ca50 (hwnd=0x100de,msg=WM_WINDOWPOSCHANGED,wp=00000000,lp=00334fd8) 0026:Call user32.IsWindowVisible(000100de) ret=0057867f 0026:Ret user32.IsWindowVisible() retval=00000000 ret=0057867f 0026:Call user32.GetScrollInfo(000100de,00000001,003316c4) ret=005a182e 0026:trace:scroll:GetScrollInfo hwnd=0x100de nBar=1 info=0x3316c4 0026:Ret user32.GetScrollInfo() retval=00000000 ret=005a182e ... 0026:Call KERNEL32.RaiseException(e06d7363,00000001,00000003,00331694) ret=00a25cbc 0026:trace:seh:raise_exception code=e06d7363 flags=1 addr=0x7b839357 ip=7b839357 tid=0026 0026:trace:seh:raise_exception info[0]=19930520 0026:trace:seh:raise_exception info[1]=00331868 0026:trace:seh:raise_exception info[2]=00bc8d80 0026:trace:seh:raise_exception eax=7b826381 ebx=7b8aa708 ecx=00bc8d80 edx=003315a0 esi=00331678 edi=003315f0 0026:trace:seh:raise_exception ebp=003315d8 esp=00331574 cs=0023 ds=002b es=002b fs=0063 gs=006b flags=00200287 0026:trace:seh:call_stack_handlers calling handler at 0xa68966 code=e06d7363 flags=1 0026:trace:seh:call_stack_handlers handler at 0xa68966 returned 1 0026:trace:seh:call_stack_handlers calling handler at 0xa683e8 code=e06d7363 flags=1 0026:Call ntdll.RtlUnwind(003328bc,00a25d22,00331580,00000000) ret=00a25d22 ... 0026:Call KERNEL32.GetStringTypeW(00000001,0014af2a L"class XFW::OSCallError> ::GetScrollInfo failed.",00000001,0033dd66) ret=7df3042d --- snip ---
Source: http://source.winehq.org/git/wine.git/blob/74159467168c7925857267f3aef71f09f...
--- snip --- 1210 static BOOL SCROLL_GetScrollInfo(HWND hwnd, INT nBar, LPSCROLLINFO info) 1211 { 1212 LPSCROLLBAR_INFO infoPtr; 1213 1214 /* handle invalid data structure */ 1215 if (!SCROLL_ScrollInfoValid(info) 1216 || !(infoPtr = SCROLL_GetInternalInfo(hwnd, nBar, FALSE))) 1217 return FALSE; 1218 ... --- snip ---
If I allow allocation within SCROLL_GetScrollInfo(), the app starts successfully and works fine.
$ du -sh Filter\ Forge\ 2\ Setup.exe 47M Filter Forge 2 Setup.exe
$ sha1sum Filter\ Forge\ 2\ Setup.exe 98e28e013934fc4fd209e9b7f6315e654f9e57bc Filter Forge 2 Setup.exe
$ wine --version wine-1.5.1-240-g31f6f48
Regards