SdbpCheckPackageAttributes
__int64 __fastcall SdbpCheckPackageAttributes(int *a1, __int64 a2, __int64 a3, __int64 a4, unsigned int a5, __int64 a6){
unsigned int v6;
int v9;
unsigned __int64 v10;
unsigned __int64 *v11;
unsigned int FirstTag;
unsigned __int64 v13;
unsigned __int64 v14;
unsigned __int64 v15;
unsigned __int64 v16;
unsigned __int64 v17;
unsigned __int16 v18;
WCHAR *StringTagPtr;
int v20;
INT64 QWORDTag;
INT64 v22;
INT64 v23;
int DWORDTag;
v6 = 0;
v9 = 1;
v10 = 0i64;
v11 = *(unsigned __int64 **)(a6 + 88);
*a1 = 0;
while( 1 )
{
FirstTag = SdbFindFirstTag(*(_QWORD *)(a2 + 8), a5, *(_WORD *)((char *)qword_140C12DF0 + v10));
if( FirstTag )
break;
LABEL_33:
v10 += 4i64;
if( v10 >= 0x28 )
{
*a1 = v9;
return 1;
}
}
v13 = v11[2];
v14 = 0i64;
if( v13 )
{
do
{
v15 = 0i64;
if( v14 < v13 )
{
v16 = v11[1] * v14;
if( !is_mul_ok(v11[1], v14) || (v17 = v11[5], v15 = v17 + v16, v17 + v16 < v17) )
v15 = 0i64;
}
if( *(_WORD *)v15 == *(_WORD *)((char *)qword_140C12DF0 + v10 + 2) )
break;
++v14;
v15 = 0i64;
}
while( v14 < v13 );
if( v15 )
{
v18 = *(_WORD *)((char *)qword_140C12DF0 + v10);
if( v18 == 16453 )
{
DWORDTag = SdbReadDWORDTag(*(_QWORD *)(a2 + 8), FirstTag, 0xFFFFFFFFui64);
if( DWORDTag == -1 )
return v6;
v20 = DWORDTag == *(_DWORD *)(v15 + 8);
goto LABEL_30;
}
if( v18 != 20500 )
{
if( v18 == 20501 )
goto LABEL_24;
if( v18 == 20502 )
{
LABEL_22:
QWORDTag = SdbReadQWORDTag(*(_QWORD *)(a2 + 8), FirstTag, -1i64);
if( QWORDTag == -1 )
return v6;
v20 = SdbpCheckUptoVersion(QWORDTag, *(_QWORD *)(v15 + 8));
LABEL_30:
if( !v9 || (v9 = 1, !v20) )
v9 = 0;
goto LABEL_33;
}
if( v18 != 20503 )
{
if( v18 != 20504 )
{
if( v18 != 20505 )
{
if( v18 <= 0x6028u )
return v6;
if( v18 > 0x602Bu )
return v6;
StringTagPtr = (WCHAR *)SdbGetStringTagPtr(*(RTL_RUN_ONCE **)(a2 + 8), FirstTag);
if( !StringTagPtr )
return v6;
v20 = AslStringPatternMatchW(StringTagPtr, *(PWCHAR *)(v15 + 8));
goto LABEL_30;
}
goto LABEL_22;
}
LABEL_24:
v22 = SdbReadQWORDTag(*(_QWORD *)(a2 + 8), FirstTag, -1i64);
if( v22 == -1 )
return v6;
v20 = SdbpCheckFromVersion(v22, *(_QWORD *)(v15 + 8));
goto LABEL_30;
}
}
v23 = SdbReadQWORDTag(*(_QWORD *)(a2 + 8), FirstTag, -1i64);
if( v23 == -1 )
return v6;
v20 = SdbpCheckVersion(v23, *(_QWORD *)(v15 + 8));
goto LABEL_30;
}
}
AslLogCallPrintf(1ui64, "SdbpCheckPackageAttributes", 0xF88ui64, "Failed to find Attribute to use for sdb tag");
return v6;
}Referenced by:
No references.