SdbpFindNextIndexedWildCardTag

UINT64 __stdcall SdbpFindNextIndexedWildCardTag(_DB *pdb, _FIND_INFO *pFindInfo){
  const WCHAR *v4; 
  UINT64 v5; 
  _DWORD *Index; 
  __int64 v7; 
  UINT64 v8; 
  unsigned int v9; 
  unsigned int FirstTag; 
  wchar_t *StringTagPtr; 
  UINT64 a3; 
  CHAR szString[8]; 
  __int16 v15; 
  INT8 DestinationAnsiBuffer[272]; 

  LODWORD(a3) = 0;
  memset(DestinationAnsiBuffer, 0i64, 0x104u);
  v4 = (const WCHAR *)*((_QWORD *)pFindInfo + 4);
  *(_QWORD *)szString = 0i64;
  v15 = 0;
  if( AslStringUpcaseToMultiByteN(DestinationAnsiBuffer, v5, v4) >= 0 )
  {
    Index = SdbpGetIndex(pdb, (unsigned int)*pFindInfo, &a3);
    if( Index )
    {
      LODWORD(v7) = pFindInfo[4];
      while( 1 )
      {
        v7 = (unsigned int)(v7 + 1);
        if( (unsigned int)v7 >= (unsigned int)a3 )
          break;
        v8 = *(_QWORD *)&Index[3 * v7];
        if( (pFindInfo[5] & 2) != 0 )
        {
          SdbpKeyToAnsiString(v8, &szString[1]);
          szString[0] = 42;
        }
        else
        {
          SdbpKeyToAnsiString(v8, szString);
          LOBYTE(v15) = 42;
        }
        if( AslStringPatternMatchA(szString, DestinationAnsiBuffer) )
        {
          v9 = Index[3 * v7 + 2];
          FirstTag = SdbFindFirstTag(pdb, v9, *((_WORD *)pFindInfo + 6));
          if( FirstTag )
          {
            StringTagPtr = SdbGetStringTagPtr(pdb, FirstTag);
            if( StringTagPtr )
            {
              if( AslStringPatternMatchW(StringTagPtr, *((PWCHAR *)pFindInfo + 4)) )
              {
                pFindInfo[4] = v7;
                return v9;
              }
            }
          }
        }
      }
    }
  }
  return 0i64;
}

Referenced by:

SdbGetDatabaseMatchEx
SdbpSearchDB