SdbpMatchList

NTSTATUS __stdcall SdbpMatchList(
        INT64 *bMatchedOut,
        VOID *hSDB,
        _DB *pdb,
        UINT64 tiList,
        VOID *pContext,
        INT64 bMatchOne,
        INT64 bCheckRoot){
  unsigned int v9; 
  unsigned int FirstChild; 
  __int64(__fastcall *v12)(INT64 *, VOID *, _DB *, _QWORD, unsigned int, VOID *, VOID *); 
  int v13; 
  NTSTATUS result; 
  VOID *ppMatcherContext; 

  ppMatcherContext = 0i64;
  LODWORD(bCheckRoot) = 1;
  v9 = tiList;
  FirstChild = SdbGetFirstChild(pdb, (unsigned int)tiList);
  if( FirstChild )
  {
    while( 1 )
    {
      LODWORD(v12) = SdbpFindMatcher(&ppMatcherContext, hSDB, pdb, FirstChild);
      if( v12 )
      {
        result = v12(&bCheckRoot, hSDB, pdb, v9, FirstChild, pContext, ppMatcherContext);
        if( !result )
          return result;
        if( (unsigned int)SdbFindFirstTag(pdb, FirstChild, 0x1003u) )
        {
          v13 = bCheckRoot == 0;
          LODWORD(bCheckRoot) = v13;
        }
        else
        {
          v13 = bCheckRoot;
        }
        if( v13 == (_DWORD)bMatchOne )
          break;
      }
      FirstChild = SdbGetNextChild(pdb, v9, FirstChild);
      if( !FirstChild )
        goto LABEL_4;
    }
  }
  else
  {
LABEL_4:
    v13 = bCheckRoot;
  }
  *(_DWORD *)bMatchedOut = v13;
  return 1;
}

Referenced by:

SdbpCheckForMatch
SdbpMatchOne