https://bugs.winehq.org/show_bug.cgi?id=45525
--- Comment #26 from Paul Gofman gofmanp@gmail.com --- 1. Vanilla version (from GoG.com)
TCP multiplayer host creation does not work out of the box (hits builtin directplay unimplemented features) but works with native direct play ('winetricks directplay').
2. HD patch Game hangs on attempt to create a TCP multiplayer host exactly the same way as in above comments (even if original unmodified executable is run). This is caused by DPWSOCKX.DLL which HD patch installs into the game directory. It gets loaded instead of the one installed c:\windows\system32. The version and size of the file suggests this dll is from DirectX 7.0 (Win95/98). Simply deleting the file fixes the issue (does not hang and opens the next window; I did not test actual multiplayer game though).
Some Windows users experience similar problems (google for "homm3 hd mod "dpwsockx.dll"") and solve this problem the same way.
I tested the game with HD patch on Windows XP and Windows 7. It worked fine out of the box in both versions for me without deleting DPWSOCKX.DLL.
As for Windows 7, it worked only because of different (newer) version of dplaysvr.exe. Replacing dplaysvr.exe by the one installed by winetricks leads to the same hang under Windows 7. Replacing dplaysvr.exe in Wine did not work for me as the newer dplaysvr.exe from my Windows 7 installation hits various unimplemented API functions under Wine (which can probably be qualified as bugs but unrelated to this one).
As for WinXP, there is no hang even with dplaysvr.exe taken from winetricks directplay version. This is consistent with my event visibility testing in Comment #20. This is probably supposed to work the same way under Wine if Windows version set to somewhat earlier than Vista (e. g. XP), but it doesn't. I've tested a workaround patch which simply "swallows" Global\ prefix in sync object names and it fixes the issue too.
So as a bottom line in respect to this bug Wine seems to work exactly the same way as Windows Vista+. The issue can be fixed by deleting DPWSOCKX.DLL from game directory after installing HD patch.
Yet I suppose here is a bug in (not) handling sync objects events namespaces for Windows versions set below XP. Besides, for Vista+ versions Windows docs claim that Global\ prefixes are assumed by default for service processes (those having session id 0), and, while unrelated to this bug, can potentially be of some issue too as Wine currently seems to not handling namespace prefixes anyhow.