https://bugs.winehq.org/show_bug.cgi?id=36143
Bug ID: 36143 Summary: Symantec Norton 360 installer reports 'This product is not compatible with this computer's current operating system' (RtlVerifyVersionInfo doesn't handle major/minor/service pack condition mask properly) Product: Wine Version: 1.7.17 Hardware: x86 OS: Linux Status: NEW Severity: normal Priority: P2 Component: ntdll Assignee: wine-bugs@winehq.org Reporter: focht@gmx.net
Hello folks
continuation of bug 36142 - it still fails.
Log file:
--- snip --- 2014-04-28-12-43-53-422 : 0x003A : Information : LaunchConditions_Server set to true from manifest 2014-04-28-12-43-53-424 : 0x003A : Error : unsupported OS 2014-04-28-12-43-53-425 : 0x003A : Error : CEngineManager::CheckLaunchConditions(7777) : failed LaunchCondition: CheckforMinOS 2014-04-28-12-43-53-427 : 0x003A : Information : Unable to delete DING\ReturnCode/LCReturnCode 2014-04-28-12-43-53-436 : 0x003A : Information : URL: http://errors.norton.com?module=9999&error=2&build=Symantec&d=0&... 2014-04-28-12-43-53-440 : 0x003A : Information : RunOnce: removed "N360" --- snip ---
URL: https://support.norton.com/sp/en/us/home/current/solutions/kb20090814170416E...
--- quote --- The Norton product that you want to install is compatible only with the following operating systems:
Windows XP Home Service Pack 2 and later (32-bit only)
Windows XP Professional Service Pack 2 and later (32-bit only)
Windows XP Media Center Edition 2005 Service Pack 2 and later (32-bit only)
Windows Vista 32-bit and 64-bit Starter/Home Basic/Home Premium/Business/Ultimate
The current versions of Norton AntiVirus, Norton Internet Security, Norton 360, and Norton Anti-Theft require Service Pack 1 or later for Windows Vista.)
Windows 7 32-bit and 64-bit Starter/Home Basic/Home Premium/Professional/Ultimate
Windows 8 and Windows 8 Pro (32-bit and 64-bit)
If you have Windows 7, Vista, or XP, you can get the latest Service Pack by running Windows Update. --- quote ---
This is with default WINEPREFIX (WinVer == 'Windows XP SP3').
Relevant part of trace log:
--- snip --- $ WINEDEBUG=+tid,+seh,+relay,+ver wine ./N360-TW-21.1.0-EN-US.exe >>log.txt 2>&1 ... 0038:Call ntdll.VerSetConditionMask(00000000,00000000,00000002,00000001) ret=6ac30caf 0038:Ret ntdll.VerSetConditionMask() retval=0000000000000008 ret=6ac30caf 0038:Call ntdll.VerSetConditionMask(00000008,00000000,00000001,00000001) ret=6ac30cb5 0038:Ret ntdll.VerSetConditionMask() retval=0000000000000009 ret=6ac30cb5 0038:Call ntdll.VerSetConditionMask(00000009,00000000,00000020,00000003) ret=6ac30cbd 0038:Ret ntdll.VerSetConditionMask() retval=0000000000018009 ret=6ac30cbd 0038:Call ntdll.VerSetConditionMask(00018009,00000000,00000010,00000003) ret=6ac30cc5 0038:Ret ntdll.VerSetConditionMask() retval=000000000001b009 ret=6ac30cc5 0038:Call ntdll.VerSetConditionMask(0001b009,00000000,00000080,00000001) ret=6ac30ccf 0038:Ret ntdll.VerSetConditionMask() retval=000000000021b009 ret=6ac30ccf 0038:Call KERNEL32.VerifyVersionInfoW(00bbe1d4,000000b3,0021b009,00000000) ret=6ac30cf1 0038:trace:ver:RtlVerifyVersionInfo (0xbbe1d4,0xb3,0x21b009) 0038:Ret KERNEL32.VerifyVersionInfoW() retval=00000000 ret=6ac30cf1 0038:Call KERNEL32.VerifyVersionInfoW(00bbe1d4,000000b3,0021b009,00000000) ret=6ac30d1d 0038:trace:ver:RtlVerifyVersionInfo (0xbbe1d4,0xb3,0x21b009) 0038:Ret KERNEL32.VerifyVersionInfoW() retval=00000000 ret=6ac30d1d 0038:Call msvcr100.memset(00bbe1d4,00000000,0000011c) ret=6ac30f42 0038:Ret msvcr100.memset() retval=00bbe1d4 ret=6ac30f42 0038:Call ntdll.VerSetConditionMask(00000000,00000000,00000002,00000001) ret=6ac30f7a 0038:Ret ntdll.VerSetConditionMask() retval=0000000000000008 ret=6ac30f7a 0038:Call ntdll.VerSetConditionMask(00000008,00000000,00000001,00000001) ret=6ac30f80 0038:Ret ntdll.VerSetConditionMask() retval=0000000000000009 ret=6ac30f80 0038:Call ntdll.VerSetConditionMask(00000009,00000000,00000020,00000001) ret=6ac30f87 0038:Ret ntdll.VerSetConditionMask() retval=0000000000008009 ret=6ac30f87 0038:Call ntdll.VerSetConditionMask(00008009,00000000,00000010,00000003) ret=6ac30f8f 0038:Ret ntdll.VerSetConditionMask() retval=000000000000b009 ret=6ac30f8f 0038:Call ntdll.VerSetConditionMask(0000b009,00000000,00000080,00000001) ret=6ac30f99 0038:Ret ntdll.VerSetConditionMask() retval=000000000020b009 ret=6ac30f99 0038:Call KERNEL32.VerifyVersionInfoW(00bbe1d4,000000b3,0020b009,00000000) ret=6ac30faf 0038:trace:ver:RtlVerifyVersionInfo (0xbbe1d4,0xb3,0x20b009) 0038:Ret KERNEL32.VerifyVersionInfoW() retval=00000000 ret=6ac30faf 0038:Call ntdll.VerSetConditionMask(00000000,00000000,00000002,00000003) ret=6ac30fcb 0038:Ret ntdll.VerSetConditionMask() retval=0000000000000018 ret=6ac30fcb 0038:Call ntdll.VerSetConditionMask(00000018,00000000,00000001,00000003) ret=6ac30fd2 0038:Ret ntdll.VerSetConditionMask() retval=000000000000001b ret=6ac30fd2 0038:Call ntdll.VerSetConditionMask(0000001b,00000000,00000020,00000003) ret=6ac30fda 0038:Ret ntdll.VerSetConditionMask() retval=000000000001801b ret=6ac30fda 0038:Call ntdll.VerSetConditionMask(0001801b,00000000,00000010,00000003) ret=6ac30fe2 0038:Ret ntdll.VerSetConditionMask() retval=000000000001b01b ret=6ac30fe2 0038:Call KERNEL32.VerifyVersionInfoW(00bbe1d4,00000033,0001b01b,00000000) ret=6ac30fef 0038:trace:ver:RtlVerifyVersionInfo (0xbbe1d4,0x33,0x1b01b) 0038:Ret KERNEL32.VerifyVersionInfoW() retval=00000000 ret=6ac30fef ... 0038:Call msvcr100.vswprintf_s(09211686,00000054,6c2772f0 L"CEngineManager::CheckLaunchConditions(7777) : failed LaunchCondition: CheckforMinOS",00bbe468) ret=6abd42e3 0038:Ret msvcr100.vswprintf_s() retval=00000053 ret=6abd42e3 --- snip ---
The problem is not really visible, one has to debug it out.
Source: http://source.winehq.org/git/wine.git/blob/0463d01f151fb3d7c7acf26c7628683fe...
--- snip --- 679 NTSTATUS WINAPI RtlVerifyVersionInfo( const RTL_OSVERSIONINFOEXW *info, 680 DWORD dwTypeMask, DWORDLONG dwlConditionMask ) 681 { 682 RTL_OSVERSIONINFOEXW ver; 683 NTSTATUS status; ... 725 if(dwTypeMask & (VER_MAJORVERSION|VER_MINORVERSION|VER_SERVICEPACKMAJOR|VER_SERVICEPACKMINOR)) 726 { 727 unsigned char condition = 0; 728 BOOLEAN do_next_check = TRUE; 729 730 if(dwTypeMask & VER_MAJORVERSION) 731 condition = dwlConditionMask >> 1*3 & 0x07; 732 else if(dwTypeMask & VER_MINORVERSION) 733 condition = dwlConditionMask >> 0*3 & 0x07; 734 else if(dwTypeMask & VER_SERVICEPACKMAJOR) 735 condition = dwlConditionMask >> 5*3 & 0x07; 736 else if(dwTypeMask & VER_SERVICEPACKMINOR) 737 condition = dwlConditionMask >> 4*3 & 0x07; 738 739 if(dwTypeMask & VER_MAJORVERSION) 740 { 741 status = version_compare_values(ver.dwMajorVersion, info->dwMajorVersion, condition); 742 do_next_check = (ver.dwMajorVersion == info->dwMajorVersion) && 743 ((condition != VER_EQUAL) || (status == STATUS_SUCCESS)); 744 } 745 if((dwTypeMask & VER_MINORVERSION) && do_next_check) 746 { 747 status = version_compare_values(ver.dwMinorVersion, info->dwMinorVersion, condition); 748 do_next_check = (ver.dwMinorVersion == info->dwMinorVersion) && 749 ((condition != VER_EQUAL) || (status == STATUS_SUCCESS)); 750 } ... --- snip ---
Multiple version info members can be verified at once (represented by type mask and condition pair). The code to extract the conditions is wrong (if-elseif-elseif.. single cond var) It captures only the condition for the first member present (type mask) and subsequently uses this value for other members which might have different conditions.
$ sha1sum N360-TW-21.1.0-EN-US.exe aa05ccf9668e166ef28923d451f1c2ecad6f75f1 N360-TW-21.1.0-EN-US.exe
$ du -sh N360-TW-21.1.0-EN-US.exe 202M N360-TW-21.1.0-EN-US.exe
$ wine --version wine-1.7.17-92-ge2bf516
Regards