RtlVerifyVersionInfo
NTSTATUS __stdcall RtlVerifyVersionInfo(PRTL_OSVERSIONINFOEXW VersionInfo, ULONG TypeMask, ULONGLONG ConditionMask){
char v4;
char v6;
NTSTATUS result;
unsigned __int8 v8;
int v9;
unsigned int v10;
int wSuiteMask;
int v12;
int v13;
int v14;
bool v15;
int v16;
int v17;
int v18;
unsigned __int8 Equal[16];
struct _OSVERSIONINFOW VersionInformation;
unsigned __int16 v21;
unsigned __int16 v22;
unsigned __int16 v23;
unsigned __int8 v24;
v4 = TypeMask;
v6 = 0;
if( !TypeMask )
return -1073741811;
memset((INT64)&VersionInformation.dwMajorVersion, 0i64);
VersionInformation.dwOSVersionInfoSize = 284;
result = RtlGetVersion(&VersionInformation);
if( !result )
{
if( (v4 & 0x40) != 0 && VersionInfo->wSuiteMask )
{
v10 = 0;
wSuiteMask = VersionInfo->wSuiteMask;
do
{
v12 = 1 << v10;
if( (wSuiteMask & (1 << v10)) != 0 )
{
if( (ConditionMask & 0x8000000000000000ui64) == 0i64 )
v13 = 0;
else
v13 = RtlpVerGetConditionMask(ConditionMask, 0x40ui64);
v14 = v13 - 6;
if( v14 )
{
if( v14 != 1 )
return -1073741811;
if( (v23 & (unsigned __int16)v12) != 0 )
v6 = 1;
}
else if( (v23 & (unsigned __int16)v12) == 0 )
{
return -1073741735;
}
}
++v10;
}
while( v10 < 0x10 );
if( (unsigned int)RtlpVerGetConditionMask(ConditionMask, 0x40ui64) == 7 && !v6 )
return -1073741735;
}
v8 = 1;
Equal[0] = 1;
v9 = 1;
if( (v4 & 2) != 0 )
{
if( (ConditionMask & 0x8000000000000000ui64) == 0i64 )
v9 = (unsigned __int8)(ConditionMask >> 4);
else
v9 = RtlpVerGetConditionMask(ConditionMask, 2ui64);
v15 = !RtlpVerCompare(v9, VersionInfo->dwMajorVersion, VersionInformation.dwMajorVersion, Equal, 0);
v8 = Equal[0];
if( v15 )
{
if( !Equal[0] )
return -1073741735;
}
else if( !Equal[0] )
{
goto LABEL_10;
}
}
if( (v4 & 1) == 0 )
goto LABEL_6;
if( v9 == 1 )
{
if( (ConditionMask & 0x8000000000000000ui64) != 0i64 )
v9 = RtlpVerGetConditionMask(ConditionMask, 1ui64);
else
v9 = (unsigned __int8)(ConditionMask >> 2);
}
v15 = !RtlpVerCompare(v9, VersionInfo->dwMinorVersion, VersionInformation.dwMinorVersion, Equal, 1);
v8 = Equal[0];
if( v15 )
{
if( !Equal[0] )
return -1073741735;
}
else
{
LABEL_6:
if( !v8 )
goto LABEL_10;
}
if( (v4 & 0x20) != 0 )
{
if( v9 == 1 )
{
if( (ConditionMask & 0x8000000000000000ui64) != 0i64 )
v9 = RtlpVerGetConditionMask(ConditionMask, 0x20ui64);
else
v9 = 0;
}
if( !RtlpVerCompare(v9, VersionInfo->wServicePackMajor, v21, Equal, 0) )
{
if( !Equal[0] )
return -1073741735;
goto LABEL_9;
}
v8 = Equal[0];
}
if( v8 )
{
LABEL_9:
if( (v4 & 0x10) != 0 )
{
if( v9 == 1 )
{
if( (ConditionMask & 0x8000000000000000ui64) != 0i64 )
v9 = RtlpVerGetConditionMask(ConditionMask, 0x10ui64);
else
v9 = 0;
}
if( !RtlpVerCompare(v9, VersionInfo->wServicePackMinor, v22, Equal, 1) )
return -1073741735;
}
}
LABEL_10:
if( (v4 & 4) != 0 )
{
v17 = (ConditionMask & 0x8000000000000000ui64) == 0i64 ? BYTE2(ConditionMask) : RtlpVerGetConditionMask(
ConditionMask,
4ui64);
if( !RtlpVerCompare(v17, VersionInfo->dwBuildNumber, VersionInformation.dwBuildNumber, Equal, 0) )
return -1073741735;
}
if( (v4 & 8) != 0 )
{
v18 = (ConditionMask & 0x8000000000000000ui64) != 0i64 ? RtlpVerGetConditionMask(ConditionMask, 8ui64) : 0;
if( !RtlpVerCompare(v18, VersionInfo->dwPlatformId, VersionInformation.dwPlatformId, Equal, 0) )
return -1073741735;
}
if( v4 < 0 )
{
v16 = (ConditionMask & 0x8000000000000000ui64) == 0i64 ? 0 : RtlpVerGetConditionMask(ConditionMask, 0x80ui64);
if( !RtlpVerCompare(v16, VersionInfo->wProductType, v24, Equal, 0) )
return -1073741735;
}
return 0;
}
return result;
}Referenced by:
AslpFileGetVersionBlock
WdipSemLoadScenarioTable