http://bugs.winehq.org/show_bug.cgi?id=30745 Anastasius Focht <focht(a)gmx.net> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW CC| |focht(a)gmx.net Component|-unknown |kernel32 Summary|Soulbringer, GOG version, |GOG.com version of |crashes at start, no splash |Soulbringer crashes on |screen even. |startup (GetModuleHandleExW | |needs to support | |GET_MODULE_HANDLE_EX_FLAG_P | |IN) Ever Confirmed|0 |1 --- Comment #7 from Anastasius Focht <focht(a)gmx.net> 2013-10-12 07:31:27 CDT --- Hello folks, confirming. Bought the game for a few bucks just for analysis. In short: There is an in-process patcher dll that requires to stay in memory until the process exits (makes use of GET_MODULE_HANDLE_EX_FLAG_PIN flag which Wine doesn't implement). --- snip --- $ pwd /home/focht/.wine/drive_c/Program Files/GOG.com/Soulbringer ... $ WINEDEBUG=+tid,+seh,wine ./Soulbringer.exe ... 0009:trace:loaddll:load_native_dll Loaded L"C:\\Program Files\\GOG.com\\Soulbringer\\PATCH.dll" at 0x3c0000: native 0009:trace:loaddll:load_native_dll Loaded L"C:\\Program Files\\GOG.com\\Soulbringer\\data\\Stealth\\Render\\D3d6Lib.dll" at 0x10000000: native ... 0009:fixme:module:GetModuleHandleExW should pin refcount for 0x3c0000 ... 0009:trace:loaddll:free_modref Unloaded module L"C:\\Program Files\\GOG.com\\Soulbringer\\data\\Stealth\\Render\\D3d6Lib.dll" : native 0009:trace:loaddll:free_modref Unloaded module L"C:\\Program Files\\GOG.com\\Soulbringer\\PATCH.dll" : native ... 0009:trace:loaddll:load_native_dll Loaded L"C:\\Program Files\\GOG.com\\Soulbringer\\PATCH.dll" at 0x3c0000: native 0009:trace:loaddll:load_native_dll Loaded L"C:\\Program Files\\GOG.com\\Soulbringer\\D3d7Lib.dll" at 0x10000000: native ... 0009:fixme:module:GetModuleHandleExW should pin refcount for 0x3c0000 ... 0009:trace:loaddll:free_modref Unloaded module L"C:\\Program Files\\GOG.com\\Soulbringer\\D3d7Lib.dll" : native 0009:trace:loaddll:free_modref Unloaded module L"C:\\Program Files\\GOG.com\\Soulbringer\\PATCH.dll" : native 0009:trace:loaddll:free_modref Unloaded module L"C:\\windows\\system32\\dinput.dll" : builtin 0009:trace:loaddll:free_modref Unloaded module L"C:\\windows\\system32\\winmm.dll" : builtin 0009:trace:loaddll:free_modref Unloaded module L"C:\\windows\\system32\\msacm32.dll" : builtin 0009:trace:seh:raise_exception code=c0000005 flags=0 addr=0x3c2320 ip=003c2320 tid=0009 0009:trace:seh:raise_exception info[0]=00000000 0009:trace:seh:raise_exception info[1]=003c2320 0009:trace:seh:raise_exception eax=00000000 ebx=7ea69ec2 ecx=0033f8f8 edx=0016ed6d esi=0033f8f8 edi=00000000 0009:trace:seh:raise_exception ebp=0033ea68 esp=0033ea24 cs=0023 ds=002b es=002b fs=0063 gs=006b flags=00010206 0009:trace:seh:call_stack_handlers calling handler at 0x5f492e0a code=c0000005 flags=0 ... --- snip --- When being loaded, "PATCH.dll" inserts hooks at several locations in main executable. The game code eventually hits such a hook while the dll was already unloaded (not pinned in memory). MSDN for GetModuleHandleEx(): http://msdn.microsoft.com/en-us/library/windows/desktop/ms683200%28v=vs.85%2... Source: http://source.winehq.org/git/wine.git/blob/c0e72bb3626a7ba8090ee07cc0aa88cd5... --- snip --- 505 BOOL WINAPI GetModuleHandleExW( DWORD flags, LPCWSTR name, HMODULE *module ) 506 { ... 538 if (status == STATUS_SUCCESS) 539 { 540 if (flags & GET_MODULE_HANDLE_EX_FLAG_PIN) 541 FIXME( "should pin refcount for %p\n", ret ); 542 else if (!(flags & GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT)) 543 LdrAddRefDll( 0, ret ); 544 } ... 554 return (status == STATUS_SUCCESS); 555 } --- snip --- $ du -sh setup_soulbringer.exe 828M setup_soulbringer.exe $ sha1sum setup_soulbringer.exe 5be1a70a24e37212bfeaa02a29d8d86af9cf2fca setup_soulbringer.exe $ wine --version wine-1.7.4 Regards -- 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.