SdbpFindFirstIndexedWildCardTag

NTSTATUS __fastcall SdbpFindFirstIndexedWildCardTag(
        _DB *pdb,
        UINT64 tWhich,
        UINT16 tKey,
        const WCHAR *szName,
        _FIND_INFO *pFindInfo){
  _FIND_INFO Index; 
  char v8; 
  UINT64 v9; 
  _DWORD *v10; 
  unsigned int v11; 
  __int64 v12; 
  int v14; 
  UINT64 v15; 
  unsigned int v16; 
  unsigned int FirstTag; 
  wchar_t *StringTagPtr; 
  UINT64 dwFlags; 
  CHAR szString[8]; 
  __int16 v21; 
  INT8 DestinationAnsiBuffer[272]; 

  dwFlags = 0i64;
  Index = SdbGetIndex(pdb, tWhich, 0x600Bu, &dwFlags);
  *pFindInfo = Index;
  if( !Index )
  {
    AslLogCallPrintf(
      1ui64,
      (INT8 *)"SdbpFindFirstIndexedWildCardTag",
      0x2A1ui64,
      (INT8 *)"Failed to get an index for tag 0x%lx key 0x%lx");
    return 0;
  }
  v8 = dwFlags;
  pFindInfo[5] = dwFlags;
  *((_WORD *)pFindInfo + 6) = 24587;
  *((_QWORD *)pFindInfo + 4) = szName;
  memset(DestinationAnsiBuffer, 0i64, 0x104u);
  *(_QWORD *)szString = 0i64;
  v21 = 0;
  if( AslStringUpcaseToMultiByteN(DestinationAnsiBuffer, v9, szName) < 0 )
  {
    AslLogCallPrintf(
      1ui64,
      (INT8 *)"SdbpFindFirstIndexedWildCardTag",
      0x2B2ui64,
      (INT8 *)"Failed to convert name to multi-byte");
    return 0;
  }
  v10 = SdbpGetIndex(pdb, (unsigned int)*pFindInfo, (UINT64 *)((char *)&dwFlags + 4));
  if( !v10 )
  {
    AslLogCallPrintf(
      1ui64,
      (INT8 *)"SdbpFindFirstIndexedWildCardTag",
      0x2BCui64,
      (INT8 *)"Failed to get index by tag id 0x%lx");
    return 0;
  }
  v11 = HIDWORD(dwFlags);
  v12 = 0i64;
  if( !HIDWORD(dwFlags) )
    return 0;
  v14 = v8 & 2;
  while( 1 )
  {
    v15 = *(_QWORD *)&v10[3 * v12];
    if( v14 )
    {
      SdbpKeyToAnsiString(v15, &szString[1]);
      szString[0] = 42;
    }
    else
    {
      SdbpKeyToAnsiString(v15, szString);
      LOBYTE(v21) = 42;
    }
    if( AslStringPatternMatchA(szString, DestinationAnsiBuffer) )
    {
      v16 = v10[3 * v12 + 2];
      FirstTag = SdbFindFirstTag(pdb, v16, *((_WORD *)pFindInfo + 6));
      if( FirstTag )
      {
        StringTagPtr = SdbGetStringTagPtr(pdb, FirstTag);
        if( StringTagPtr )
        {
          if( AslStringPatternMatchW(StringTagPtr, *((PWCHAR *)pFindInfo + 4)) )
            break;
        }
      }
    }
    v12 = (unsigned int)(v12 + 1);
    if( (unsigned int)v12 >= v11 )
      return 0;
  }
  pFindInfo[4] = v12;
  return v16;
}

Referenced by:

SdbGetDatabaseMatchEx
SdbpSearchDB