https://bugs.winehq.org/show_bug.cgi?id=39648
Bug ID: 39648 Summary: MTA: San Andreas cannot start in Wine64 Product: Wine Version: unspecified Hardware: x86 OS: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: ntoskrnl Assignee: wine-bugs@winehq.org Reporter: rafalh1992@o2.pl Distribution: ---
Created attachment 52850 --> https://bugs.winehq.org/attachment.cgi?id=52850 Log (+ntoskrnl)
Multi Theft Auto: San Andreas 1.5 cannot start in Wine64 (WoW64 mode) in Linux Mint 17.1. Wine stops logging with error "wine client error:37: partial write 57344".
I already debugged this issue. MTA: SA is multiplayer mod for GTA: San Andreas. MTA contains kernel mode driver named FairplayKD.sys. MTA installs it at startup and then sends IOCTL to it from modded gta_sa.exe process. When driver tries to process IOCTL it fails and sets ipr->IoStatus.Status to STATUS_NOT_IMPLEMENTED. But when Wine interprets IRP structure in ntoskrnl it reads the status as number of bytes (which is normally passed in IoStatus.Information field). Then Wine tries to transfer 0xC0000002 (STATUS_NOT_IMPLEMENTED) bytes to gta_sa.exe process (process which sent IOCTL). This obliviously fails and causes "wine client error:37".
Problem is caused by invalid definition of IRP structure in wdk.h header. Its improperly marked as packed. It does nothing in 32-bit because structure doesn't need any padding in such architecture. In 64-bit it causes displacement of Status field by 4 bytes.
I already created patch for this issue and going to send it. Patched Wine 1.7.53 allows me to start MTA and play normally. Newer Wine has regression in DirectX which makes MTA unplayable.