http://bugs.winehq.org/show_bug.cgi?id=35452
Bug ID: 35452 Summary: Warhammer 40,000: Dawn of War II: does not start, unhandled exception Product: Wine Version: 1.7.11 Hardware: x86 OS: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: -unknown Assignee: wine-bugs@winehq.org Reporter: marc.bessieres@gmail.com Classification: Unclassified
Created attachment 47319 --> http://bugs.winehq.org/attachment.cgi?id=47319 The console output
I use, on opensuse 13.1 ~/> wine --version wine-1.7.11
I used winetricks to by pass bug Bug 23532 winetricks xlive msasn1
and I disabled dwrite to be able to see some fonts to register on Steam as stated in appdb https://appdb.winehq.org/objectManager.php?sClass=version&iId=19444
Then when I launch the game within Steam I have after a few seconds a box to send data/files to the provider. I don't see anything in the terminal output that would explain (to me) the reason of the error.
Log of the crash handler shows an exception unhandled drive_c/users/guest/Temp: total used in directory 16876 available 34674068 drwxr-xr-x 2 guest users 4096 20 janv. 21:39 . -rw-r--r-- 1 guest users 4658 20 janv. 21:03 bugsplat.log -rw-r--r-- 1 guest users 1143106 20 janv. 21:03 DOW2UUCD10N0.dmp
tail bugsplat.log
2014-01-20 21:03:43 Entered Unhandled Exception Filter 2014-01-20 21:03:48 Minidump file successfully saved C:\users\guest\Temp\DOW2UUCD10N0.dmp 2014-01-20 21:03:48 Launching BsSndRpt.exe "BsSndRpt.exe" /i "C:\users\guest\Temp\BsSndRpt.ini"
In addition in : My Games/Dawn of War 2/Logfiles: total used in directory 16 available 34674016 -rw-r--r-- 1 guest users 1028 20 janv. 21:08 warnings.txt
I found:
21:08:32.23 -- DOW2 Warnings Log -- 21:08:32.23 C:\Program Files (x86)\Steam\SteamApps\common\Dawn of War 2\DOW2.exe started at 2014-01-20 21:08 21:08:32.23 OS NT 5.1, 3958 MB Physical Memory, 1685 Mb Physical Available, 4096 Mb Virtual Available 21:08:32.25 RUN OPTIONS: -logs 21:08:32.25 WORKING DIR: 'C:\Program Files (x86)\Steam\SteamApps\common\Dawn of War 2' 21:08:32.25 USER: 'guest' 21:08:32.29 MOD -- Initializing mod 'DOW2', version '2.6.0', locale 'french'. 21:08:32.33 APP - Multi-threading Enabled 21:08:32.33 XTHREAD: Detected 8 core(s) with 8 hardware thread(s) 21:08:32.34 ParentalControls: Games Explorer found. 21:08:32.34 ParentalControls: Module found. 21:08:32.34 ParentalControls: Dawn of War II IGameExplorer::VerifyAccess() call succeeded (0x00000000). 21:08:32.34 ParentalControls: Dawn of War II access granted. 21:08:32.75 MOD -- Failed to verify content catalog integrity. 21:08:32.75 Content management system isn't properly initialized.
This fits the text in the appdb of the "retribution" expansion pack of DoW2
http://appdb.winehq.org/objectManager.php?sClass=version&iId=22942&i...
This seems to indicate a wintrust issue. As there is no winetricks for it, I tried to trace it with:
WINEDEBUG=+relay,+wintrust wine Steam.exe 2>&1 | tee logfile
And it showed a few lines before opening the log file named bugsplat.log, a call to CryptCATOpen:
002d:Call wintrust.CryptCATOpen(0033e784 L"C:\Program Files (x86)\Steam\SteamApps\common\Dawn of War 2\content.cat",00000002,001c3500,00000000,00000000) ret=00734750 trace:wintrust:CryptCATOpen L"C:\Program Files (x86)\Steam\SteamApps\common\Dawn of War 2\content.cat", 2, 1c3500, 0, 0 002d:Call KERNEL32.CreateFileW(0033e784 L"C:\Program Files (x86)\Steam\SteamApps\common\Dawn of War 2\content.cat",80000000,00000001,00000000,00000007,00000000,00000000) ret=7dcf72f9 002d:Ret KERNEL32.CreateFileW() retval=ffffffff ret=7dcf72f9 002d:Ret wintrust.CryptCATOpen() retval=ffffffff ret=00734750 002d:Call ntdll.RtlFreeHeap(06272000,00000000,0627c268) ret=003e82f1 002d:Ret ntdll.RtlFreeHeap() retval=00000001 ret=003e82f1 002d:Call KERNEL32.GetLastError() ret=78132dba 002d:Ret KERNEL32.GetLastError() retval=00000057 ret=78132dba 002d:Call KERNEL32.GetLastError() ret=78132dba 002d:Ret KERNEL32.GetLastError() retval=00000057 ret=78132dba 002d:Call KERNEL32.GetSystemTimeAsFileTime(0033f270) ret=7818114c 002d:Ret KERNEL32.GetSystemTimeAsFileTime() retval=01cf1618 ret=7818114c 0048:Ret KERNEL32.WaitForSingleObject() retval=00000102 ret=3f01037b 002d:Call KERNEL32.GetLastError() ret=78132dba 002d:Ret KERNEL32.GetLastError() retval=00000057 ret=78132dba 0048:Call KERNEL32.WaitForSingleObject(000002c8,00000000) ret=3f01037b 002d:Call KERNEL32.WriteFile(0000023c,0033f790,00000041,0033f2ec,00000000) ret=0153bdf8 0048:Ret KERNEL32.WaitForSingleObject() retval=00000102 ret=3f01037b 002d:Ret KERNEL32.WriteFile() retval=00000001 ret=0153bdf8 0048:Call KERNEL32.WaitForSingleObject(000003c4,00000000) ret=3f01037b 002d:Call KERNEL32.WriteFile(0000023c,0033f31c,00000002,0033f314,00000000) ret=0153bdf8 002d:Ret KERNEL32.WriteFile() retval=00000001 ret=0153bdf8 002d:Call KERNEL32.GetLastError() ret=78132dba 002d:Ret KERNEL32.GetLastError() retval=00000057 ret=78132dba 002d:Call KERNEL32.GetLastError() ret=78132dba 002d:Ret KERNEL32.GetLastError() retval=00000057 ret=78132dba 0048:Ret KERNEL32.WaitForSingleObject() retval=00000102 ret=3f01037b 002d:Call KERNEL32.GetSystemTimeAsFileTime(0033f330) ret=7818114c 002d:Ret KERNEL32.GetSystemTimeAsFileTime() retval=01cf1618 ret=7818114c 0048:Call KERNEL32.WaitForSingleObject(000003c4,00000000) ret=3f01037b 002d:Call KERNEL32.GetLastError() ret=78132dba 002d:Ret KERNEL32.GetLastError() retval=00000057 ret=78132dba 002d:Call KERNEL32.WriteFile(0000023c,0033f850,00000044,0033f3ac,00000000) ret=0153bdf8 0048:Ret KERNEL32.WaitForSingleObject() retval=00000102 ret=3f01037b 002d:Ret KERNEL32.WriteFile() retval=00000001 ret=0153bdf8 0048:Call KERNEL32.WaitForSingleObject(00000434,00000000) ret=3f01037b 002d:Call KERNEL32.WriteFile(0000023c,0033f3dc,00000002,0033f3d4,00000000) ret=0153bdf8 002d:Ret KERNEL32.WriteFile() retval=00000001 ret=0153bdf8 0048:Ret KERNEL32.WaitForSingleObject() retval=00000102 ret=3f01037b 0048:Call KERNEL32.WaitForSingleObject(00000434,00000000) ret=3f01037b 002d:Call KERNEL32.GetLastError() ret=78132dba 002d:Ret KERNEL32.GetLastError() retval=00000057 ret=78132dba 002d:Call KERNEL32.UnhandledExceptionFilter(0033f7b8) ret=7bc974c5 0048:Ret KERNEL32.WaitForSingleObject() retval=00000102 ret=3f01037b 002d:Call KERNEL32.InterlockedExchange(10037e34,10000000) ret=10004fe0 0048:Call KERNEL32.WaitForSingleObject(0000044c,00000000) ret=3f01037b 002d:Ret KERNEL32.InterlockedExchange() retval=10000000 ret=10004fe0 002d:Call KERNEL32.GetSystemTimeAsFileTime(0033f52c) ret=1000c08a 002d:Ret KERNEL32.GetSystemTimeAsFileTime() retval=01cf1618 ret=1000c08a 002d:Call KERNEL32.GetLastError() ret=10012c58 002d:Ret KERNEL32.GetLastError() retval=00000057 ret=10012c58 002d:Call KERNEL32.GetLastError() ret=10012c58 002d:Ret KERNEL32.GetLastError() retval=00000057 ret=10012c58 0048:Ret KERNEL32.WaitForSingleObject() retval=00000102 ret=3f01037b 002d:Call KERNEL32.GetLastError() ret=10012c58 002d:Ret KERNEL32.GetLastError() retval=00000057 ret=10012c58 0048:Call KERNEL32.WaitForSingleObject(0000044c,00000000) ret=3f01037b 002d:Call KERNEL32.GetTimeZoneInformation(10038250) ret=10014da3 0048:Ret KERNEL32.WaitForSingleObject() retval=00000102 ret=3f01037b 0048:Call KERNEL32.WaitForSingleObject(0000050c,00000000) ret=3f01037b 002d:Ret KERNEL32.GetTimeZoneInformation() retval=00000001 ret=10014da3 0048:Ret KERNEL32.WaitForSingleObject() retval=00000102 ret=3f01037b 002d:Call KERNEL32.WideCharToMultiByte(00000000,00000000,10038254 L"Central Europe Standard Time",ffffffff,10034d08,0000003f,00000000,0033f4a4) ret=10014e1d 0048:Call KERNEL32.WaitForSingleObject(0000050c,00000000) ret=3f01037b 002d:Ret KERNEL32.WideCharToMultiByte() retval=0000001d ret=10014e1d 002d:Call KERNEL32.WideCharToMultiByte(00000000,00000000,100382a8 L"Central Europe Daylight Time",ffffffff,10034d48,0000003f,00000000,0033f4a4) ret=10014e51 002d:Ret KERNEL32.WideCharToMultiByte() retval=0000001d ret=10014e51 002d:Call KERNEL32.GetLastError() ret=10012c58 0048:Ret KERNEL32.WaitForSingleObject() retval=00000102 ret=3f01037b 002d:Ret KERNEL32.GetLastError() retval=00000057 ret=10012c58 002d:Call KERNEL32.GetTempPathA(00000104,0033f590) ret=1000507c 002d:Ret KERNEL32.GetTempPathA() retval=00000014 ret=1000507c 0048:Call KERNEL32.QueryPerformanceCounter(0208e480) ret=3f00e506 002d:Call shlwapi.PathAppendA(0033f590 "C:\users\guest\Temp\",1002c794 "bugsplat.log") ret=1000508b 0048:Ret KERNEL32.QueryPerformanceCounter() retval=00000001 ret=3f00e506
And then I found the following extract from wiki.winehq.org/Wintrust:
CryptCATOpen attempts to get the attribute cert portions of the catalog file, which is a CMS signed message containing a CTL. Attribute certs are unimplemented in Crypt32, so this is essentially dead code at the moment.
So I would imagine it comes from an issue in CryptCATOpen. In addition when I look at the code, I see that In CryptCATOpen there should have been more than only a call to CreateFileW (line 866)
842 * CryptCATOpen (WINTRUST.@) 843 */ 844 HANDLE WINAPI CryptCATOpen(LPWSTR pwszFileName, DWORD fdwOpenFlags, HCRYPTPROV hProv, 845 DWORD dwPublicVersion, DWORD dwEncodingType) 846 { 847 HANDLE file, hmsg; 848 BYTE *buffer = NULL; 849 DWORD size, flags = OPEN_EXISTING; 850 struct cryptcat *cc; 851 852 TRACE("%s, %x, %lx, %x, %x\n", debugstr_w(pwszFileName), fdwOpenFlags, 853 hProv, dwPublicVersion, dwEncodingType); 854 855 if (!pwszFileName) 856 { 857 SetLastError(ERROR_INVALID_PARAMETER); 858 return INVALID_HANDLE_VALUE; 859 } 860 861 if (!dwEncodingType) dwEncodingType = X509_ASN_ENCODING | PKCS_7_ASN_ENCODING; 862 863 if (fdwOpenFlags & CRYPTCAT_OPEN_ALWAYS) flags |= OPEN_ALWAYS; 864 if (fdwOpenFlags & CRYPTCAT_OPEN_CREATENEW) flags |= CREATE_NEW; 865 866 file = CreateFileW(pwszFileName, GENERIC_READ, FILE_SHARE_READ, NULL, flags, 0, NULL); 867 if (file == INVALID_HANDLE_VALUE) return INVALID_HANDLE_VALUE; 868 869 size = GetFileSize(file, NULL); 870 if (!(buffer = HeapAlloc(GetProcessHeap(), 0, size))) 871 { 872 CloseHandle(file); 873 SetLastError(ERROR_OUTOFMEMORY); 874 return INVALID_HANDLE_VALUE; 875 } 876 if (!(hmsg = CryptMsgOpenToDecode(dwEncodingType, 0, 0, hProv, NULL, NULL))) 877 { 878 CloseHandle(file); 879 HeapFree(GetProcessHeap(), 0, buffer); 880 return INVALID_HANDLE_VALUE; 881 }
So I checked it the file existed, and it does.
ll DoW2/drive_c/Program\ Files\ (x86)/Steam/SteamApps/common/Dawn\ of\ War\ 2/content.cat -rw-r--r-- 1 guest users 5861 22 janv. 21:46 DoW2/drive_c/Program Files (x86)/Steam/SteamApps/common/Dawn of War 2/content.cat guest@linux-w330:~>
So I don't know what to do anymore. I can perform any trace needed. May be the CryptCATopen is a red herring, so I can trace anything else if needed