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