[Bug 47120] New: Expansive Civilian Warfare 1.0.0.0 fails to start, reports 'there was an error loading bhs.dll' (Wine's 'd3d8.dll' is preferred over native d3d8->d3d9 thunk dll, causing failure)
wine-bugs at winehq.org
wine-bugs at winehq.org
Fri May 3 15:10:14 CDT 2019
https://bugs.winehq.org/show_bug.cgi?id=47120
Bug ID: 47120
Summary: Expansive Civilian Warfare 1.0.0.0 fails to start,
reports 'there was an error loading bhs.dll' (Wine's
'd3d8.dll' is preferred over native d3d8->d3d9 thunk
dll, causing failure)
Product: Wine
Version: 4.7
Hardware: x86-64
OS: Linux
Status: NEW
Severity: normal
Priority: P2
Component: -unknown
Assignee: wine-bugs at winehq.org
Reporter: focht at gmx.net
Distribution: ---
Hello folks,
reported here:
https://forum.winehq.org/viewtopic.php?f=2&t=32324
https://w3dhub.com/forum/topic/416741-horrible-luck-cannot-get-ecw-or-w3dhl-working-on-any-of-my-oss
http://www.renegadeforums.com/index.php?t=msg&th=25165
It seems various people spend a good amount of time trying to investigate
without luck.
Download:
http://download.expansivecivilianwarfare.com/Alpha/ExpansiveCivilianWarfareSetup.exe
Backup:
https://web.archive.org/web/20190503192509/http://download.expansivecivilianwarfare.com/Alpha/ExpansiveCivilianWarfareSetup.exe
--- snip ---
$ pwd
/home/focht/.wine/drive_c/Program Files/Expansive Civilian Warfare
$ WINEDEBUG=+seh,+loaddll,+relay,+d3dx,+d3d8 wine ./Game300.exe >>log.txt 2>&1
...
003e:Call KERNEL32.LoadLibraryA(007f8838 "D3D8.DLL") ret=00546c4e
...
003e:trace:loaddll:load_builtin_dll Loaded
L"C:\\windows\\system32\\opengl32.dll" at 0x7c180000: builtin
003e:trace:loaddll:load_builtin_dll Loaded
L"C:\\windows\\system32\\wined3d.dll" at 0x7c2c0000: builtin
003e:trace:loaddll:load_builtin_dll Loaded L"C:\\windows\\system32\\d3d8.dll"
at 0x7c820000: builtin
003e:Call PE DLL (proc=0x7c83e4e0,module=0x7c820000
L"d3d8.dll",reason=WINE_PREATTACH,res=(nil))
003e:Ret PE DLL (proc=0x7c83e4e0,module=0x7c820000
L"d3d8.dll",reason=WINE_PREATTACH,res=(nil)) retval=1
003e:Call PE DLL (proc=0x7c1fa0b0,module=0x7c180000
L"opengl32.dll",reason=PROCESS_ATTACH,res=(nil))
003e:Ret PE DLL (proc=0x7c1fa0b0,module=0x7c180000
L"opengl32.dll",reason=PROCESS_ATTACH,res=(nil)) retval=1
003e:Call PE DLL (proc=0x7c38dda0,module=0x7c2c0000
L"wined3d.dll",reason=PROCESS_ATTACH,res=(nil))
...
003e:Ret PE DLL (proc=0x7c83e4e0,module=0x7c820000
L"d3d8.dll",reason=PROCESS_ATTACH,res=(nil)) retval=1
003e:Ret KERNEL32.LoadLibraryA() retval=7c820000 ret=00546c4e
003e:Call KERNEL32.GetProcAddress(7c820000,007f8828 "Direct3DCreate8")
ret=00546c6b
003e:Ret KERNEL32.GetProcAddress() retval=7c82cdbc ret=00546c6b
003e:Call d3d8.Direct3DCreate8(00000078) ret=00546c78
003e:trace:d3d8:Direct3DCreate8 sdk_version 0x78.
...
003e:trace:d3d8:Direct3DCreate8 Created d3d8 object 0x16d838.
003e:Ret d3d8.Direct3DCreate8() retval=0016d838 ret=00546c78
003e:trace:d3d8:d3d8_GetAdapterCount iface 0x16d838.
...
003e:trace:d3d8:device_parent_wined3d_device_created device_parent 0x1cf57c,
device 0x1e00030
003e:Ret wined3d.wined3d_device_create() retval=00000000 ret=7c836eb3
...
003e:trace:d3d8:device_parent_create_swapchain_texture device_parent 0x1cf57c,
container_parent 0x16d5b0, desc 0x33dae4, texture flags 0, texture 0x1bc4c00.
...
003e:trace:d3d8:d3d8_device_QueryInterface iface 0x1cf578, riid
{b4211cfa-51b9-4a9f-ab78-db99b2bb678e}, out 0x33d87c.
003e:warn:d3d8:d3d8_device_QueryInterface
{b4211cfa-51b9-4a9f-ab78-db99b2bb678e} not implemented, returning
E_NOINTERFACE.
003e:trace:d3d8:device_parent_texture_sub_resource_created Created surface
0x16d5d0.
003e:Ret wined3d.wined3d_texture_create() retval=00000000 ret=7c832fd1
...
003e:Call KERNEL32.LoadLibraryA(1120ed98 "bhs.dll") ret=110022a4
...
003e:trace:loaddll:load_builtin_dll Loaded
L"C:\\windows\\system32\\d3dcompiler_47.dll" at 0x66c20000: builtin
...
003e:trace:loaddll:load_builtin_dll Loaded L"C:\\windows\\system32\\d3dxof.dll"
at 0x67040000: builtin
...
003e:trace:loaddll:load_builtin_dll Loaded
L"C:\\windows\\system32\\d3dx9_43.dll" at 0x66ca0000: builtin
003e:trace:loaddll:load_native_dll Loaded L"C:\\Program Files\\Expansive
Civilian Warfare\\shaders.dll" at 0x12800000: native
003e:trace:loaddll:load_native_dll Loaded L"C:\\Program Files\\Expansive
Civilian Warfare\\bhs.dll" at 0x45000000: native
...
003e:Call PE DLL (proc=0x66cf9960,module=0x66ca0000
L"d3dx9_43.dll",reason=PROCESS_ATTACH,res=(nil))
...
003e:Ret PE DLL (proc=0x66cf9960,module=0x66ca0000
L"d3dx9_43.dll",reason=PROCESS_ATTACH,res=(nil)) retval=1
003e:Call PE DLL (proc=0x1281ab80,module=0x12800000
L"shaders.dll",reason=PROCESS_ATTACH,res=(nil))
...
003e:Call KERNEL32.SetUnhandledExceptionFilter(12825aad) ret=12825b24
003e:Ret KERNEL32.SetUnhandledExceptionFilter() retval=111eb77c ret=12825b24
...
003e:trace:seh:raise_exception code=c0000005 flags=0 addr=0x8b117508
ip=8b117508 tid=003e
003e:trace:seh:raise_exception info[0]=00000000
003e:trace:seh:raise_exception info[1]=8b117508
003e:trace:seh:raise_exception eax=7c8429a4 ebx=00000000 ecx=7c834ac0
edx=8b117508 esi=0486c56c edi=00000000
003e:trace:seh:raise_exception ebp=1283868c esp=0033d0bc cs=0023 ds=002b
es=002b fs=0063 gs=006b flags=00010206
003e:trace:seh:call_stack_handlers calling handler at 0x1282a71c code=c0000005
flags=0
003e:Call KERNEL32.GetLastError() ret=1281b154
003e:Ret KERNEL32.GetLastError() retval=00000000 ret=1281b154
...
003e:exception c0000005 in PE entry point
(proc=0x1281ab80,module=0x12800000,reason=PROCESS_ATTACH,res=(nil))
...
003e:trace:loaddll:free_modref Unloaded module L"C:\\Program Files\\Expansive
Civilian Warfare\\bhs.dll" : native
003e:trace:loaddll:free_modref Unloaded module L"C:\\Program Files\\Expansive
Civilian Warfare\\shaders.dll" : native
003e:trace:loaddll:free_modref Unloaded module
L"C:\\windows\\system32\\d3dx9_43.dll" : builtin
003e:trace:loaddll:free_modref Unloaded module
L"C:\\windows\\system32\\d3dxof.dll" : builtin
003e:trace:loaddll:free_modref Unloaded module
L"C:\\windows\\system32\\d3dcompiler_47.dll" : builtin
003e:Ret KERNEL32.LoadLibraryA() retval=00000000 ret=110022a4
...
003e:Call user32.MessageBoxA(00000000,1120eca0 "Unfortunately, there was an
error loading bhs.dll. Please report this bug!",1120ee80 "Error",00040030)
ret=11002328
--- snip ---
One has to debug through the dll init of 'shaders.dll' to see what's going on.
The ease debugging, the game should be configured to run in Windowed mode (it's
not by default). See registry snippet.
--- snip ---
[HKEY_LOCAL_MACHINE\Software\Westwood\Rp2 \Render]
...
"DriverVersionCheckDisabled"=dword:00000057
...
"RenderDeviceWindowed"=dword:00000001
--- snip ---
I spare you a long trace of disassembly, only providing the final crash site:
--- snip ---
12803650 push ecx
12803651 mov eax,dword ptr ds:[12838284] ; d3d8_wined3d_device_parent_ops
12803656 mov ecx,dword ptr ds:[eax] ; device_parent_wined3d_device_created
12803658 mov edx,dword ptr ds:[ecx+1C]
1280365B push shaders.128380C0
12803660 push eax
12803661 call edx ; *boom*
12803663 mov ecx,dword ptr ds:[1283818C]
12803669 movzx edx,cl
1280366C mov eax,CCCCCCCD
12803671 mul edx
12803673 movzx eax,ch
12803676 shr edx,3
12803679 add edx,eax
1280367B mov dword ptr ss:[esp],edx
1280367E fild st(0),dword ptr ss:[esp]
--- snip ---
--- snip ---
Address To From Size Comment Party
0032D12C 128032B7 12803650 18 shaders.sub_12803639+17 User
0032D144 1282A71C 128032B7 1C shaders.128032B7 User
0032D160 1282A87B 1282A71C 80 shaders.sub_1282A71C User
0032D1E0 1281AB9E 1282A87B BC shaders.sub_1282A87B User
0032D29C 7BCC3730 1281AB9E 694 shaders.EntryPoint+1E User
0032D930 111D395D 7BCC3730 BC 7BCC3730 User
0032D9EC 7BCC3730 111D395D 243C scripts.111D395D User
0032FE28 0043D050 7BCC3730 AC 7BCC3730 User
0032FED4 7B47ACA2 0043D050 4C game300.0043D050 System
0032FF20 7B4A5A50 7B47ACA2 BC kernel32.7B47ACA2 System
0032FFDC 7B47ACAE 7B4A5A50 14 kernel32.7B4A5A50 System
0032FFF0 00000000 7B47ACAE kernel32.7B47ACAE User
--- snip ---
Apparently the game ships its own d3d8->d3d9 thunk dll.
Similar to what this FOSS project does:
https://github.com/crosire/d3d8to9
--- quote ---
This is a pseudo-driver module that intends to improve compatibility and
stability in games using Direct3D 8 for rendering by converting all API calls
and lowlevel shaders to equivalent Direct3D 9 ones. By that it also opens those
games to the new possibilities from proven tools and wrappers written for
Direct3D 9.
--- quote ---
NOTE: The game provided thunk dlls seem to be proprietary/closed (Westwood
Renegade) and have no relation to the FOSS project.
Wine doesn't pick up the d3d8 thunk dll from the game directory but instead
loads the builtin (preferred) one by default, causing a crash due to different
vtable/interface layouts later.
To avoid the crash, force Wine to load native 'd3d8.dll' (thunk/wrapper).
Interestingly the game seems to only need d3d8 override, even though it ships
d3d9 as well ("ShaderInjector"). Maybe it misses some functionality later, I
did not create (host)/join a game to verify.
--- snip ---
$ pwd
/home/focht/.wine/drive_c/Program Files/Expansive Civilian Warfare
$ WINEDLLOVERRIDES=d3d8=n,b wine ./Game300.exe
--- snip ---
ProtectionID scan of shipped D3D8/9 dlls:
--- snip ---
-=[ ProtectionID v0.6.9.0 DECEMBER]=-
(c) 2003-2017 CDKiLLER & TippeX
Build 24/12/17-21:05:42
Ready...
Scanning -> C:\Program Files\Expansive Civilian Warfare\d3d8.dll
File Type : 32-Bit Dll (Subsystem : Win GUI / 2), Size : 128000 (01F400h)
Byte(s) | Machine: 0x14C (I386)
Compilation TimeStamp : 0x46E888A9 -> Thu 13th Sep 2007 00:47:37 (GMT)
[TimeStamp] 0x46E888A9 -> Thu 13th Sep 2007 00:47:37 (GMT) | PE Header | - |
Offset: 0x000000F0 | VA: 0x120000F0 | -
[TimeStamp] 0x46E888A8 -> Thu 13th Sep 2007 00:47:36 (GMT) | Export | - |
Offset: 0x0001D134 | VA: 0x1201E534 | -
[TimeStamp] 0x46E888A9 -> Thu 13th Sep 2007 00:47:37 (GMT) | DebugDirectory | -
| Offset: 0x00016DA4 | VA: 0x120181A4 | -
[LoadConfig] Struct determined as v8 (Expected size 140 | Actual size 64)
[!] Executable uses SEH Tables (/SAFESEH) (9 calculated 9 recorded... 0 invalid
addresses)
[LoadConfig] CodeIntegrity -> Flags 0x5 | Catalog 0x0 (0) | Catalog Offset
0x775C3A63 | Reserved 0x77747365
[LoadConfig] GuardAddressTakenIatEntryTable 0x5C646F6F | Count 0x656E6572
(1701733746)
[LoadConfig] GuardLongJumpTargetTable 0x65646167 | Count 0x6433645C
(1681089628)
[LoadConfig] HybridMetadataPointer 0x64702E38 | DynamicValueRelocTable 0x62
[LoadConfig] FailFastIndirectProc 0x0 | FailFastPointer 0x0
[LoadConfig] UnknownZero1 0x0
[File Heuristics] -> Flag #1 : 00000100000001001100000100000000 (0x0404C100)
[Entrypoint Section Entropy] : 6.70 (section #0) ".text " | Size : 0x166DF
(91871) byte(s)
[DllCharacteristics] -> Flag : (0x0000) -> NONE
[SectionCount] 4 (0x4) | ImageSize 0x24000 (147456) byte(s)
[Export] 100% of function(s) (1 of 1) are in file | 0 are forwarded | 1 code |
0 data | 0 uninit data | 0 unknown |
[ModuleReport] [IAT] Modules -> d3d9.dll | KERNEL32.dll | ADVAPI32.dll
[Debug Info] (record 1 of 1) (file offset 0x16DA0)
Characteristics : 0x0 | TimeDateStamp : 0x46E888A9 (Thu 13th Sep 2007 00:47:37
(GMT)) | MajorVer : 0 / MinorVer : 0 -> (0.0)
Type : 2 (0x2) -> CodeView | Size : 0x36 (54)
AddressOfRawData : 0x1D2D8 | PointerToRawData : 0x1BED8
CvSig : 0x53445352 | SigGuid 1383BEE1-0556-4DB0-B5D8930F8B72CBF2
Age : 0x5 (5) | Pdb : c:\westwood\renegade\d3d8.pdb
[CompilerDetect] -> Visual C++ 8.0 (Visual Studio 2005)
[!] File appears to have no protection or is using an unknown protection
- Scan Took : 0.211 Second(s) [0000000D3h (211) tick(s)] [246 of 580 scan(s)
done]
Scanning -> C:\Program Files\Expansive Civilian Warfare\d3d9.dll
File Type : 32-Bit Dll (Subsystem : Win GUI / 2), Size : 170496 (029A00h)
Byte(s) | Machine: 0x14C (I386)
Compilation TimeStamp : 0x4EE53333 -> Sun 11th Dec 2011 22:48:19 (GMT)
[TimeStamp] 0x4EE53333 -> Sun 11th Dec 2011 22:48:19 (GMT) | PE Header | - |
Offset: 0x00000100 | VA: 0x10000100 | -
[TimeStamp] 0x4EE53333 -> Sun 11th Dec 2011 22:48:19 (GMT) | Export | - |
Offset: 0x000267C4 | VA: 0x10027BC4 | -
[TimeStamp] 0x4EE53333 -> Sun 11th Dec 2011 22:48:19 (GMT) | DebugDirectory | -
| Offset: 0x0000FD84 | VA: 0x10011184 | -
[LoadConfig] Struct determined as v8 (Expected size 140 | Actual size 64)
[!] Executable uses SEH Tables (/SAFESEH) (9 calculated 9 recorded... 0 invalid
addresses)
[LoadConfig] CodeIntegrity -> Flags 0x6 | Catalog 0x0 (0) | Catalog Offset
0x555C3A43 | Reserved 0x73726573
[LoadConfig] GuardAddressTakenIatEntryTable 0x4141485C | Count 0x5C49444E
(1548305486)
[LoadConfig] GuardLongJumpTargetTable 0x75636F44 | Count 0x746E656D
(1953391981)
[LoadConfig] HybridMetadataPointer 0x69565C73 | DynamicValueRelocTable
0x6C617573
[LoadConfig] FailFastIndirectProc 0x75745320 | FailFastPointer 0x206F6964
[LoadConfig] UnknownZero1 0x30313032
[File Heuristics] -> Flag #1 : 00000100000001001101000100000000 (0x0404D100)
[Entrypoint Section Entropy] : 6.65 (section #0) ".text " | Size : 0xF6D5
(63189) byte(s)
[DllCharacteristics] -> Flag : (0x0140) -> ASLR | DEP
[SectionCount] 5 (0x5) | ImageSize 0x2F000 (192512) byte(s)
[Export] 100% of function(s) (8 of 8) are in file | 0 are forwarded | 8 code |
0 data | 0 uninit data | 0 unknown |
[ModuleReport] [IAT] Modules -> d3dx9_43.dll | KERNEL32.dll | USER32.dll
[Debug Info] (record 1 of 1) (file offset 0xFD80)
Characteristics : 0x0 | TimeDateStamp : 0x4EE53333 (Sun 11th Dec 2011 22:48:19
(GMT)) | MajorVer : 0 / MinorVer : 0 -> (0.0)
Type : 2 (0x2) -> CodeView | Size : 0x6E (110)
AddressOfRawData : 0x26C90 | PointerToRawData : 0x25890
CvSig : 0x53445352 | SigGuid 14025EC5-8B84-4BDC-BEDA3337679779DC
Age : 0x6 (6) | Pdb : C:\Users\HAANDI\Documents\Visual Studio
2010\Projects\ShaderInjector\Release\d3d9.pdb
[CompilerDetect] -> Visual C++ 10.0 (Visual Studio 2010)
[!] File appears to have no protection or is using an unknown protection
- Scan Took : 0.261 Second(s) [000000105h (261) tick(s)] [246 of 580 scan(s)
done]
--- snip ---
Similiar class of bug as:
* bug 14980 ("Wine does not automatically use the riched20 installed by Office
2003/2007/2010/2013/2016")
* bug 25373 ("Nokia S60 5th Edition SDK 1.0: epoc32 emulator and other tools
fail to run (Wine's 'hal.dll' is preferred over native, causing failure to load
app provided library with same name)")
* bug 29678 ("Multiple application installers report 'OS version is too old,
requires Windows 2000 or later' (loader: builtin 'version.dll' vs. private path
'version.dll')(ER Viewer 11, Fetion 2013 January)")
* bug 43472 ("Several apps (R-Link 2 Toolbox/boulangerie patisserie Mavimplant)
crash on startup (Wine's 'packager.dll' is preferred over native, causing
failure to load app provided library with same name)")
* bug 45551 ("InstallShield exits with 0x80004002, cannot find
SECURITY.MySetFileSecurity (Wine's 'security.dll' is preferred over native,
causing failure to load app provided library with same name)")
* bug 47053 ("Beat Saber 'BSIPA' injector using Unity Doorstop proxy (.NET 4.6)
fails to hook 'winhttp.dll' (Wine's 'winhttp.dll' is preferred over native,
causing failure to load app provided library with same name)")
$ sha1sum ExpansiveCivilianWarfareSetup.exe
b0ffbf6299dc3b1680e8208ea5da3b08ea5645d8 ExpansiveCivilianWarfareSetup.exe
$ du -sh ExpansiveCivilianWarfareSetup.exe
1.3G ExpansiveCivilianWarfareSetup.exe
$ wine --version
wine-4.7-142-g0ece679210
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.
More information about the wine-bugs
mailing list