http://bugs.winehq.org/show_bug.cgi?id=33000
Bug #: 33000 Summary: Sim Theme Park fails to install/copy SafeDisc v1.x driver to system32\drivers Product: Wine Version: 1.5.24 Platform: x86 OS/Version: Linux Status: NEW Severity: normal Priority: P2 Component: -unknown AssignedTo: wine-bugs@winehq.org ReportedBy: focht@gmx.net Classification: Unclassified
Hello folks,
a guy on IRC #winehq asked for help to get "Sim Theme Park" to work. The game is copy-protected and the installer seems somehow fail to installer the SafeDisc 1.x driver properly in system32/drivers folder.
Manually copying the driver after installation lets the game recognize the original disc (for that SafeDisc 1.x has to be run in Win2K mode, see bug 12653) -> workaround.
The installer is Installshield based (year 2000).
+tid,+seh,+relay gives:
--- snip --- 0024:Call KERNEL32.CreateProcessW(00000000,0032e398 L"E:\USEnglish\Setup\SETUP.EXE",00000000,00000000,00000000,00000400,00000000,001a7690 L"E:\USEnglish\Setup\",0032da40,0032da30) ret=7e51f1c3 0026:trace:relay:load_list L"RelayExclude" = L"ntdll.RtlEnterCriticalSection;ntdll.RtlLeaveCriticalSection;kernel32.48;kernel32.49;kernel32.94;kernel32.95;kernel32.96;kernel32.97;kernel32.98;kernel32.TlsGetValue;kernel32.TlsSetValue;kernel32.FlsGetValue;kernel32.FlsSetValue;kernel32.SetLastError" 0026:trace:relay:load_list L"RelayFromExclude" = L"winex11.drv;user32;gdi32;advapi32;kernel32" 0026:Call KERNEL32.__wine_kernel_init() ret=7bc54420 0024:Ret KERNEL32.CreateProcessW() retval=00000001 ret=7e51f1c3 ... 0028:Call KERNEL32.CreateProcessA(00000000,0015a7d0 "C:\users\focht\Temp\_INS5176._MP",00000000,00000000,00000000,00000000,00000000,00000000,0081e024,0081e068) ret=f6edb8d0 002a:trace:relay:load_list L"RelayExclude" = L"ntdll.RtlEnterCriticalSection;ntdll.RtlLeaveCriticalSection;kernel32.48;kernel32.49;kernel32.94;kernel32.95;kernel32.96;kernel32.97;kernel32.98;kernel32.TlsGetValue;kernel32.TlsSetValue;kernel32.FlsGetValue;kernel32.FlsSetValue;kernel32.SetLastError" 002a:trace:relay:load_list L"RelayFromExclude" = L"winex11.drv;user32;gdi32;advapi32;kernel32" 002a:Call KERNEL32.__wine_kernel_init() ret=7bc54420 0028:Ret KERNEL32.CreateProcessA() retval=00000001 ret=f6edb8d0 ...
002a:Call KERNEL32.lstrcmpA(0033f098 "SdSelectFolder",0153f897 "SdSelectFolder") ret=0040fbc8 002a:Ret KERNEL32.lstrcmpA() retval=00000000 ret=0040fbc8 ... 002a:Call KERNEL32.lstrcmpiA(0033f498 "Edit",00480738 "Static") ret=0040e9cb 002a:Ret KERNEL32.lstrcmpiA() retval=ffffffff ret=0040e9cb 002a:Call user32.SetWindowTextA(000200fc,0033f8a8 "SimTheme Park") ret=0040e9ff ... 002a:Call KERNEL32.lstrcpyA(0033fb74,001bf1ca "C:\Program Files\SimTheme Park") ret=00439e6d 002a:Ret KERNEL32.lstrcpyA() retval=0033fb74 ret=00439e6d ... 002a:Call KERNEL32.LoadLibraryA(0033f254 "C:\Program Files\SimTheme Park\drvmgt.dll") ret=0041f8d6 002a:Call PE DLL (proc=0x19023b0,module=0x1900000 L"drvmgt.dll",reason=PROCESS_ATTACH,res=(nil)) ... 002a:Call KERNEL32.GetProcAddress(01900000,001788be "Setup") ret=00455b5f 002a:Ret KERNEL32.GetProcAddress() retval=019013d0 ret=00455b5f ... 002a:Call KERNEL32.CreateFileA(0033f690 "\\.\Secdrv",c0000000,00000003,00000000,00000003,00000080,00000000) ret=0190107b 002a:Ret KERNEL32.CreateFileA() retval=ffffffff ret=0190107b ... 002a:Call advapi32.CreateServiceA(0156fae8,01906038 "Secdrv",01906038 "Secdrv",000f01ff,00000001,00000003,00000001,0033f688 "C:\windows\system32\drivers\\SECDRV.SYS",00000000,00000000,00000000,00000000,00000000) ret=01901b35 ... 002a:Ret advapi32.CreateServiceA() retval=0156fd30 ret=01901b35 ... 002a:fixme:service:SetServiceObjectSecurity 0x156fd30 4 0x33f274 002a:Ret advapi32.SetServiceObjectSecurity() retval=00000001 ret=01901a5f 002a:Call KERNEL32.GetSystemDirectoryA(0033f370,00000100) ret=019017b8 002a:Ret KERNEL32.GetSystemDirectoryA() retval=00000013 ret=019017b8 002a:Call KERNEL32.lstrlenA(0033f370 "C:\windows\system32") ret=019017cf 002a:Ret KERNEL32.lstrlenA() retval=00000013 ret=019017cf 002a:Call KERNEL32.lstrlenA(0033f370 "C:\windows\system32\drivers\") ret=019017f0 002a:Ret KERNEL32.lstrlenA() retval=0000001c ret=019017f0 002a:Call KERNEL32.GetFileAttributesA(0033f370 "C:\windows\system32\drivers\\SECDRV.SYS") ret=01901fdc 002a:Ret KERNEL32.GetFileAttributesA() retval=ffffffff ret=01901fdc ... 002a:Call KERNEL32.CopyFileA(0033f570 "C:\Program Files\SECDRV.SYS",0033f370 "C:\windows\system32\drivers\\SECDRV.SYS",00000000) ret=0190187b 002a:Ret KERNEL32.CopyFileA() retval=00000000 ret=0190187b 002a:Call KERNEL32.GetLastError() ret=01901885 002a:Ret KERNEL32.GetLastError() retval=00000002 ret=01901885 ... --- snip ---
It looks like the path passed to drvmgt.dll "Setup" API function (first argument) needs to have a backslash appended. Somewhere in installshield script this path is constructed, most likely at the point of "SdSelectFolder" (Installshield folder selection). To properly analyze this, the installshield script needs to be decrypted/decompiled... low priority.
Regards