SdbpCheckMatchingFiles

NTSTATUS __stdcall SdbpCheckMatchingFiles(
        INT64 *bMatchedOut,
        VOID *hSDB,
        _DB *pdb,
        UINT64 tiParent,
        UINT64 tiMatch,
        VOID *Context,
        VOID *MatcherContext){
  VOID *v7; 
  NTSTATUS v8; 
  VOID *v11; 
  unsigned int FirstTag; 
  WCHAR *StringTagPtr; 
  __int64 v14; 
  tagSEARCHDBCONTEXT v15; 
  int *v16; 
  int v17; 
  VOID *v18; 
  unsigned __int64 v19; 
  __int64 v20; 
  VOID *v21; 
  unsigned int v23; 
  int v24; 
  INT8 *v25; 
  UINT64 v26; 
  VOID *v27; 
  UINT64 bMatchedOuta; 
  WCHAR *FullPath; 
  __int64 v30; 
  int *v31; 

  v7 = Context;
  v8 = 0;
  LODWORD(bMatchedOuta) = 0;
  FullPath = 0i64;
  v11 = 0i64;
  if( *((_QWORD *)Context + 11) )
  {
    LODWORD(bMatchedOuta) = 1;
    goto LABEL_18;
  }
  FirstTag = SdbFindFirstTag(pdb, (unsigned int)tiMatch, 0x6001u);
  if( FirstTag )
  {
    StringTagPtr = SdbGetStringTagPtr(pdb, FirstTag);
    if( StringTagPtr )
    {
      if( *((_QWORD *)v7 + 1) && *StringTagPtr == 42 )
      {
        v23 = SdbpCheckAllAttributes(
                &bMatchedOuta,
                (tagSDBCONTEXT *)hSDB,
                pdb,
                (unsigned int)tiMatch,
                *((_QWORD *)v7 + 1));
        if( AslFileNotFound(v23) || v24 >= 0 )
          v8 = 1;
        else
          AslLogCallPrintf(
            1ui64,
            (INT8 *)"SdbpCheckMatchingFiles",
            0x99Dui64,
            (INT8 *)"Failed to check file attributes [%x]");
        goto LABEL_19;
      }
      v14 = -1i64;
      do
        ++v14;
      while( StringTagPtr[v14] );
      v15 = *(_DWORD *)v7;
      v30 = v14;
      if( (v15 & 1) != 0 )
        goto LABEL_10;
      if( SdbpInitializeSearchDBContext((tagSEARCHDBCONTEXT *)v7) )
      {
        LODWORD(v14) = v30;
LABEL_10:
        v16 = (int *)*((_QWORD *)v7 + 9);
        v17 = 0;
        v31 = v16;
        if( *v16 <= 0 )
          goto LABEL_15;
        while( 1 )
        {
          if( !SdbpResolveMatchingFile(
                  hSDB,
                  (tagSEARCHDBCONTEXT *)v7,
                  StringTagPtr,
                  (unsigned int)v14,
                  &v16[12 * v17 + 2],
                  &FullPath) )
          {
            AslLogCallPrintf(
              1ui64,
              (INT8 *)"SdbpCheckMatchingFiles",
              0x9CFui64,
              (INT8 *)"Failed to resolve matching file");
            goto LABEL_19;
          }
          Context = 0i64;
          if( AslFileMappingCreate((WCHAR ***)&Context, FullPath, 0i64, 0i64, 0i64) >= 0 )
          {
            v11 = Context;
            if( SdbpCheckAllAttributes(
                   &bMatchedOuta,
                   (tagSDBCONTEXT *)hSDB,
                   pdb,
                   (unsigned int)tiMatch,
                   (UINT64)Context) >= 0 )
            {
              if( v17 > 0 )
                *((_DWORD *)v7 + 20) = 1;
LABEL_15:
              v19 = *StringTagPtr;
              LOWORD(v19) = v19 - 37;
              if( (unsigned __int16)v19 <= 0x37u )
              {
                v20 = 0x80000000000201i64;
                if( _bittest64(&v20, v19) )
                  *((_DWORD *)v7 + 20) = 1;
              }
LABEL_18:
              v8 = 1;
              goto LABEL_19;
            }
            AslFileMappingDelete((UINT64)v11);
            v11 = 0i64;
            AslFree(v27);
          }
          else
          {
            AslFree(v18);
            v11 = Context;
          }
          v16 = v31;
          ++v17;
          LODWORD(v14) = v30;
          FullPath = 0i64;
          if( v17 >= *v31 )
            goto LABEL_15;
        }
      }
      v25 = (INT8 *)"Failed to initialize SEARCHDBCONTEXT";
      v26 = 2487i64;
    }
    else
    {
      v25 = (INT8 *)"Failed to get the string from the database";
      v26 = 2436i64;
    }
    AslLogCallPrintf(1ui64, (INT8 *)"SdbpCheckMatchingFiles", v26, v25);
  }
LABEL_19:
  AslFileMappingDelete((UINT64)v11);
  AslFree(v21);
  *(_DWORD *)bMatchedOut = bMatchedOuta;
  return v8;
}

Referenced by:

No references.