[Bug 30912] Prince Of Persia: The Forgotten Sand fails to run in 64-bit WINEPREFIX (Microsoft XAudio2, part of DirectX must be installed with WinVer >= 2003 in 64-bit prefixes)

wine-bugs at winehq.org wine-bugs at winehq.org
Sun Apr 21 13:39:35 CDT 2013


http://bugs.winehq.org/show_bug.cgi?id=30912

Anastasius Focht <focht at gmx.net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
                 CC|                            |focht at gmx.net
         Resolution|                            |INVALID
            Summary|[Prince Of Persia : The     |Prince Of Persia: The
                   |Forgotten Sand]Does not     |Forgotten Sand fails to run
                   |work in 64Bits Prefix       |in 64-bit WINEPREFIX
                   |                            |(Microsoft XAudio2, part of
                   |                            |DirectX must be installed
                   |                            |with WinVer >= 2003 in
                   |                            |64-bit prefixes)

--- Comment #3 from Anastasius Focht <focht at gmx.net> 2013-04-21 13:39:35 CDT ---
Hello folks,

there is nothing wrong, it's by design (Microsoft) ;-)

The DirectX installer takes care for installing and registering 32-bit and
64-bit components in a shared WoW64 environment.

The 32-bit COM inproc servers are registered through the main installer
(DllRegisterServer on each dll).
Because the main installer is a 32-bit process all CLSID registry entries will
be in correct 32-bit part of registry.
All 64-bit COM inproc servers are registered through a 64-bit helper process
(infinst.exe).
This creates the data in the part of registry where they are seen by 64-bit
processes (and not 32-bit - which wouldn't make sense anyway).

Microsoft imposed a restriction for XAudio2 on certain 64-bit Windows XP
editions ("Windows XP Professional x64 Edition" vs. "Windows XP 64-Bit
Edition", Version 2003).
This means with Wine defaulting to plain "Windows XP" 64-bit all 32-bit XAudio2
inproc servers are installed/copied to %SystemRoot%\SysWOW64 (fs redirection)
but are _not_ registered as inproc servers.
The 64-bit counterparts are installed _and_ registered.

You can verify by examining "DirectX.log" which lives in "c:\windows\logs".

DX install log for 32-bit component "Aug2009_XAudio_x86.cab" in 64-bit
WINEPREFIX:

--- snip ---
...
04/21/13 18:21:24: dxupdate: DirectXUpdateInstallPlugIn(): Installing
Aug2009_XAudio_x86.cab...
04/21/13 18:21:24: dxupdate: DXCheckTrust():
Z:\home\focht\DOWN~NTG\dx\Aug2009_XAudio_x86.cab is trusted.
04/21/13 18:21:24: dxupdate: Extracted file
C:\users\focht\Temp\DX28e1.tmp\AUG2009_XAudio_x86.inf from cab
04/21/13 18:21:24: dxupdate: DirectXUpdateGetSetupInformation(): DirectX
Version: 4.09.00.0904.0
04/21/13 18:21:24: dxupdate: CheckDependency(): no dependency.
04/21/13 18:21:24: dxupdate: DirectXUpdateGetSetupInformation(): Section
[4.09.00.0904.0-4.09.00.0904.0_WinXP at 64] is being installed.
04/21/13 18:21:24: dxupdate: Extracted file
C:\users\focht\Temp\DX28e1.tmp\XAudio2_5.dll from cab
04/21/13 18:21:24: dxupdate: Extracted file
C:\users\focht\Temp\DX28e1.tmp\XAPOFX1_3.dll from cab
04/21/13 18:21:24: dxupdate: Extracted file
C:\users\focht\Temp\DX28e1.tmp\XAudio2_5_x86.inf from cab
04/21/13 18:21:24: dxupdate: Extracted file
C:\users\focht\Temp\DX28e1.tmp\XAudio2_5_x86.cat from cab
04/21/13 18:21:24: dxupdate: Extracted file
C:\users\focht\Temp\DX28e1.tmp\XAudio2_5_x86_xp.inf from cab
04/21/13 18:21:24: dxupdate: Files:    5
04/21/13 18:21:24: dxupdate: Size:    21504
04/21/13 18:21:24: dxupdate: DirectXUpdateInstallPlugIn(): Installing:
XAudio2_5_x86_xp.inf - [x64_Install]
04/21/13 18:21:24: dxupdate: Installed file C:\windows\SysWOW64\XAudio2_5.dll
04/21/13 18:21:24: dxupdate: Installed file C:\windows\SysWOW64\XAPOFX1_3.dll
--- snip ---

DX install log for 32-bit component "Aug2009_XAudio_x86.cab" in 32-bit
WINEPREFIX:

--- snip ---
04/21/13 18:24:30: dxupdate: DirectXUpdateInstallPlugIn(): Installing
Aug2009_XAudio_x86.cab...
04/21/13 18:24:30: dxupdate: DXCheckTrust():
Z:\home\focht\DOWN~NTG\dx\Aug2009_XAudio_x86.cab is trusted.
04/21/13 18:24:30: dxupdate: Extracted file
C:\windows\system32\DirectX\DXfdef.tmp\AUG2009_XAudio_x86.inf from cab
04/21/13 18:24:30: dxupdate: DirectXUpdateGetSetupInformation(): DirectX
Version: 4.09.00.0904.0
04/21/13 18:24:30: dxupdate: CheckDependency(): no dependency.
04/21/13 18:24:30: dxupdate: DirectXUpdateGetSetupInformation(): Section
[4.09.00.0904.0-4.09.00.0904.0_WinXP] is being installed.
04/21/13 18:24:30: dxupdate: Extracted file
C:\windows\system32\DirectX\DXfdef.tmp\XAudio2_5.dll from cab
04/21/13 18:24:30: dxupdate: Extracted file
C:\windows\system32\DirectX\DXfdef.tmp\XAPOFX1_3.dll from cab
04/21/13 18:24:30: dxupdate: Extracted file
C:\windows\system32\DirectX\DXfdef.tmp\XAudio2_5_x86.inf from cab
04/21/13 18:24:30: dxupdate: Extracted file
C:\windows\system32\DirectX\DXfdef.tmp\XAudio2_5_x86.cat from cab
04/21/13 18:24:30: dxupdate: Extracted file
C:\windows\system32\DirectX\DXfdef.tmp\XAudio2_5_x86_xp.inf from cab
04/21/13 18:24:30: dxupdate: Files:    5
04/21/13 18:24:30: dxupdate: Size:    21504
04/21/13 18:24:30: dxupdate: DirectXUpdateInstallPlugIn(): Installing:
XAudio2_5_x86_xp.inf - [x86_Install]
04/21/13 18:24:30: dxupdate: Installed file C:\windows\system32\XAudio2_5.dll
04/21/13 18:24:30: dxupdate: Installed file C:\windows\system32\XAPOFX1_3.dll
04/21/13 18:24:30: dxupdate: DirectXUpdateInstallPlugIn(): Registering:
XAudio2_5_x86.inf - [DllRegisterServer]
04/21/13 18:24:30: dxupdate: RegisterDLL(): C:\windows\system32\XAudio2_5.dll
is registered successfully.
--- snip ---

Note the additional "DllRegisterServer" part.

64-bit components are omitted, they work as expected.

"XAudio2_5_x86_xp.inf":

--- snip ---
[Version]
Signature = "$Windows NT$"
AdvancedINF = 2.0

[SourceDisksNames]
99 = %DiskName%,"AUG2009_XAudio2_5_x86.cab",0,,-1

[SourceDisksFiles]
XAudio2_5.dll = 99
XAPOFX1_3.dll = 99

[DestinationDirs]
DefaultDestDir = 11
DirectX_SysWOW64 = 10,SysWOW64

[x86_Install]
CopyFiles = DirectX_System

[x64_Install]
CopyFiles = DirectX_SysWOW64

[DirectX_System]
XAudio2_5.dll
XAPOFX1_3.dll

[DirectX_SysWOW64]
XAudio2_5.dll
XAPOFX1_3.dll

[DllRegisterServer]
%11%\XAudio2_5.dll

[Strings]
MSFT                 = "Microsoft"
ExceptionClassDesc   = "DirectX AUG2009 XAudio"
DiskName             = "DirectX AUG2009 XAudio cab"
--- snip ---

Looks sane, "DllRegisterServer" section is present.

The solution lies in the parent "AUG2009_XAudio_x86.inf", responsible which
child component .inf file sections are applied/executed.

--- snip ---
...
; ---- Windows XP ----
[4.09.00.0904.00-4.09.00.0904.00_WinXP]
NumberOfFiles=5
Size=21 ;approximately total file size (Size * 1024 bytes)
CopyCount=1
XAudio2_5_x86_xp.inf, x86_Install
XAudio2_5_x86.inf, DllRegisterServer

; ---- Windows XP 64bit ----
[4.09.00.0904.00-4.09.00.0904.00_WinXP at 64]
NumberOfFiles=5
Size=21 ;approximately total file size (Size * 1024 bytes)
CopyCount=1
XAudio2_5_x86_xp.inf, x64_Install
...

; ---- Windows Server 2003 ----
[4.09.00.0904.00-4.09.00.0904.00_Srv2K3]
NumberOfFiles=5
Size=21 ;approximately total file size (Size * 1024 bytes)
CopyCount=1
XAudio2_5_x86_xp.inf, x86_install
XAudio2_5_x86.inf, DllRegisterServer

; ---- Windows Server 2003 64bit ----
[4.09.00.0904.00-4.09.00.0904.00_Srv2K3 at 64]
NumberOfFiles=5
Size=21 ;approximately total file size (Size * 1024 bytes)
CopyCount=1
XAudio2_5_x86_xp.inf, x64_install
XAudio2_5_x86.inf, DllRegisterServer
...
--- snip ---

Windows XP 64bit dubbed "WinXP at 64" section has the "DllRegisterServer" section
reference for "XAudio2_5_x86.inf" omitted.
This results in 32-bit components "DllRegisterServer" sections not being
executed in shared WoW64 environment.

Solution: set WinVer at least to "Windows 2003" before you are going to install
DirectX/XAudio2 in a 64-bit WINEPREFIX.
This will correctly install and register both, 32-bit and 64-bit XAudio2 dlls.

Resolving "invalid".

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.



More information about the wine-bugs mailing list