SdbpCheckPackageAttributes
NTSTATUS __stdcall SdbpCheckPackageAttributes(
INT64 *bMatchedOut,
VOID *hSDB,
_DB *pdb,
UINT64 tiParent,
UINT64 tiPackage,
VOID *Context,
VOID *MatcherContext){
NTSTATUS v7;
int v10;
unsigned __int64 v11;
unsigned __int64 *v12;
unsigned int FirstTag;
unsigned __int64 v14;
unsigned __int64 v15;
unsigned __int64 v16;
unsigned __int64 v17;
unsigned __int64 v18;
unsigned __int16 v19;
wchar_t *StringTagPtr;
__int64 v21;
__int64 QWORDTag;
__int64 v23;
__int64 v24;
int DWORDTag;
v7 = 0;
v10 = 1;
v11 = 0i64;
v12 = (unsigned __int64 *)*((_QWORD *)Context + 11);
*(_DWORD *)bMatchedOut = 0;
while( 1 )
{
FirstTag = SdbFindFirstTag(*((_DB **)hSDB + 1), (unsigned int)tiPackage, *(_WORD *)((char *)&unk_140C12DF0 + v11));
if( FirstTag )
break;
LABEL_33:
v11 += 4i64;
if( v11 >= 0x28 )
{
*(_DWORD *)bMatchedOut = v10;
return 1;
}
}
v14 = v12[2];
v15 = 0i64;
if( v14 )
{
do
{
v16 = 0i64;
if( v15 < v14 )
{
v17 = v12[1] * v15;
if( !is_mul_ok(v12[1], v15) || (v18 = v12[5], v16 = v18 + v17, v18 + v17 < v18) )
v16 = 0i64;
}
if( *(_WORD *)v16 == *(_WORD *)((char *)&unk_140C12DF0 + v11 + 2) )
break;
++v15;
v16 = 0i64;
}
while( v15 < v14 );
if( v16 )
{
v19 = *(_WORD *)((char *)&unk_140C12DF0 + v11);
if( v19 == 16453 )
{
DWORDTag = SdbReadDWORDTag(*((_DB **)hSDB + 1), FirstTag, 0xFFFFFFFF);
if( DWORDTag == -1 )
return v7;
v21 = DWORDTag == *(_DWORD *)(v16 + 8);
goto LABEL_30;
}
if( v19 != 20500 )
{
if( v19 == 20501 )
goto LABEL_24;
if( v19 == 20502 )
{
LABEL_22:
QWORDTag = SdbReadQWORDTag(*((_DB **)hSDB + 1), FirstTag, -1i64);
if( QWORDTag == -1 )
return v7;
LODWORD(v21) = SdbpCheckUptoVersion(QWORDTag, *(_QWORD *)(v16 + 8));
LABEL_30:
if( !v10 || (v10 = 1, !(_DWORD)v21) )
v10 = 0;
goto LABEL_33;
}
if( v19 != 20503 )
{
if( v19 != 20504 )
{
if( v19 != 20505 )
{
if( v19 <= 0x6028u )
return v7;
if( v19 > 0x602Bu )
return v7;
StringTagPtr = SdbGetStringTagPtr(*((VOID **)hSDB + 1), FirstTag);
if( !StringTagPtr )
return v7;
LODWORD(v21) = AslStringPatternMatchW(StringTagPtr, *(PWCHAR *)(v16 + 8));
goto LABEL_30;
}
goto LABEL_22;
}
LABEL_24:
v23 = SdbReadQWORDTag(*((_DB **)hSDB + 1), FirstTag, -1i64);
if( v23 == -1 )
return v7;
LODWORD(v21) = SdbpCheckFromVersion(v23, *(_QWORD *)(v16 + 8));
goto LABEL_30;
}
}
v24 = SdbReadQWORDTag(*((_DB **)hSDB + 1), FirstTag, -1i64);
if( v24 == -1 )
return v7;
LODWORD(v21) = SdbpCheckVersion(v24, *(_QWORD *)(v16 + 8));
goto LABEL_30;
}
}
AslLogCallPrintf(
1ui64,
(INT8 *)"SdbpCheckPackageAttributes",
0xF88ui64,
(INT8 *)"Failed to find Attribute to use for sdb tag");
return v7;
}Referenced by:
No references.