|
Navigation
- Home
- Community
- Development
- myReactOS
- Fundraiser 2012
Doxygen
- Main Page
- Alphabetical List
- Data Structures
- Directories
- File List
- Data Fields
- Globals
- Related Pages
Search
|
|
|
Definition at line 54 of file version.c.
Referenced by PciIsSuiteVersion(), and VerifyVersionInfoW().
{
RTL_OSVERSIONINFOEXW ver;
NTSTATUS status;
ver.dwOSVersionInfoSize = sizeof(ver);
status = RtlGetVersion( (PRTL_OSVERSIONINFOW)&ver );
if (status != STATUS_SUCCESS) return status;
if(!(TypeMask && ConditionMask)) return STATUS_INVALID_PARAMETER;
if(TypeMask & VER_PRODUCT_TYPE)
{
status = version_compare_values(ver.wProductType, VersionInfo->wProductType, ConditionMask >> 7 * VER_NUM_BITS_PER_CONDITION_MASK & VER_CONDITION_MASK);
if (status != STATUS_SUCCESS)
return status;
}
if(TypeMask & VER_SUITENAME)
{
switch(ConditionMask >> 6 * VER_NUM_BITS_PER_CONDITION_MASK & VER_CONDITION_MASK)
{
case VER_AND:
if((VersionInfo->wSuiteMask & ver.wSuiteMask) != VersionInfo->wSuiteMask)
return STATUS_REVISION_MISMATCH;
break;
case VER_OR:
if(!(VersionInfo->wSuiteMask & ver.wSuiteMask) && VersionInfo->wSuiteMask)
return STATUS_REVISION_MISMATCH;
break;
default:
return STATUS_INVALID_PARAMETER;
}
}
if(TypeMask & VER_PLATFORMID)
{
status = version_compare_values(ver.dwPlatformId, VersionInfo->dwPlatformId, ConditionMask >> 3 * VER_NUM_BITS_PER_CONDITION_MASK & VER_CONDITION_MASK);
if (status != STATUS_SUCCESS)
return status;
}
if(TypeMask & VER_BUILDNUMBER)
{
status = version_compare_values(ver.dwBuildNumber, VersionInfo->dwBuildNumber, ConditionMask >> 2 * VER_NUM_BITS_PER_CONDITION_MASK & VER_CONDITION_MASK);
if (status != STATUS_SUCCESS)
return status;
}
if(TypeMask & (VER_MAJORVERSION|VER_MINORVERSION|VER_SERVICEPACKMAJOR|VER_SERVICEPACKMINOR))
{
unsigned char condition = 0;
BOOLEAN do_next_check = TRUE;
if(TypeMask & VER_MAJORVERSION)
condition = ConditionMask >> 1 * VER_NUM_BITS_PER_CONDITION_MASK & VER_CONDITION_MASK;
else if(TypeMask & VER_MINORVERSION)
condition = ConditionMask >> 0 * VER_NUM_BITS_PER_CONDITION_MASK & VER_CONDITION_MASK;
else if(TypeMask & VER_SERVICEPACKMAJOR)
condition = ConditionMask >> 5 * VER_NUM_BITS_PER_CONDITION_MASK & VER_CONDITION_MASK;
else if(TypeMask & VER_SERVICEPACKMINOR)
condition = ConditionMask >> 4 * VER_NUM_BITS_PER_CONDITION_MASK & VER_CONDITION_MASK;
if(TypeMask & VER_MAJORVERSION)
{
status = version_compare_values(ver.dwMajorVersion, VersionInfo->dwMajorVersion, condition);
do_next_check = (ver.dwMajorVersion == VersionInfo->dwMajorVersion) &&
((condition != VER_EQUAL) || (status == STATUS_SUCCESS));
}
if((TypeMask & VER_MINORVERSION) && do_next_check)
{
status = version_compare_values(ver.dwMinorVersion, VersionInfo->dwMinorVersion, condition);
do_next_check = (ver.dwMinorVersion == VersionInfo->dwMinorVersion) &&
((condition != VER_EQUAL) || (status == STATUS_SUCCESS));
}
if((TypeMask & VER_SERVICEPACKMAJOR) && do_next_check)
{
status = version_compare_values(ver.wServicePackMajor, VersionInfo->wServicePackMajor, condition);
do_next_check = (ver.wServicePackMajor == VersionInfo->wServicePackMajor) &&
((condition != VER_EQUAL) || (status == STATUS_SUCCESS));
}
if((TypeMask & VER_SERVICEPACKMINOR) && do_next_check)
{
status = version_compare_values(ver.wServicePackMinor, VersionInfo->wServicePackMinor, condition);
}
if (status != STATUS_SUCCESS)
return status;
}
return STATUS_SUCCESS;
}
|
Generated on Sat May 26 2012 04:47:23 for ReactOS by
1.7.6.1
|