[Bug 29806] Hype The Time Quest: DirectX Media (DXM) v6.0 runtime installer fails (advpack.ExecuteCab should extract the INF from CAB before running the install part)

wine-bugs at winehq.org wine-bugs at winehq.org
Tue Feb 18 14:16:55 CST 2014


https://bugs.winehq.org/show_bug.cgi?id=29806

Anastasius Focht <focht at gmx.net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
                URL|                            |http://driverscollection.co
                   |                            |m/?aid=2192
           Keywords|regression                  |download
          Component|-unknown                    |advpack
                 CC|                            |focht at gmx.net
     Ever confirmed|0                           |1
            Summary|DirectX Software Test       |Hype The Time Quest:
                   |Causes Hype The Time Quest  |DirectX Media (DXM) v6.0
                   |Installer to Fail           |runtime installer fails
                   |                            |(advpack.ExecuteCab should
                   |                            |extract the INF from CAB
                   |                            |before running the install
                   |                            |part)
           Severity|minor                       |normal

--- Comment #3 from Anastasius Focht <focht at gmx.net> ---
Hello folks,

confirming.

The DirectX Media (DXM) v6.0 runtime installer which is distributed with the
game is the failing part here.
It refuses/fails to run with NT versions > 4.0 which makes sense because at the
time of DXM v6 release Windows 2000 did not exist (yet).

Prerequisite: WINEPREFIX WinVer set to "Windows 4.0"

You can run the sub-installer standalone.

Relevant part of trace log:

--- snip ---
$ WINEDEBUG=+tid,+seh,+relay wine ./DXMedia.exe -id:"Hype - The Time Quest"
...
0025:Call KERNEL32.FindResourceA(00400000,000000c9,004071e4 "BINARY")
ret=00402106
0025:Ret  KERNEL32.FindResourceA() retval=0040d3e8 ret=00402106
0025:Call KERNEL32.LoadResource(00400000,0040d3e8) ret=00402126
0025:Ret  KERNEL32.LoadResource() retval=00495730 ret=00402126
0025:Call KERNEL32.CreateFileA(00409cb8
"C:\\users\\focht\\Temp\\~dxmcab~\\support.cab",40000000,00000000,00000000,00000002,00000080,00000000)
ret=00402145
0025:Ret  KERNEL32.CreateFileA() retval=00000050 ret=00402145
0025:Call KERNEL32.SizeofResource(00400000,0040d3e8) ret=0040216c
0025:Ret  KERNEL32.SizeofResource() retval=0006bf0c ret=0040216c
0025:Call KERNEL32.WriteFile(00000050,00495730,0006bf0c,00e8e0d8,00000000)
ret=0040217b
0025:Ret  KERNEL32.WriteFile() retval=00000001 ret=0040217b
0025:Call KERNEL32.CloseHandle(00000050) ret=00402185
0025:Ret  KERNEL32.CloseHandle() retval=00000001 ret=00402185 
...
0025:Call advpack.ExecuteCab(ffffffff,00e8dfcc,00000000) ret=00401919
0025:Call ntdll.RtlCreateUnicodeStringFromAsciiz(00e8df4c,0040a830
"C:\\users\\focht\\Temp\\~dxmcab~\\support.cab") ret=7e96e5ed
0025:Ret  ntdll.RtlCreateUnicodeStringFromAsciiz() retval=00000001 ret=7e96e5ed
0025:Call ntdll.RtlCreateUnicodeStringFromAsciiz(00e8df44,00e8e954
"support.inf") ret=7e96e61a
0025:Ret  ntdll.RtlCreateUnicodeStringFromAsciiz() retval=00000001 ret=7e96e61a
...
0025:Call KERNEL32.MultiByteToWideChar(00000000,00000000,00e8dfd8
"C:\\users\\focht\\Temp\\~dxmcab~",ffffffff,00e8dd30,00000104) ret=7e96e670
0025:Ret  KERNEL32.MultiByteToWideChar() retval=0000001d ret=7e96e670
0025:fixme:advpack:ExecuteCabW Cab archive not extracted!
...
0025:Call setupapi.SetupOpenInfFileW(001273f0
L"C:\\users\\focht\\Temp\\~dxmcab~\\support.inf",00000000,00000002,00000000)
ret=7e96e1ee
0025:Call KERNEL32.GetFullPathNameW(001273f0
L"C:\\users\\focht\\Temp\\~dxmcab~\\support.inf",00000000,00000000,00000000)
ret=7e7289d9
0025:Ret  KERNEL32.GetFullPathNameW() retval=00000029 ret=7e7289d9
...
0025:Call KERNEL32.GetFullPathNameW(001273f0
L"C:\\users\\focht\\Temp\\~dxmcab~\\support.inf",00000029,0012a9f0,00000000)
ret=7e728a5e
0025:Ret  KERNEL32.GetFullPathNameW() retval=00000028 ret=7e728a5e
0025:Call KERNEL32.CreateFileW(0012a9f0
L"C:\\users\\focht\\Temp\\~dxmcab~\\support.inf",80000000,00000001,00000000,00000003,00000000,00000000)
ret=7e728a9c
0025:Ret  KERNEL32.CreateFileW() retval=ffffffff ret=7e728a9c
...
0025:Ret  setupapi.SetupOpenInfFileW() retval=ffffffff ret=7e96e1ee
0025:Call setupapi.SetupCloseInfFile(ffffffff) ret=7e96e2a0
0025:Ret  setupapi.SetupCloseInfFile() retval=ffffffff ret=7e96e2a0
...
0025:Ret  advpack.ExecuteCab() retval=80070002 ret=00401919
0025:Call KERNEL32.lstrlenA(0040b4e0 "Flags:0000002C, Installed:80070002")
ret=0040260b
0025:Ret  KERNEL32.lstrlenA() retval=00000022 ret=0040260b 
--- snip ---

Wine assumes the INF file already lives outside of the CAB file which is
obviously the problem here.

Source:
http://source.winehq.org/git/wine.git/blob/531f795623659c77380ff4e79c7445731e2976da:/dlls/advpack/install.c#l666

I think advpack.ExecuteCab() should actually _extract_ the INF file from the
CAB before running the INF install part.

'support.inf' really lives within the CAB:

--- snip ---
$ pwd
/home/focht/.wine/drive_c/users/focht/Temp/~dxmcab~

$ ll
total 932
-rw-rw-r--. 1 focht focht  74960 Feb 18 20:42 advpack.dll
-rw-rw-r--. 1 focht focht  67072 Feb 18 20:42 cabinet.dll
-rw-rw-r--. 1 focht focht  23552 Jun 18  1998 cfgmgr32.dll
-rw-rw-r--. 1 focht focht 327072 Jun 18  1998 setupapi.dll
-rw-rw-r--. 1 focht focht 442124 Feb 18 20:42 support.cab
-rw-rw-r--. 1 focht focht   2272 Jul 15  1997 w95inf16.dll
-rw-rw-r--. 1 focht focht   4608 Jul 15  1997 w95inf32.dll

$ cabextract -l support.cab 
Viewing cabinet: support.cab
 File size | Date       Time     | Name
-----------+---------------------+-------------
       803 | 26.08.1998 14:53:10 | support.inf
     18432 | 26.08.1998 14:52:48 | atl.nt
     22288 | 26.08.1998 14:52:48 | comcat.dll
    271632 | 26.08.1998 14:52:48 | msvcrt.dll
    491792 | 26.08.1998 14:52:48 | oleaut32.dll
     32528 | 26.08.1998 14:52:48 | olepro32.dll
     20992 | 26.08.1998 14:52:48 | atl.9x

All done, no errors.
--- snip ---

Content of 'support.inf':

--- snip ---
[version]
Signature="$CHICAGO$"
AdvancedINF=2.5

[SourceDisksNames]
1=%DiskName%,%CabName%,0

[SourceDisksFiles]
olepro32.dll=1
oleaut32.dll=1
atl.9x=1
atl.nt=1
msvcrt.dll=1
support.inf=1

[DestinationDirs]
CopyFile.System.NT=11
CopyFile.System=11

[DefaultInstall.NT]
CopyFiles=CopyFile.System.NT
RegisterOCXs=Register.System
SmartReboot=I

[DefaultInstall]
CopyFiles=CopyFile.System
RegisterOCXs=Register.System
SmartReboot=I

[CopyFile.System.NT]
atl.dll,atl.nt,,35
olepro32.dll,,,35
oleaut32.dll,,,35
msvcrt.dll,,,35

[CopyFile.System]
atl.dll,atl.9x,,35
olepro32.dll,,,35
oleaut32.dll,,,35
msvcrt.dll,,,35

[Register.System]
"%11%\oleaut32.dll"
"%11%\olepro32.dll"
"%11%\atl.dll"

[Strings]
DiskName = "DirectX Media support"
CabName  = "support.cab"
--- snip ---

$ sha1sum DXMEDIA.EXE 
1aae3323d7a68f01e61fa8e148c6ebe8f228eb25  DXMEDIA.EXE

$ du -sh DXMEDIA.EXE 
4.5M    DXMEDIA.EXE

$ wine --version
wine-1.7.12-180-g4afe73f

There is no MS download of this old DXM runtime anymore.

Fortunately I found it bundled with "Matrox Matrox G200 MMS with TV Tuner Video
Tools - Windows NT 4.0 driver v.1.53.054 for Windows NT" driver package
(matching sha1sum).

Download: http://driverscollection.com/?aid=2192 (unzip and you get
'DXMEDIA.EXE')

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