[Bug 36143] New: 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)

wine-bugs at winehq.org wine-bugs at winehq.org
Mon Apr 28 07:45:42 CDT 2014


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 at winehq.org
          Reporter: focht at 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&entsrc=N360_2013&f=5.1.2600.3.0.0&i=0&l=0&language=09.01&licType=OEM&o=2&product=Norton%20360&q=21294664&t=0&u=00000000&upgrade=0&v=9.1.0.26&version=21.1.0.18&w=2&x=0&y=0&z=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/kb20090814170416EN_EndUserProfile_en_us?a=&b=&build=Symantec&ced=true&e=&entsrc=CED_pubweb&error=2&module=9999&seg=hho&src=_mi

--- 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/0463d01f151fb3d7c7acf26c7628683fefb6c130:/dlls/ntdll/version.c#l679

--- 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

-- 
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