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