http://bugs.winehq.org/show_bug.cgi?id=34978
Bug #: 34978 Summary: Display detection issue with the MacDriver Product: Wine Version: 1.7.6 Platform: x86-64 OS/Version: Mac OS X Status: UNCONFIRMED Severity: normal Priority: P2 Component: winemac.drv AssignedTo: wine-bugs@winehq.org ReportedBy: f.platte@platte-web.de Classification: Unclassified
I just realized that applications ported with wine do not detect multiple displays, if they are set to use the MacDriver, although they do when using X11. Also, while the displays (1 & 2) are detected as actual displays using X11, the MacDriver display is detected as "X11 windowing system".
I included 2 screenshots to show the issue.
http://bugs.winehq.org/show_bug.cgi?id=34978
--- Comment #1 from Bruno Jesus 00cpxxx@gmail.com 2013-11-22 21:13:07 CST --- (In reply to comment #0)
I included 2 screenshots to show the issue.
There may have been some problem in the upload process or maybe you forgot to attache the files.
http://bugs.winehq.org/show_bug.cgi?id=34978
--- Comment #2 from Rastafabi f.platte@platte-web.de 2013-11-23 10:24:55 CST --- Created attachment 46622 --> http://bugs.winehq.org/attachment.cgi?id=46622 example images
4th time trying to upload...
http://bugs.winehq.org/show_bug.cgi?id=34978
Ken Thomases ken@codeweavers.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Keywords| |download Status|UNCONFIRMED |NEW URL| |http://www.displayfusion.co | |m/Download/ CC| |ken@codeweavers.com Ever confirmed|0 |1
--- Comment #3 from Ken Thomases ken@codeweavers.com --- I can confirm the problem. From the screenshots, I see that one program which exhibits the problem is DisplayFusion, which has a free version.
http://bugs.winehq.org/show_bug.cgi?id=34978
Ken Thomases ken@codeweavers.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Component|winemac.drv |user32
--- Comment #4 from Ken Thomases ken@codeweavers.com --- This is a very strange bug.
In general, the Mac driver has pretty good support for multi-monitor configurations. I believe it's as good as the X11 driver's support. Neither is quite right in relatively minor ways.
The problem is actually in user32. EnumDisplayDevicesW() is a stub. It only ever reports a single device, no matter how many displays there actually are. Furthermore, it uses the name "X11 Windowing System" for them, regardless of which driver is being used.
You would think that this would lead DisplayFusion to only ever show a single display, like it does with the Mac driver. But it shows both displays with the X11 driver. That was a difficult mystery to crack.
The reason is that XQuartz reports a fake display mode through the XRandR extension. It does this as a strategy for dealing with full-screen programs. It's actually a strategy that I used first in CrossOver and suggested to the XQuartz implementers. The idea is the X server reports all of the real display modes for the primary display plus a fake one which includes the full size of the desktop, excluding the Mac menu bar. If a program switches the display mode to any of the real ones, then the X server hides the menu bar and the Dock to let the client use the full screen. If a program switches the mode back to the fake one, which was the original mode, then the X server restores the menu bar and Dock.
Anyway, when you have multiple displays, this fake mode spans all of them. It seems that DisplayFusion finds this confusing. The fake mode is larger than the size of the primary monitor as reported by GetMonitorInfo(). Evidently, this causes DisplayFusion to ignore the results of EnumDisplayDevices() and instead rely on EnumDisplayMonitors() and GetMonitorInfo(). That's why it doesn't use the "X11 Windowing System" name and instead calls the displays "Unknown".
I have confirmed by hacking the Mac driver so that it also reports a fake display mode that spans the whole desktop. When I do that, DisplayFusion shows all of the displays, just like it does with the X11 driver. But the real solution will probably be to implement EnumDisplayDevices() correctly.
http://bugs.winehq.org/show_bug.cgi?id=34978
--- Comment #5 from Ken Thomases ken@codeweavers.com --- Created attachment 46935 --> http://bugs.winehq.org/attachment.cgi?id=46935 Kludgy implementation of EnumDisplayDevicesW()
Here's an implementation of EnumDisplayDevicesW() and some supporting functionality that gets DisplayFusion working properly with the Mac driver. It requires changes in the user driver, but I only made those changes in the Mac driver, so it's very likely that this will break the X11 driver.
I'm not 100% sure that I understand how this is supposed to behave on Windows. I thought I knew, but DisplayFusion continued to behave oddly until I changed some things.
I had thought that we could emulate a single video adapter and hang each display off of that. Like so for two displays:
EnumDisplayDevices(NULL, 0, ...) -> \.\DISPLAY1 (adapter) EnumDisplayDevices("\.\DISPLAY1", 0, ...) -> \.\DISPLAY1\Monitor0 (display) EnumDisplayDevices("\.\DISPLAY1", 1, ...) -> \.\DISPLAY1\Monitor1 (display) EnumDisplayDevices("\.\DISPLAY1", 2, ...) -> failure (no more displays) EnumDisplayDevices(NULL, 1, ...) -> failure (no more adapters)
However, DisplayFusion insists on interpreting that as the displays being mirrored/cloned. I've found somebody else with that interpretation[1].
In order to get separate displays, I had to emulate an adapter for each:
EnumDisplayDevices(NULL, 0, ...) -> \.\DISPLAY1 (adapter) EnumDisplayDevices("\.\DISPLAY1", 0, ...) -> \.\DISPLAY1\Monitor0 (display) EnumDisplayDevices("\.\DISPLAY1", 1, ...) -> failure (no more displays) EnumDisplayDevices(NULL, 1, ...) -> \.\DISPLAY2 (adapter) EnumDisplayDevices("\.\DISPLAY2", 0, ...) -> \.\DISPLAY2\Monitor0 (display) EnumDisplayDevices("\.\DISPLAY2", 1, ...) -> failure (no more displays) EnumDisplayDevices(NULL, 2, ...) -> failure (no more adapters)
Anyway, this patch is mostly about exploring. There will have to be a lot more work before anything like this can be submitted.
[1] http://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/9ce34fd2-1264-4...
http://bugs.winehq.org/show_bug.cgi?id=34978
--- Comment #6 from Ken Thomases ken@codeweavers.com --- Just a note for posterity: Microsoft documents the interpretation that each non-mirrored display hangs off of a separate adapter, at least for Direct3D.
From http://msdn.microsoft.com/en-us/library/windows/desktop/bb147355%28v=vs.85%29.aspx: "An adapter is a physical piece of hardware. Note that the graphics card might contain more than a single adapter, as is the case with a dual-headed display."
http://bugs.winehq.org/show_bug.cgi?id=34978
--- Comment #7 from Ken Thomases ken@codeweavers.com --- I have submitted patches to fix this (the series of six patches ending with http://source.winehq.org/patches/data/103534).
http://bugs.winehq.org/show_bug.cgi?id=34978
--- Comment #8 from Rastafabi f.platte@platte-web.de --- Great to here!
Unfortunately I can't test the patched version, as I can't build it because freetype does not build with arch=i386 (like advised in the wine Wiki for building on OS X - I'm on 10.8.5). When being build without freetype it does not run at all and only creates C:\Users\ but no porgam files, nor a windows folder in the home directory...
https://bugs.winehq.org/show_bug.cgi?id=34978
Austin English austinenglish@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |austinenglish@gmail.com Summary|Display detection issue |Multiple applications need |with the MacDriver |a EnumDisplayDevicesW | |implementation | |(DisplayFusion, Turbo Tax | |2012)
--- Comment #9 from Austin English austinenglish@gmail.com --- (In reply to Ken Thomases from comment #7)
I have submitted patches to fix this (the series of six patches ending with http://source.winehq.org/patches/data/103534).
While testing the patch for bug 32758, I noticed that Turbo Tax 2012 refuses to start on my laptop if I've got an external monitor plugged in. I instead get an infinite loop of: fixme:win:EnumDisplayDevicesW ((null),1,0x52fe550,0x00000000), stub! fixme:win:EnumDisplayDevicesW ((null),0,0x52fe550,0x00000000), stub! fixme:win:EnumDisplayDevicesW ((null),1,0x52fe550,0x00000000), stub! fixme:win:EnumDisplayDevicesW ((null),0,0x52fe550,0x00000000), stub! fixme:win:EnumDisplayDevicesW ((null),1,0x52fe550,0x00000000), stub! fixme:win:EnumDisplayDevicesW ((null),0,0x52fe550,0x00000000), stub! fixme:win:EnumDisplayDevicesW ((null),1,0x52fe550,0x00000000), stub! fixme:win:EnumDisplayDevicesW ((null),0,0x52fe550,0x00000000), stub! fixme:win:EnumDisplayDevicesW ((null),1,0x52fe550,0x00000000), stub! fixme:win:EnumDisplayDevicesW ((null),0,0x52fe550,0x00000000), stub! fixme:win:EnumDisplayDevicesW ((null),1,0x52fe550,0x00000000), stub! fixme:win:EnumDisplayDevicesW ((null),0,0x52fe550,0x00000000), stub!
I tried the patchset here on Fedora rawhide (X.Org X Server 1.15.99.903 (1.16.0 RC 3)) with wine-1.7.23, and it does let TurboTax 2012 start (alternatively, disabling the second display works as well).
https://bugs.winehq.org/show_bug.cgi?id=34978
roger@mailinator.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |roger@mailinator.com
--- Comment #10 from roger@mailinator.com --- What happened to the patches?
https://bugs.winehq.org/show_bug.cgi?id=34978
Sebastian Lackner sebastian@fds-team.de changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |sebastian@fds-team.de
--- Comment #11 from Sebastian Lackner sebastian@fds-team.de --- The patches were rejected because they don't implement it exactly the same way as on Windows. "Correctly" implementing it means a lot more effort.
We have also added the relevant parts of the series to the staging tree, by the way, until a better implementation is available: https://github.com/wine-compholio/wine-staging/tree/master/patches/gdi32-Mul...
https://bugs.winehq.org/show_bug.cgi?id=34978
Michael Müller michael@fds-team.de changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |STAGED CC| |michael@fds-team.de Staged patchset| |https://github.com/wine-com | |pholio/wine-staging/tree/ma | |ster/patches/gdi32-MultiMon | |itor
https://bugs.winehq.org/show_bug.cgi?id=34978
Austin English austinenglish@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Keywords| |patch
https://bugs.winehq.org/show_bug.cgi?id=34978
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- Staged patchset|https://github.com/wine-com |https://github.com/wine-sta |pholio/wine-staging/tree/ma |ging/wine-staging/tree/mast |ster/patches/gdi32-MultiMon |er/patches/gdi32-MultiMonit |itor |or CC| |focht@gmx.net Summary|Multiple applications need |Multiple applications need |a EnumDisplayDevicesW |a EnumDisplayDevicesW |implementation |implementation for |(DisplayFusion, Turbo Tax |multi-monitor environment |2012) |support (DisplayFusion, | |Turbo Tax 2012, WPF 4.x | |.NET apps)
--- Comment #12 from Anastasius Focht focht@gmx.net --- Hello folks,
revisiting, still present.
Essentially all .NET 4.x applications using WPF 4.x suffer from this in a multi-monitor environment.
The user visible symptom are dialog/windows rendered with black content and a continuous (endless) spam of 'fixme:win:EnumDisplayDevicesW' messages in console.
With this full patchset applied, these apps render their user interface properly using WPF 4.x -> DirectX 9/10/11.
I would consider this issue as important. Multi-monitor environments are now fairly common everywhere.
Regards
https://bugs.winehq.org/show_bug.cgi?id=34978
--- Comment #13 from Anastasius Focht focht@gmx.net --- Hello folks,
although I already stated:
--- quote --- Essentially all .NET 4.x applications using WPF 4.x suffer from this in a multi-monitor environment. --- quote ---
adding another concrete example to test with: 'Microsoft Windows SDK for Windows 7 and .NET Framework 4'
https://www.microsoft.com/en-us/download/details.aspx?id=8279
Install everything (finishes).
At the end there will be a window 'Help Library Manager - Microsoft Help Viewer 1.0' shown which eats CPU, continuously spamming 'fixme:win:EnumDisplayDevicesW' messages on console.
Manual reproduce:
--- snip --- $ pwd /home/focht/.wine/drive_c/Program Files/Microsoft Help Viewer/v1.0
$ wine ./HelpLibManager.exe /product VS /version 100 /locale en-US /sourceWeb http://services.mtps.microsoft.com/ServiceAPI/products/ --- snip ---
Leaving only one display/monitor enabled makes the GUI properly appear.
$ wine --version wine-3.7-136-g8f46ac233e
Regards
https://bugs.winehq.org/show_bug.cgi?id=34978
tokktokk fdsfgs@krutt.org changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |fdsfgs@krutt.org
https://bugs.winehq.org/show_bug.cgi?id=34978
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- Summary|Multiple applications need |Many applications need a |a EnumDisplayDevicesW |EnumDisplayDevicesW |implementation for |implementation for |multi-monitor environment |multi-monitor environment |support (DisplayFusion, |support (DisplayFusion, |Turbo Tax 2012, WPF 4.x |Turbo Tax 2012, WPF 4.x |.NET apps) |.NET apps, CEFv3 apps) Severity|normal |major
--- Comment #14 from Anastasius Focht focht@gmx.net --- Hello folks,
while investigating bug 45455 I found CEFv3-based (certain version ranges) apps also suffer from this. Symptom: apps appear to hang on startup with no user interface shown on a multi-monitor system (live-loop in 'libcef.dll').
--- snip --- $ pwd /home/focht/.wine/drive_c/Program Files/UP Studio/win32
$ WINEDEBUG=+seh,+relay wine ./UPStudio.exe >>log.txt 2>&1 ... 003b:Call user32.EnumDisplayMonitors(00000000,00000000,11def9e4,0033f890) ret=11defac6 003b:Call winex11.drv.EnumDisplayMonitors(00000000,00000000,7e4cafa4,0033f808) ret=7e4cb004 003b:Call KERNEL32.LoadLibraryW(1392658c L"shcore.dll") ret=106c1743 003b:Call PE DLL (proc=0x7acfb03b,module=0x7acf0000 L"shcore.dll",reason=PROCESS_ATTACH,res=(nil)) 003b:Call KERNEL32.DisableThreadLibraryCalls(7acf0000) ret=7acfaf38 003b:Ret KERNEL32.DisableThreadLibraryCalls() retval=00000001 ret=7acfaf38 003b:Ret PE DLL (proc=0x7acfb03b,module=0x7acf0000 L"shcore.dll",reason=PROCESS_ATTACH,res=(nil)) retval=1 003b:Ret KERNEL32.LoadLibraryW() retval=7acf0000 ret=106c1743 003b:Call KERNEL32.GetProcAddress(7acf0000,13926574 "GetProcessDpiAwareness") ret=106c1753 003b:Ret KERNEL32.GetProcAddress() retval=7acfae34 ret=106c1753 003b:Call shcore.GetProcessDpiAwareness(00000000,0033f63c) ret=106c175f 003b:Call user32.GetProcessDpiAwarenessInternal(00000000,0033f63c) ret=7acfaf6d 003b:Ret user32.GetProcessDpiAwarenessInternal() retval=00000001 ret=7acfaf6d 003b:Ret shcore.GetProcessDpiAwareness() retval=00000000 ret=106c175f 003b:Call user32.GetDC(00000000) ret=11ae2d77 003b:Call user32.GetDpiForSystem() ret=7e8829c0 003b:Ret user32.GetDpiForSystem() retval=00000060 ret=7e8829c0 003b:Call winex11.drv.GetDC(0003004e,0002002c,0002002c,0033f4d8,0033f4c8,00000013) ret=7e4d19d1 003b:Ret winex11.drv.GetDC() retval=00000001 ret=7e4d19d1 003b:Ret user32.GetDC() retval=0003004e ret=11ae2d77 003b:Call gdi32.GetDeviceCaps(0003004e,00000058) ret=11df0b23 003b:Call user32.GetDpiForSystem() ret=7e8829c0 003b:Ret user32.GetDpiForSystem() retval=00000060 ret=7e8829c0 003b:Ret gdi32.GetDeviceCaps() retval=00000060 ret=11df0b23 003b:Call gdi32.GetDeviceCaps(0003004e,0000005a) ret=11df0b31 003b:Call user32.GetDpiForSystem() ret=7e8829c0 003b:Ret user32.GetDpiForSystem() retval=00000060 ret=7e8829c0 003b:Ret gdi32.GetDeviceCaps() retval=00000060 ret=11df0b31 003b:Call user32.ReleaseDC(00000000,0003004e) ret=11df0b47 003b:Call user32.GetDpiForSystem() ret=7e8829c0 003b:Ret user32.GetDpiForSystem() retval=00000060 ret=7e8829c0 003b:Ret user32.ReleaseDC() retval=00000001 ret=11df0b47 003b:Call user32.GetMonitorInfoW(00000001,0033f69c) ret=11df0290 003b:Call winex11.drv.GetMonitorInfo(00000001,0033f69c) ret=7e4caf19 003b:Ret winex11.drv.GetMonitorInfo() retval=00000001 ret=7e4caf19 003b:Ret user32.GetMonitorInfoW() retval=00000001 ret=11df0290 003b:Call user32.EnumDisplaySettingsW(0033f6c4 L"\\.\DISPLAY1",ffffffff,0033f570) ret=11df1e96 003b:Call winex11.drv.EnumDisplaySettingsEx(0033f6c4,ffffffff,0033f570,00000000) ret=7e4e592f 003b:Ret winex11.drv.EnumDisplaySettingsEx() retval=00000001 ret=7e4e592f 003b:Ret user32.EnumDisplaySettingsW() retval=00000001 ret=11df1e96 003b:Call ntdll.RtlAllocateHeap(00110000,00000000,00000020) ret=11367113 003b:Ret ntdll.RtlAllocateHeap() retval=0fdab2e0 ret=11367113 003b:Call ntdll.RtlFreeHeap(00110000,00000000,0fdab2e0) ret=113670f4 003b:Ret ntdll.RtlFreeHeap() retval=00000001 ret=113670f4 003b:Call ntdll.RtlAllocateHeap(00110000,00000000,00000030) ret=11367113 003b:Ret ntdll.RtlAllocateHeap() retval=0fdab340 ret=11367113 003b:Call user32.GetMonitorInfoW(00000002,0033f69c) ret=11df0290 003b:Call winex11.drv.GetMonitorInfo(00000002,0033f69c) ret=7e4caf19 003b:Ret winex11.drv.GetMonitorInfo() retval=00000001 ret=7e4caf19 003b:Ret user32.GetMonitorInfoW() retval=00000001 ret=11df0290 003b:Call user32.EnumDisplaySettingsW(0033f6c4 L"\\.\DISPLAY1",ffffffff,0033f570) ret=11df1e96 003b:Call winex11.drv.EnumDisplaySettingsEx(0033f6c4,ffffffff,0033f570,00000000) ret=7e4e592f 003b:Ret winex11.drv.EnumDisplaySettingsEx() retval=00000001 ret=7e4e592f 003b:Ret user32.EnumDisplaySettingsW() retval=00000001 ret=11df1e96 003b:Call ntdll.RtlAllocateHeap(00110000,00000000,00000020) ret=11367113 003b:Ret ntdll.RtlAllocateHeap() retval=0fdab3d0 ret=11367113 003b:Call ntdll.RtlFreeHeap(00110000,00000000,0fdab3d0) ret=113670f4 003b:Ret ntdll.RtlFreeHeap() retval=00000001 ret=113670f4 003b:Call ntdll.RtlAllocateHeap(00110000,00000000,00000060) ret=11367113 003b:Ret ntdll.RtlAllocateHeap() retval=0fdab4d0 ret=11367113 003b:Call ntdll.RtlFreeHeap(00110000,00000000,0fdab340) ret=113670f4 003b:Ret ntdll.RtlFreeHeap() retval=00000001 ret=113670f4 003b:Ret winex11.drv.EnumDisplayMonitors() retval=00000001 ret=7e4cb004 003b:Ret user32.EnumDisplayMonitors() retval=00000001 ret=11defac6 003b:Call ntdll.RtlAllocateHeap(00110000,00000000,00000060) ret=11367113 003b:Ret ntdll.RtlAllocateHeap() retval=0fdab3d0 ret=11367113 003b:Call ntdll.RtlAllocateHeap(00110000,00000000,00000030) ret=11367113 003b:Ret ntdll.RtlAllocateHeap() retval=0fdab340 ret=11367113 003b:Call ntdll.RtlAllocateHeap(00110000,00000000,00000018) ret=11367113 003b:Ret ntdll.RtlAllocateHeap() retval=0fdab490 ret=11367113 003b:Call ntdll.RtlAllocateHeap(00110000,00000000,00000030) ret=11367113 003b:Ret ntdll.RtlAllocateHeap() retval=0fdab378 ret=11367113 003b:Call ntdll.RtlAllocateHeap(00110000,00000000,00000020) ret=11367113 003b:Ret ntdll.RtlAllocateHeap() retval=0fdab5a8 ret=11367113 003b:Call ntdll.RtlFreeHeap(00110000,00000000,0fdab378) ret=113670f4 003b:Ret ntdll.RtlFreeHeap() retval=00000001 ret=113670f4 003b:Call ntdll.RtlAllocateHeap(00110000,00000000,00000048) ret=11367113 003b:Ret ntdll.RtlAllocateHeap() retval=0fdab6a0 ret=11367113 003b:Call ntdll.RtlAllocateHeap(00110000,00000000,00000090) ret=11367113 003b:Ret ntdll.RtlAllocateHeap() retval=0fdab6f0 ret=11367113 ... <repeats endlessly> --- snip ---
--- snip --- $ Wine-dbg> info process pid threads executable (all id:s are in hex) 00000028 4 'explorer.exe' 0000000e 6 'services.exe' 00000020 4 _ 'winedevice.exe' 0000001b 3 _ 'plugplay.exe' 00000011 4 _ 'winedevice.exe' 00000008 6 'UPStudio.exe'
Wine-dbg>attach 0x8 validate_block_pointer () at /home/focht/projects/wine/mainline-src/dlls/ntdll/heap.c:1408 0x7bc629e6 validate_block_pointer+0x3 [/home/focht/projects/wine/mainline-src/dlls/ntdll/heap.c:1408] in ntdll: subl $88,%esp 1408 {
Wine-dbg>info thread process tid prio (all id:s are in hex) 00000008 (D) C:\Program Files\UP Studio\win32\UPStudio.exe 0000004a 0 00000049 0 00000048 0 00000047 0 00000046 0 00000009 0 <==
Wine-dbg>bt
Backtrace: =>0 0x7bc629e6 validate_block_pointer+0x3() [/home/focht/projects/wine/mainline-src/dlls/ntdll/heap.c:1408] in ntdll (0x0033f618) 1 0x7bc6386e RtlFreeHeap+0xa5() [/home/focht/projects/wine/mainline-src/dlls/ntdll/heap.c:1776] in ntdll (0x0033f658) 2 0x113670f4 in libcef (+0x13670f3) (0x0033f678) 3 0x1136708b in libcef (+0x136708a) (0x0033f684) 4 0x11366f81 in libcef (+0x1366f80) (0x0033f694) 5 0x100e04d6 in libcef (+0xe04d5) (0x0033f6a0) 6 0x12368bd5 in libcef (+0x2368bd4) (0x0033f6c0) 7 0x12368bf4 in libcef (+0x2368bf3) (0x0033f6e0) 8 0x11470aa2 in libcef (+0x1470aa1) (0x0033f704) 9 0x11df158b in libcef (+0x1df158a) (0x0033f740) 10 0x11def962 in libcef (+0x1def961) (0x0033f858) 11 0x11df069b in libcef (+0x1df069a) (0x0033f878) 12 0x11df0217 in libcef (+0x1df0216) (0x0033f8a4) 13 0x11def3e1 in libcef (+0x1def3e0) (0x0033f8b8) 14 0x11f28b1c in libcef (+0x1f28b1b) (0x0033f948) 15 0x1163daec in libcef (+0x163daeb) (0x0033f964) 16 0x1149054f in libcef (+0x149054e) (0x0033f9d4) 17 0x11492fcc in libcef (+0x1492fcb) (0x0033fa8c) 18 0x11a3e453 in libcef (+0x1a3e452) (0x0033fae8) 19 0x119fdc97 in libcef (+0x19fdc96) (0x0033fb00) 20 0x119fdbf5 in libcef (+0x19fdbf4) (0x0033fb54) 21 0x11a0933a in libcef (+0x1a09339) (0x0033fb98) 22 0x11a08f6f in libcef (+0x1a08f6e) (0x0033fbbc) 23 0x1133a527 in libcef (+0x133a526) (0x0033fcb8) 24 0x0067fe2b in upstudio (+0x27fe2a) (0x0033fcf0) 25 0x005da0ad in upstudio (+0x1da0ac) (0x0033fe64) ... --- snip ---
--- snip --- -=[ ProtectionID v0.6.9.0 DECEMBER]=- (c) 2003-2017 CDKiLLER & TippeX Build 24/12/17-21:05:42 Ready... Scanning -> C:\Program Files\UP Studio\win32\libcef.dll File Type : 32-Bit Dll (Subsystem : Win CUI / 3), Size : 63810032 (03CDA9F0h) Byte(s) | Machine: 0x14C (I386) Compilation TimeStamp : 0x5814380C -> Sat 29th Oct 2016 05:47:56 (GMT) [TimeStamp] 0x5814380C -> Sat 29th Oct 2016 05:47:56 (GMT) | PE Header | - | Offset: 0x00000148 | VA: 0x10000148 | - [TimeStamp] 0x58143659 -> Sat 29th Oct 2016 05:40:41 (GMT) | Export | - | Offset: 0x03A3E054 | VA: 0x13A3F254 | - [TimeStamp] 0x5814380C -> Sat 29th Oct 2016 05:47:56 (GMT) | DebugDirectory | - | Offset: 0x03A356A4 | VA: 0x13A368A4 | - [TimeStamp] 0x5814380C -> Sat 29th Oct 2016 05:47:56 (GMT) | DebugDirectory | - | Offset: 0x03A356C0 | VA: 0x13A368C0 | - -> File Appears to be Digitally Signed @ Offset 03CD9800h, size : 011F0h / 04592 byte(s) [!] Executable uses TLS callbacks (3 total... 0 invalid addresses) [LoadConfig] Struct determined as v8 (Expected size 140 | Actual size 64) [!] Executable uses SEH Tables (/SAFESEH) (42 calculated 11 recorded... 24 invalid addresses) [!] * table may be compressed / encrypted * [LoadConfig] CodeIntegrity -> Flags 0x0 | Catalog 0x0 (0) | Catalog Offset 0xE0000000 | Reserved 0x3F3217F7 [LoadConfig] GuardAddressTakenIatEntryTable 0x60000000 | Count 0x3F810A82 (1065421442) [LoadConfig] GuardLongJumpTargetTable 0xC0000000 | Count 0x3FB997F3 (1069127667) [LoadConfig] HybridMetadataPointer 0x0 | DynamicValueRelocTable 0x3FE62C00 [LoadConfig] FailFastIndirectProc 0x0 | FailFastPointer 0x406CA000 [LoadConfig] UnknownZero1 0x0 [File Heuristics] -> Flag #1 : 00000100000001001101000100000100 (0x0404D104) [Entrypoint Section Entropy] : 6.78 (section #0) ".text " | Size : 0x30D6803 (51210243) byte(s) [DllCharacteristics] -> Flag : (0x0140) -> ASLR | DEP [SectionCount] 10 (0xA) | ImageSize 0x3DD5000 (64835584) byte(s) [Export] 100% of function(s) (189 of 189) are in file | 0 are forwarded | 189 code | 0 data | 0 uninit data | 0 unknown | [VersionInfo] Product Name : Chromium Embedded Framework (CEF) Dynamic Link Library [VersionInfo] Product Version : 3.2840.1511.gb345083 [VersionInfo] File Description : Chromium Embedded Framework (CEF) Dynamic Link Library [VersionInfo] File Version : 3.2840.1511.gb345083 [VersionInfo] Original FileName : libcef.dll [VersionInfo] Internal Name : libcef [VersionInfo] Legal Copyrights : Copyright (C) 2016 The Chromium Embedded Framework Authors [ModuleReport] [IAT] Modules -> ADVAPI32.dll | dbghelp.dll | GDI32.dll | KERNEL32.dll | ole32.dll | OLEAUT32.dll | PSAPI.DLL | SHELL32.dll | SHLWAPI.dll | USER32.dll | WINMM.dll | WS2_32.dll | USERENV.dll | OLEACC.dll | IMM32.dll | WTSAPI32.dll | COMCTL32.dll | d3d11.dll | dxgi.dll | COMDLG32.dll | USP10.dll | VERSION.dll | credui.dll | dwmapi.dll | NETAPI32.dll | DWrite.dll | CRYPT32.dll | IPHLPAPI.DLL | RPCRT4.dll | Secur32.dll | urlmon.dll | WINHTTP.dll | d3d9.dll | dxva2.dll | WINSPOOL.DRV | CRYPTUI.dll | dhcpcsvc.DLL [ModuleReport] [DelayImport] Modules -> CFGMGR32.dll | SETUPAPI.dll | POWRPROF.dll | MF.dll | MFPlat.DLL | MFReadWrite.dll | bthprops.cpl | BluetoothApis.dll | NDFAPI.DLL [Debug Info] (record 1 of 2) (file offset 0x3A356A0) Characteristics : 0x0 | TimeDateStamp : 0x5814380C (Sat 29th Oct 2016 05:47:56 (GMT)) | MajorVer : 0 / MinorVer : 0 -> (0.0) Type : 2 (0x2) -> CodeView | Size : 0x58 (88) AddressOfRawData : 0x3A3D1CC | PointerToRawData : 0x3A3BFCC CvSig : 0x53445352 | SigGuid B5F519B2-595F-49E8-A4C8D62787E6D077 Age : 0x1 (1) | Pdb : Y:\work\CEF3_git\chromium\src\out\Release_GN_x86\libcef.dll.pdb [Debug Info] (record 2 of 2) (file offset 0x3A356BC) Characteristics : 0x0 | TimeDateStamp : 0x5814380C (Sat 29th Oct 2016 05:47:56 (GMT)) | MajorVer : 0 / MinorVer : 0 -> (0.0) Type : 13 (0xD) -> Undocumented | Size : 0x478 (1144) AddressOfRawData : 0x3A3D224 | PointerToRawData : 0x3A3C024 ... [!] File appears to have no protection or is using an unknown protection - Scan Took : 10.936 Second(s) [000002750h (10064) tick(s)] [246 of 580 scan(s) done] --- snip ---
CEF 3.2840.1511.gb345083
-> https://bitbucket.org/chromiumembedded/cef/get/b345083.zip
--- snip --- int CefBrowserMainParts::PreCreateThreads() { #if defined(OS_WIN) PlatformInitialize(); #endif
net::NetModule::SetResourceProvider(&NetResourceProvider);
// Initialize the GpuDataManager before IO access restrictions are applied and // before the IO thread is started. content::GpuDataManager::GetInstance();
#if defined(USE_AURA) display::Screen::SetScreenInstance(views::CreateDesktopScreen()); #endif
return 0; } --- snip ---
Workarounds: disable all but one display (xrandr) or use Wine-Staging
$ sha1sum UP_Studio_x86_2.4.22.351.exe 9ef910e38e19e094f4abee407fd712d3f30f01e8 UP_Studio_x86_2.4.22.351.exe
$ du -sh UP_Studio_x86_2.4.22.351.exe 127M UP_Studio_x86_2.4.22.351.exe
$ wine --version wine-3.12-206-gbb264a0ac6
Regards
https://bugs.winehq.org/show_bug.cgi?id=34978
Andy P pembertona@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |pembertona@gmail.com
--- Comment #15 from Andy P pembertona@gmail.com --- Seeing that this bug has a patch STAGED... wondering if there is a plan to release the patch?
https://bugs.winehq.org/show_bug.cgi?id=34978
--- Comment #16 from Anastasius Focht focht@gmx.net --- Hello folks,
revisiting, still present.
Another app suffering from this: MechWarrior Online Portal/client (.NET 4.5.x app) Download: https://mwomercs.com/game/download
$ sha1sum MWOPortalInstaller.exe 2e243479cb476e7295ce6f825e6916c3dafea535 MWOPortalInstaller.exe
$ du -sh MWOPortalInstaller.exe 68M MWOPortalInstaller.exe
$ wine --version wine-3.18-75-ge55aca8f49
Regards
https://bugs.winehq.org/show_bug.cgi?id=34978
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |z.figura12@gmail.com
--- Comment #17 from Anastasius Focht focht@gmx.net --- *** Bug 46260 has been marked as a duplicate of this bug. ***
https://bugs.winehq.org/show_bug.cgi?id=34978
Zhiyi Zhang zzhang@codeweavers.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |zzhang@codeweavers.com Assignee|wine-bugs@winehq.org |zzhang@codeweavers.com
https://bugs.winehq.org/show_bug.cgi?id=34978
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- Summary|Many applications need a |Many applications need a |EnumDisplayDevicesW |EnumDisplayDevicesW |implementation for |implementation for |multi-monitor environment |multi-monitor environment |support (DisplayFusion, |support (DisplayFusion, |Turbo Tax 2012, WPF 4.x |Turbo Tax 2012, WPF 4.x |.NET apps, CEFv3 apps) |.NET apps, CEFv3 apps, VS | |Code < 1.16.0)
--- Comment #18 from Anastasius Focht focht@gmx.net --- Hello folks,
revisiting, still present.
Also all Visual Studio Code (VSCode) versions < v1.16.0 suffer from it.
Symptoms: App hangs on startup, churning CPU core. Disabling all but one display or use of Wine-Staging works around - as usual.
https://update.code.visualstudio.com/1.15.1/win32-x64/stable -> https://az764295.vo.msecnd.net/stable/41abd21afdf7424c89319ee7cb0445cc6f3769... (hangs)
https://update.code.visualstudio.com/1.16.0/win32-x64/stable ->
https://az764295.vo.msecnd.net/stable/787b31c0474e6165390b5a5989c9619e3e16f9... (starts, may be worked around)
I've tried to check which commit works around, but there are way too many in between:
https://github.com/Microsoft/vscode/compare/1.15.1...1.16.0
Brief skimming shows some potential candidates (https://github.com/Microsoft/vscode/commits/1.16.0/src/vs/platform/windows , https://github.com/Microsoft/vscode/commits/1.16.0/src/vs/code/) but digging deeper would be wasted time since it works out of the box with Staging.
$ sha1sum VSCodeSetup-x64-1.15.1.exe 900b9d5ad2beeeae25bf658939936172ca005327 VSCodeSetup-x64-1.15.1.exe
$ du -sh VSCodeSetup-x64-1.15.1.exe 41M VSCodeSetup-x64-1.15.1.exe
$ wine --version wine-4.6
Regards
https://bugs.winehq.org/show_bug.cgi?id=34978
--- Comment #19 from Anastasius Focht focht@gmx.net --- Hello folks,
progress has been made:
* https://source.winehq.org/git/wine.git/commitdiff/52a3d5db48982825fc951381ae... ("winex11.drv: Add Xinerama display device handler.")
* https://source.winehq.org/git/wine.git/commitdiff/bada31698fec7125329cae6e62... ("winex11.drv: Initialize GPU registry data.")
* https://source.winehq.org/git/wine.git/commitdiff/eada6178816aebc6cb071d4547... ("winex11.drv: Initialize adapter registry data.")
* https://source.winehq.org/git/wine.git/commitdiff/31445c3264f01d2cf35c0e00ca... ("winex11.drv: Initialize monitor registry data.")
* https://source.winehq.org/git/wine.git/commitdiff/7f57cda707f882de8085367c46... ("winex11.drv: Handle display device changes.")
* https://source.winehq.org/git/wine.git/commitdiff/8f5fbfeb42f1d18c93d0bc98f6... ("user32: Improve EnumDisplayDevicesW stub.")
* https://source.winehq.org/git/wine.git/commitdiff/a985771f83b767a47c1b246b9c... ("user32: Implement EnumDisplayDevicesW().")
It's still not enough to make the applications to work. Wine-Staging 4.10 or disabling all but one display still works around.
$ wine --version wine-4.10-115-gc13351c05a
Regards
[1]: https://web.archive.org/web/20190613211244/http://patcher.mwomercs.com/porta...
[2]: https://az764295.vo.msecnd.net/stable/41abd21afdf7424c89319ee7cb0445cc6f3769...
https://bugs.winehq.org/show_bug.cgi?id=34978
--- Comment #20 from Anastasius Focht focht@gmx.net --- Hello folks,
rejoice, this long standing issue is now fixed by commits:
* https://source.winehq.org/git/wine.git/commitdiff/074abfe097e31d382772aaa5fc... ("winex11.drv: Use generic EnumDisplayMonitors.)
* https://source.winehq.org/git/wine.git/commitdiff/23b28323cb904bc9823f422ac2... ("winex11.drv: Use generic GetMonitorInfo.")
* https://source.winehq.org/git/wine.git/commitdiff/7c2d5a7c25437bc872c8ddf335... ("gdi32: Also accept "\.\DISPLAY<n>" devices names with <n> other than 1 as display devices.")
Thanks Ken, Zhiyi.
$ wine --version wine-4.11-104-g887a57fadd
Regards
https://bugs.winehq.org/show_bug.cgi?id=34978
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|STAGED |RESOLVED Fixed by SHA1| |7c2d5a7c25437bc872c8ddf3354 | |66cffc0e995fa Resolution|--- |FIXED
https://bugs.winehq.org/show_bug.cgi?id=34978
Alexandre Julliard julliard@winehq.org changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |CLOSED
--- Comment #21 from Alexandre Julliard julliard@winehq.org --- Closing bugs fixed in 4.12.