https://bugs.winehq.org/show_bug.cgi?id=50417
Bug ID: 50417
Summary: Multiple game launchers protected by Game Protect Kit
(GPK) crash on startup (dummy PEB->KernelCallbackTable
needed)(Dragon Nest, Age of Wushu)
Product: Wine
Version: 6.0-rc4
Hardware: x86-64
OS: Linux
Status: NEW
Severity: normal
Priority: P2
Component: ntdll
Assignee: wine-bugs(a)winehq.org
Reporter: focht(a)gmx.net
Distribution: ---
Hello folks,
there already exist a small number of bug reports for these games. For example
bug 27716 ("Dragon Nest (Chinese): crashes before login screen") from 2011. I'm
pretty sure the original problem(s) can't be reproduced anymore since the
launcher and protection technology evolved a lot (almost 10 years).
I'm not going to bury my analysis in questionable/messed up bug reports. I did
that mistake many times before.
Anyway, lets hop into this interesting one which took some hours to figure out.
NOTE: When starting the client installer it churns CPU for ~2 minutes until
actually starts installing (extracting files). Just be patient.
--- snip ---
$ pwd
/home/focht/.wine/drive_c/Program Files (x86)/DN/DragonNest
$ WINEDEBUG=+seh,+loaddll,+relay wine ./DNLauncher.exe >>log.txt 2>&1
...
0020:0024:Call KERNEL32.LoadLibraryW(0121d3e8 L"winmm.dll") ret=0309df3c
0020:0024:Ret KERNEL32.LoadLibraryW() retval=01b70000 ret=0309df3c
0020:0024:Call KERNEL32.GetModuleFileNameW(01b70000,0121d11c,00000104)
ret=02f7fec2
0020:0024:Ret KERNEL32.GetModuleFileNameW() retval=0000001d ret=02f7fec2
0020:0024:Call KERNEL32.CreateFileW(0121d11c
L"C:\\windows\\system32\\WINMM.dll",80000000,00000001,00000000,00000003,00000080,00000000)
ret=030a879b
0020:0024:Ret KERNEL32.CreateFileW() retval=000000fc ret=030a879b
0020:0024:Call KERNEL32.GetFileSize(000000fc,0121d118) ret=02f329ff
0020:0024:Ret KERNEL32.GetFileSize() retval=000ae000 ret=02f329ff
0020:0024:Call KERNEL32.VirtualAlloc(00000000,000ae000,00001000,00000040)
ret=0306b045
0020:0024:Ret KERNEL32.VirtualAlloc() retval=03480000 ret=0306b045
0020:0024:Call KERNEL32.ReadFile(000000fc,03480000,000ae000,0121d118,00000000)
ret=02eb9651
0020:0024:Ret KERNEL32.ReadFile() retval=00000001 ret=02eb9651
0020:0024:Call KERNEL32.CloseHandle(000000fc) ret=0300e8bd
0020:0024:Ret KERNEL32.CloseHandle() retval=00000001 ret=0300e8bd
0020:0024:Call KERNEL32.VirtualFree(03480000,00000000,00008000) ret=03091019
0020:0024:Ret KERNEL32.VirtualFree() retval=00000001 ret=03091019
...
--- snip ---
GPK does various consistency checks for loaded modules. The above log snippet
is repeated for a client-coded list of dlls. Since Wine evolved a lot this
year, these kind of checks no longer a problem (bug 15437 et al.)
Disassembly just for documentation in case GPK chokes on one of the few non-PE
"fake" Wine dlls which is currently not the case.
--- snip ---
0300E8CB | bt ax,si |
0300E8CF | sbb ax,bx |
0300E8D2 | push 8000 |
0300E8D7 | btr eax,ecx |
0300E8DA | and ah,E4 |
0300E8DD | shrd ax,dx,52 |
0300E8E2 | push 0 |
0300E8E4 | test ax,6289 |
0300E8E8 | ror ax,9B |
0300E8EC | sbb ah,ch |
0300E8EE | mov eax,dword ptr ds:[ecx+esi+8] | PE->TimeDateStamp disk image
0300E8F2 | test dh,E7 |
0300E8F5 | stc |
0300E8F6 | push esi |
0300E8F7 | cmp eax,dword ptr ds:[edx+ebx+8] | PE->TimeDateStamp loaded dll
0300E8FB | jmp gt.3051676 |
...
03091004 | mov eax,dword ptr ds:[ecx+esi+58] | PE->CheckSum disk image
03091008 | cmc |
03091009 | cmp eax,dword ptr ds:[edx+ebx+58] | PE->CheckSum loaded dll
0309100D | jne gt.305167C |
--- snip ---
Then we arrive at this place:
--- snip ---
...
0024:Call KERNEL32.GetModuleHandleW(0121cfdc
L"C:\\windows\\system32\\kernel32.dll") ret=03058688
0024:Ret KERNEL32.GetModuleHandleW() retval=7b600000 ret=03058688
0024:Call KERNEL32.VirtualAlloc(00000000,00001000,00203000,00000040)
ret=02fc7281
0024:Call
ntdll.NtAllocateVirtualMemory(ffffffff,0121cf6c,00000000,0121cf70,00203000,00000040)
ret=7b0296c1
0024:Ret ntdll.NtAllocateVirtualMemory() retval=00000000 ret=7b0296c1
0024:Ret KERNEL32.VirtualAlloc() retval=02290000 ret=02fc7281
0024:trace:seh:dispatch_exception code=c0000005 flags=0 addr=02E5997A
ip=02e5997a tid=0024
0024:trace:seh:dispatch_exception info[0]=00000000
0024:trace:seh:dispatch_exception info[1]=00000000
0024:trace:seh:dispatch_exception eax=00001000 ebx=7ffde000 ecx=00001000
edx=00001000 esi=00000000 edi=02290000
0024:trace:seh:dispatch_exception ebp=0121d414 esp=0121cfb4 cs=0023 ds=002b
es=002b fs=0063 gs=006b flags=00210207
0024:trace:seh:call_vectored_handlers calling handler at 7B00F270 code=c0000005
flags=0
0024:trace:seh:call_vectored_handlers handler at 7B00F270 returned 0
0024:trace:seh:call_stack_handlers calling handler at 02E6E52C code=c0000005
flags=0
0024:Call KERNEL32.GetLastError() ret=02e5d5b5
0024:Ret KERNEL32.GetLastError() retval=00000000 ret=02e5d5b5
...
wine: Unhandled page fault on read access to 00000000 at address 02E5997A
(thread 0024), starting debugger...
--- snip ---
Disassembly of crash site:
--- snip ---
02E59950 | push edi |
02E59951 | push esi |
02E59952 | mov esi,dword ptr ss:[esp+10] | NULL = src buf
02E59956 | mov ecx,dword ptr ss:[esp+14] | 0x1000 = copy count
02E5995A | mov edi,dword ptr ss:[esp+C] | 02290000 = dest buf
02E5995E | mov eax,ecx |
02E59960 | mov edx,ecx |
02E59962 | add eax,esi |
02E59964 | cmp edi,esi |
02E59966 | jbe gt.2E59970 |
02E59968 | cmp edi,eax |
02E5996A | jb gt.2E59CD8 |
02E59970 | bt dword ptr ds:[2EAA834],1 |
02E59978 | jae gt.2E59981 |
02E5997A | rep movsb |
02E5997C | jmp gt.2E59C98 |
02E59981 | cmp ecx,80 |
02E59987 | jb gt.2E59B5B |
02E5998D | mov eax,edi |
02E5998F | xor eax,esi |
02E59991 | test eax,F |
...
02E59C98 | mov eax,dword ptr ss:[esp+C] |
02E59C9C | pop esi |
02E59C9D | pop edi |
02E59C9E | ret |
--- snip ---
Unlike the crash site, most GPK code is heavily obfuscated which makes
debugging a lot more annoying.
I've noticed in one of the earlier checks (gazillion instructions before this
crash) that some PEB fields were of interest to GPK. Instead of spending hours
on debugging non-linear code flows, lots of asm continuations and virtualized
code/registers let the debugger do more work by using some advanced
functionality of debuggers.
Since hardware breakpoints are fast but limited in size I used the much slower
guard page based memory breakpoint type along with a complex break / log
condition on the PEB page.
Address=0x7FFDE000 (PEB)
Range=0x1000 (page)
Condition=(breakif(0), logif(EIP > 0x2E30000 && EIP < 0x10000000, "PEB access
to {$breakpointexceptionaddress} from {EIP}")
What it basically does: the breakpoint triggers on any PEB read access but only
logs if the memory access came from a certain EIP range (where the protection
module is usually mapped), re-arms the guard page and resumes execution.
Turns out being quite unstable, leading to abrupt (silent) process termination
depending when it was armed. I've yet to investigate why. Thread termination /
APC handling seems to play a role.
Anyway, by using a combination of two breakpoints, one for breaking when a
specific dll was loaded and then arming the complex memory breakpoint I got
lucky one time:
--- snip ---
...
DebugString: "FileName:"
DebugString: "C:\Program Files (x86)\DN\DragonNest\gpk\Sddyn_01.dll"
DebugString: "MD5 Value:"
DebugString: "BE47074011E4A04B8C7106EC4FA892EB"
DebugString: "Download MD5 Value:"
DebugString: "BE47074011E4A04B8C7106EC4FA892EB"
DebugString: "Downloaded MD5 Value:"
DebugString: "BE47074011E4A04B8C7106EC4FA892EB"
DebugString: "Download MD5 Value:"
DebugString: "BE47074011E4A04B8C7106EC4FA892EB"
DebugString: "FileName:"
DebugString: "C:\Program Files (x86)\DN\DragonNest\gpk\splash.jpg"
DebugString: "MD5 Value:"
DebugString: "1E0DBD851EB8E88F05D699799BAD7963"
DebugString: "Download MD5 Value:"
DebugString: "1E0DBD851EB8E88F05D699799BAD7963"
DebugString: "Downloaded MD5 Value:"
DebugString: "1E0DBD851EB8E88F05D699799BAD7963"
DebugString: "Download MD5 Value:"
DebugString: "1E0DBD851EB8E88F05D699799BAD7963"
DLL Unloaded: 02250000 gpkup.dll
DLL Loaded: 02250000
Z:\home\focht\projects\wine\mainline-install-6.0-rc4-x86_64\lib\wine\psapi.dll
DLL Loaded: 02E30000 C:\Program Files (x86)\DN\DragonNest\GPK\GT.dll
Breakpoint at 02274080 (DllMain (wintrust.dll)) set!
DLL Loaded: 02260000
Z:\home\focht\projects\wine\mainline-install-6.0-rc4-x86_64\lib\wine\wintrust.dll
DLL Breakpoint (DLL Load and unload): Module wintrust.dll
INT3 breakpoint "DllMain (wintrust.dll)" at <wintrust._DllMainCRTStartup@12>
(02274080)!
Memory breakpoint enabled!
PEB access to 7FFDE02C from 309F6D4
--- snip ---
Disassembly of the offender:
--- snip ---
...
0309F6D0 | mov edx,dword ptr ss:[ebp] | 0x7FFDE02C
0309F6D4 | mov eax,dword ptr ds:[edx] | PEB->KernelCallbackTable
0309F6D6 | add ch,D8 |
0309F6D9 | btr cx,di |
0309F6DD | mov dword ptr ss:[ebp],eax |
0309F6E1 | mov ecx,dword ptr ds:[edi] |
0309F6E3 | jmp gt.307BD90 |
--- snip ---
The pointer was stored in some rather obfuscated place and later ended up as
parameter for the function call that caused the crash.
Wine doesn't implement the concept of 'KernelCallbackTable' hence the field is
NULL by design.
--- snip ---
$ ==> 7FFDE000 00010000
$+4 7FFDE004 00000000
$+8 7FFDE008 00400000
$+C 7FFDE00C 7BC6D2B4 <&ldr>
$+10 7FFDE010 00113430
$+14 7FFDE014 00000000
$+18 7FFDE018 00110000
$+1C 7FFDE01C 7BC6D2E4 <&peb_lock>
$+20 7FFDE020 00000000
$+24 7FFDE024 00000000
$+28 7FFDE028 00000000
$+2C 7FFDE02C 00000000 ; KernelCallbackTable
$+30 7FFDE030 00000000
$+34 7FFDE034 00000000
$+38 7FFDE038 00000000
$+3C 7FFDE03C 00000000
$+40 7FFDE040 7BC6ED64 <&tls_bitmap>
$+44 7FFDE044 0000001F
$+48 7FFDE048 00000000
$+4C 7FFDE04C 00000000
$+50 7FFDE050 00000000
$+54 7FFDE054 00000000
--- snip ---
There are a lot of mysteries and articles about the purpose of this table on
the Internet. Fortunately there is no need to dive into internals /
implementation details. Although it's useful know that 'user32.dll' initializes
the table and provides a number of callbacks to be called from the kernel side.
https://source.winehq.org/git/wine.git/blob/e377786a71c3b6eab5bc11c0b1c9c7c…
For testing purpose I allocated a page in 'process_init' and set the pointer in
'PEB->KernelCallbackTable'. Note, this is not really correct but the protection
doesn't seem to check/care if the table address belongs to 'user32.dll' module.
Furthermore I used my favorite 0xcafebabe pattern to initialize the table
entries. The "magic" pattern serves two purposes:
* allows to determine if any of the entries has been overwritten
* allows to easier identify invocations of callbacks
The latter one is not applicable here since Wine doesn't implement
'KernelCallbackTable' concept. It's still handy in other scenarios.
By using memory (guard page) breakpoints on the newly allocated
'KernelCallbackTable' buffer one can figure out who wants to peek there and for
what reason. Turns out GPK makes a copy of the existing table, hooks one entry
and then sets 'PEB->KernelCallbackTable' to the copy.
--- snip ---
02FA4C6C | test ebp,ebx | EAX = 02290000 = copy
02FA4C6E | mov dword ptr ds:[edx],eax | EDX = 7FFDE02C (KernelCallbackTable)
02FA4C70 | bt ax,sp |
02FA4C74 | stc |
02FA4C75 | mov eax,dword ptr ds:[edi] |
02FA4C77 | stc |
02FA4C78 | add edi,4 |
02FA4C7E | test dx,bp |
02FA4C81 | xor eax,ebx |
02FA4C83 | jmp gt.2F46E4E |
--- snip ---
A memory dump reveals that our nice babe has been "tainted" by a bad guy _oO_
--- snip ---
$ ==> 02290000 CAFEBABE
$+4 02290004 CAFEBABE
$+8 02290008 CAFEBABE
$+C 0229000C CAFEBABE
$+10 02290010 CAFEBABE
$+14 02290014 CAFEBABE
$+18 02290018 CAFEBABE
$+1C 0229001C CAFEBABE
...
$+100 02290100 CAFEBABE
$+104 02290104 CAFEBABE
$+108 02290108 02E44920 ; GPK callback hook
$+10C 0229010C CAFEBABE
$+110 02290110 CAFEBABE
...
$+FF8 02290FF8 CAFEBABE
$+FFC 02290FFC CAFEBABE
--- snip ---
Table entry 0x0108 seems to be of interest to GPK.
The handler is a very long chain of obfuscated code / asm continuations. But
that doesn't matter as of now. It seems the launcher is fine with just being
able to set up a modified copy. Maybe it expects the callback being called at
one point but I ran into couple of other issues.
--- snip ---
02E44920 | E9 17562100 | jmp gt.3059F3C |
...
03059F3C | 55 | push ebp |
03059F3D | 66:C1C5 9A | rol bp,9A |
03059F41 | 9F | lahf |
03059F42 | 8BEC | mov ebp,esp |
03059F44 | F5 | cmc |
03059F45 | 6A FE | push FFFFFFFE |
03059F47 | C1E8 32 | shr eax,32 |
03059F4A | 66:23C2 | and ax,dx |
03059F4D | 68 A860FC02 | push gt.2FC60A8 |
03059F52 | 66:0FB6C0 | movzx ax,al |
03059F56 | 66:0FA4E0 E9 | shld ax,sp,E9 |
03059F5B | 0FBCC7 | bsf eax,edi |
03059F5E | 68 B097E502 | push gt.2E597B0 |
03059F63 | 0AE2 | or ah,dl |
03059F65 | F7C6 D4530E53 | test esi,530E53D4 |
03059F6B | 64:A1 00000000 | mov eax,dword ptr fs:[0] |
03059F71 | 66:3BFD | cmp di,bp |
03059F74 | F8 | clc |
03059F75 | 80F9 B2 | cmp cl,B2 |
03059F78 | 50 | push eax |
03059F79 | 83EC 38 | sub esp,38 |
03059F7C | C0E8 BF | shr al,BF |
03059F7F | C1F0 48 | shl eax,48 |
03059F82 | 53 | push ebx |
03059F83 | 56 | push esi |
03059F84 | 0FABE0 | bts eax,esp |
03059F87 | C0D0 A1 | rcl al,A1 |
03059F8A | 80E4 81 | and ah,81 |
03059F8D | 57 | push edi |
03059F8E | C0E4 AC | shl ah,AC |
03059F91 | A1 207CEA02 | mov eax,dword ptr ds:[2EA7C20] |
03059F96 | 3145 F8 | xor dword ptr ss:[ebp-8],eax |
03059F99 | 66:0FBAF7 3B | btr di,3B |
03059F9E | E9 31040000 | jmp gt.305A3D4 |
...
--- snip ---
By providing a dummy table, the crash is prevented and the launcher runs a bit
further.
It later fails to start a kernel service which seems to be bug 49346. Although
I think the driver issue is now different (half a year later).
--- snip ---
...
00fc:Call KERNEL32.CreateFileW(02e6f9e0
L"\\\\.\\SDGGameLoader",00000000,00000003,00000000,00000003,00000000,00000000)
ret=02ffe7ab
...
00fc:Ret KERNEL32.CreateFileW() retval=ffffffff ret=02ffe7ab
...
00fc:Call KERNEL32.CopyFileW(0121baec L"C:\\Program Files
(x86)\\DN\\DragonNest\\GPK\\gpe2.e",0121c8fc L"C:\\Program Files
(x86)\\DN\\DragonNest\\GPK\\SDGame32.sys",00000000) ret=02fb385f
...
00fc:Ret KERNEL32.CopyFileW() retval=00000001 ret=02fb385f
...
00fc:Call advapi32.CreateServiceW(00193668,02e6fe00 L"SDGame32",02e6fe00
L"SDGame32",000f01ff,00000001,00000003,00000001,0121c8fc L"C:\\Program Files
(x86)\\DN\\DragonNest\\GPK\\SDGame32.sys",00000000,00000000,00000000,00000000,00000000)
ret=02fa6372
...
--- snip ---
Anyway, that would be another story, another day.
To be honest I think making GPK (Game Protect Kit) working with Wine will be
hard, if at all. It's uses pretty much the same techniques like a rootkit /
ring0 malware with kernel and userspace parts.
===
Downloads:
Small "web" downloader:
http://dn.clientdown.sdo.com/Dn_Download/DN_407_downloader_signed.exe
Full client:
http://dn.clientdown.sdo.com/Ver.407Full/DragonNest_v407_Setup.exehttp://dn.clientdown.sdo.com/Ver.407Full/DragonNest_v407.7z.001http://dn.clientdown.sdo.com/Ver.407Full/DragonNest_v407.7z.002http://dn.clientdown.sdo.com/Ver.407Full/DragonNest_v407.7z.003
---
$ sha1sum DN_407_downloader_signed.exe
a42ec8020a3301f621806423154eb69153727a48 DN_407_downloader_signed.exe
$Â du -sh DN_407_downloader_signed.exe
3.6M DN_407_downloader_signed.exe
$ sha1sum DragonNest_v407*
833939e2f029e6ec4b20a1048901742087ac24a2 DragonNest_v407.7z.001
9b94d45f95b3e145f1a370b76d51cee9676395f0 DragonNest_v407.7z.002
f2b46a763099848f8e26253811ebc4caf336c11f DragonNest_v407.7z.003
4afc1de3968cf4f3c710a11b7be83f18cb0353d8 DragonNest_v407_Setup.exe
$Â du -sh DragonNest_v407*
4.0G DragonNest_v407.7z.001
4.0G DragonNest_v407.7z.002
2.2G DragonNest_v407.7z.003
9.5M DragonNest_v407_Setup.exe
$Â wine --version
wine-6.0-rc4
Regards
--
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.
https://bugs.winehq.org/show_bug.cgi?id=50456
Bug ID: 50456
Summary: cannot draw non-client area
Product: Wine
Version: 6.0-rc4
Hardware: x86
OS: Linux
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: user32
Assignee: wine-bugs(a)winehq.org
Reporter: chenhaoyang(a)uniontech.com
Distribution: ---
Created attachment 69070
--> https://bugs.winehq.org/attachment.cgi?id=69070
IDE:visual c++ 2008 express edition
cannot draw non-client area.Because the size of the non-client area is
incorrect.
--
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.
https://bugs.winehq.org/show_bug.cgi?id=50000
Bug ID: 50000
Summary: wineconsole F8
Product: Wine
Version: 5.19
Hardware: x86-64
OS: Linux
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: -unknown
Assignee: wine-bugs(a)winehq.org
Reporter: vladimir.kokovic(a)gmail.com
Distribution: ---
Created attachment 68408
--> https://bugs.winehq.org/attachment.cgi?id=68408
Exception backtrace
Start wineconsole
Type next cmds:
ver
dir
echo %path%
d & F8 --> Unhandled exception
Unhandled exception: page fault on read access to 0x00000000 in 64-bit code
(0x0000000000401cbe).
Vladimir Koković, DP senior(70),
Serbia, Belgrade, 13.October 2020
--
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.
https://bugs.winehq.org/show_bug.cgi?id=50451
Bug ID: 50451
Summary: RISE Editor takes a long time to start up
Product: Wine-staging
Version: 5.22
Hardware: x86-64
OS: Linux
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: -unknown
Assignee: wine-bugs(a)winehq.org
Reporter: eli(a)meluc.ci
CC: leslie_alistair(a)hotmail.com, z.figura12(a)gmail.com
Distribution: ---
Created attachment 69066
--> https://bugs.winehq.org/attachment.cgi?id=69066
Log messages for RISEEditor.exe
This is one of those ClickOnce apps.
The program can be downloaded from
http://www.risetobloome.com/clickonce/riseeditor/riseeditor.htm , the
RISEEditor.application file can then be started with wine start
RISEEditor.application provided dotnet40 is installed.
After installation, the actual executable is placed in some directory under
"C:/Users/$user/Local Settings/Application Data" and can be started directly
from there.
Starting up the actual application takes a very long time; it hits some sort of
timeout I guess. I've attached the log.
It hangs right after printing line 38,
"0024:fixme:virtual:NtFlushProcessWriteBuffers stub"
--
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.
https://bugs.winehq.org/show_bug.cgi?id=38966
Bug ID: 38966
Summary: force close after hitting install usb drivers on lg
mobile support tool and when enter cell carrier
Product: Wine
Version: 1.7.37
Hardware: x86
OS: Mac OS X
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: -unknown
Assignee: wine-bugs(a)winehq.org
Reporter: catsetname(a)yahoo.com
Created attachment 51910
--> https://bugs.winehq.org/attachment.cgi?id=51910
backtrace.txt
after loading lg mobile support tool i hit install usb drivers, list of cell
carriers pop to select once selected box comes up stating program needs to
close and options to close or show details
--
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.
http://bugs.winehq.org/show_bug.cgi?id=27502
Summary: app freezes when WM_KILLFOCUS creates modal dialog
Product: Wine
Version: unspecified
Platform: All
OS/Version: Linux
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: user32
AssignedTo: wine-bugs(a)winehq.org
ReportedBy: efrias(a)syncad.com
Created an attachment (id=35159)
--> (http://bugs.winehq.org/attachment.cgi?id=35159)
simple example which produces the error
When a program brings up a modal dialog box in response to a WM_KILLFOCUS
message, the program will freeze. I've attached a simple test case, all
boilerplate except for:
case WM_KILLFOCUS:
MessageBox(hWnd, _T("Killing Focus"), _T("Note"), MB_OK);
in the main event loop. If you run the program and then give focus to another
application, the messagebox will pop up and then the program will become
unresponsive.
What is happening is:
- x11drv gets a FocusOut event and calls the event handler, which ends up
SendMessage-ing a WM_KILLFOCUS to the program.
- The programs's code creates a modal dialog like the MessageBox above, and
enters the dialog's event loop, which winds up calling GetMessage which calls
MsgWaitForMultipleObjectsEx to get more X11 events.
- X11DRV_MsgWaitForMultipleObjectsEx executes this:
if (data->current_event) mask = 0; /* don't process nested events
*/
where data->current_event is true since we're still handling the FocusOut
event. Since we're not processing nested events, we'll never be able to
process the usual events like keys or mouse events which could exit this nested
event loop.
This type of error occurs in a few places in our application, where a
WM_KILLFOCUS message to an edit box triggers some input validation and displays
an error on failure. This works correctly in the normal case, where the user
tabs out or clicks on another control in the dialog box containing the edit
control -- since everything stays in the same top-level window, there is no
FocusOut event from X11 and the WM_KILLFOCUS is generated internally by wine in
response to, say, a KeyEvent. I think these key or mouse events are just
posted to the windows message queue, and the X11 event handler has already
exited by the time the application gets around to processing the ensuing
WM_KILLFOCUS. But in the case where focus is lost by clicking outside the
dialog containing the edit control, the WM_KILLFOCUS is generated by the
FocusOut handler which is still executing, and we lock up.
I suspect this is related to bug 11595 "Notepad++ freezes if native application
changes a file it has open (dogfood)". My guess is in that case, a FocusIn
event triggers something like a WM_ACTIVATE, in which notepad++ notices a file
is changed and displays a messagebox asking if you want to reload. Since wine
is still processing the FocusIn event, the modal message loop's call to
MsgWaitForMultipleObjectsEx will never process any useful events because it's a
nested event. Our application's built-in text editor has this same problem.
I don't understand the event handling code well enough to propose a solution.
As a test, I allowed nested event processing and it solved the problem without
introducing any obvious errors, but I'm sure that check was in there for a
reason. It's probably better to keep the application code from being executed
from inside the event handler, if that's possible.
Note: this bug was also posted as a message to wine-devel here:
http://www.winehq.org/pipermail/wine-devel/2011-June/090652.html
--
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
Do not reply to this email, post in Bugzilla using the
above URL to reply.
------- You are receiving this mail because: -------
You are watching all bug changes.
https://bugs.winehq.org/show_bug.cgi?id=50444
Bug ID: 50444
Summary: Text not shown/drawn or hidden starting in Wine 5.18
Product: Wine
Version: 5.18
Hardware: x86-64
OS: Linux
Status: UNCONFIRMED
Severity: blocker
Priority: P2
Component: -unknown
Assignee: wine-bugs(a)winehq.org
Reporter: support(a)htmlvalidator.com
Distribution: ---
Created attachment 69057
--> https://bugs.winehq.org/attachment.cgi?id=69057
The validation pane (the left-side wide window at screen bottom) as displayed
when running CSS HTML Validator under Wine 3 through Wine 5.17.
POSTING this bug report from a CSS HTML Validator user that uses and test CSS
HTML Validator under Wine.
Going back to at least Wine 3, the CSS HTML Validator validation pane has
always displayed correctly until Wine 5.18, when the upgrade from Wine 5.17 to
Wine 5.18 resulted in the validation pane always displaying blank. The
validation pane is located at the bottom of the full CSS HTML Validator window.
See the attached screenshots, I cropped out most of the upper part of the full
CSS HTML Validator window.
--
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.
https://bugs.winehq.org/show_bug.cgi?id=50442
Bug ID: 50442
Summary: WW2 Online: Fractional scaling causes mouse clicks not
registering
Product: Wine
Version: 6.0-rc4
Hardware: x86-64
OS: Linux
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: -unknown
Assignee: wine-bugs(a)winehq.org
Reporter: ilgaz(a)fastmail.fm
Distribution: ---
Created attachment 69054
--> https://bugs.winehq.org/attachment.cgi?id=69054
output of console
I have openSUSE Tumbleweed here with wine-staging installed and "full wayland"
enabled. I have scaled my 1080p monitor using KDE's scaling to 120% and it
displays 1600x900 in resolution screen.
ww2 online launches fine and when I click "OK" button on a dialogue represented
at startup, nothing happens.
When I disable scaling and use raw 1080p resolution, everything works fine.
Game can be downloaded/played free/ required no "winetricks" whatsoever until
today.
https://www.wwiionline.com/
--
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.
http://bugs.winehq.org/show_bug.cgi?id=32058
Bug #: 32058
Summary: Guild Wars 2 launcher freezes/hangs (unable to launch
game)
Product: Wine
Version: 1.5.15
Platform: x86-64
OS/Version: Linux
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: -unknown
AssignedTo: wine-bugs(a)winehq.org
ReportedBy: x.egam.wodahs.x(a)gmail.com
CC: julliard(a)winehq.org
Classification: Unclassified
Once I updated wine to version 1.5.15, the Guild Wars 2 launcher can no longer
launch the game because it just freezes/hangs. This was not an issue in 1.5.14,
and in order to run the game for now I'm using wine 1.5.14 compiled from
source.
In wine 1.5.14, the launcher is black (can't see UI at all, but it's still
functional) unless using the -dx9single flag. Using -dx9single, the background
is black instead of transparent but the UI inside is properly rendered. This
information is important because, before submitting this bug report, I
performed two separate git bisects between 1.5.14 and 1.5.15: one without any
command-line parameters, and one using -dx9single.
Technical details follow:
=======================================================================
1) git bisect for running the game without any parameters:
In the last good commit (8dcbeff760115834656f3f1fc85922e3a9af14d0), the
launcher is still black but it still works. You cannot see the UI but by
blindly logging in, the game does launch. In the first bad commit
(f12c1c6630f0bf842dde9af10da4ab188ff16e94), the behavior is different from the
wine 1.5.15 release and the other commits tested: here, instead of locking up,
the window just disappears. It's still there, but I guess it's fully
transparent. Because this leaves us even more "blind", I considered this "bad"
in the git bisect, yielding the following result:
---
f12c1c6630f0bf842dde9af10da4ab188ff16e94 is the first bad commit
commit f12c1c6630f0bf842dde9af10da4ab188ff16e94
Author: Alexandre Julliard <julliard(a)winehq.org>
Date: Wed Sep 26 13:12:17 2012 +0200
winex11: Switch to an ARGB visual for layered windows with per-pixel alpha.
:040000 040000 e9933c28f3e50c52d2cee37a43b06a2f5cb5a497
3870099a31a68a69cd7c022857794700c2343aa9 M dlls
---
If, however, we consider f12c1c6630f0bf842dde9af10da4ab188ff16e94 "good" in the
git bisect, we get:
---
d8247efd5ecb8c4604624eb2bbf47e194ce59e7e is the first bad commit
commit d8247efd5ecb8c4604624eb2bbf47e194ce59e7e
Author: Alexandre Julliard <julliard(a)winehq.org>
Date: Thu Sep 27 20:47:08 2012 +0200
winex11: Take the alpha channel into account to compute the region of
layered windows.
:040000 040000 3870099a31a68a69cd7c022857794700c2343aa9
d9ec62b63405f910db90b095145a7910cc124eef M dlls
---
In this case, the launcher does indeed lock up in the first bad commit
(d8247efd5ecb8c4604624eb2bbf47e194ce59e7e).
2) git bisect for running the game using -dx9single:
Using the -dx9single flag, we seem to be able to get to a later commit before
it stops working (but does not work in the 1.5.15 release). In the last good
commit (dbff4f422c943a837f0098e921f831eb4a94ac11), everything seems to be fine
(when using the -dx9single flag) and even the transparency seems to be working.
However, in the first bad commit (6f3b097a203d9ca248732cb45eed462599ca3af1),
things start to lock up. This yields the following git bisect result:
---
6f3b097a203d9ca248732cb45eed462599ca3af1 is the first bad commit
commit 6f3b097a203d9ca248732cb45eed462599ca3af1
Author: Alexandre Julliard <julliard(a)winehq.org>
Date: Wed Oct 3 00:09:01 2012 +0200
winex11: Fix a typo in the surface region computation with an alpha
channel.
:040000 040000 fa11ac3c80763b81911ba999d8302029d2c6d147
566c9c06b11f8785c870a1e09ec53d42e13d1524 M dlls
---
--
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
Do not reply to this email, post in Bugzilla using the
above URL to reply.
------- You are receiving this mail because: -------
You are watching all bug changes.
https://bugs.winehq.org/show_bug.cgi?id=38166
Bug ID: 38166
Summary: Heroes of Might and Magic 5 slowly on some maps.
Product: Wine
Version: 1.7.37
Hardware: x86-64
OS: Linux
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: -unknown
Assignee: wine-bugs(a)winehq.org
Reporter: galdralag(a)bk.ru
Distribution: ---
On some maps especially when many green trees game works very slowly.
This happens on all versions of nvidia driver AFTER 331.89.
331.89 it is last version when game works on maximum video settings.
May be this is bug of nvidia driver (not wine) but I can't test this.
I tested 2 videocards nvidia 760M and 650 ti.
This can be reproduced on ArchLinux, Fedora, OpenSuse and Kubuntu.
If you have problems with reproducing I can attach some maps where it can be
reprocuced
--
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.