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.