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.