SdbpGetNextIndexedRecord
UINT64 __stdcall SdbpGetNextIndexedRecord(_DB *pdb, UINT64 tiIndex, _FIND_INFO *pFindInfo){
unsigned int v4;
_DWORD *MappedTagData;
unsigned int TagDataSize;
__int64 v8;
__int64 v9;
__int64 v10;
unsigned int NextTagId;
unsigned int v13;
UINT16 TagFromTagID;
UINT16 v15;
INT8 *v16;
UINT64 v17;
v4 = tiIndex;
if( SdbGetTagFromTagID(pdb, tiIndex) != 0x9801 )
{
v16 = "The tag 0x%lx is not an index tag";
v17 = 499i64;
LABEL_18:
AslLogCallPrintf(1ui64, (INT8 *)"SdbpGetNextIndexedRecord", v17, v16);
return 0i64;
}
MappedTagData = SdbpGetMappedTagData(pdb, v4);
if( !MappedTagData )
{
v16 = (INT8 *)"Failed to get pointer to the index data tagid x%lx";
v17 = 506i64;
goto LABEL_18;
}
if( (pFindInfo[5] & 1) != 0 )
{
v13 = pFindInfo[1];
if( !v13 )
v13 = MappedTagData[3 * pFindInfo[4] + 2];
NextTagId = SdbpGetNextTagId(pdb, v13);
TagFromTagID = SdbGetTagFromTagID(pdb, v13);
v15 = SdbGetTagFromTagID(pdb, NextTagId);
if( v15 && (v15 & 0xF000) == 28672 && v15 == TagFromTagID && NextTagId != pFindInfo[2] )
{
pFindInfo[1] = NextTagId;
return NextTagId;
}
}
else
{
TagDataSize = SdbGetTagDataSize(pdb, v4);
v8 = (unsigned int)pFindInfo[4];
if( (_DWORD)v8 != TagDataSize / 0xC - 1 )
{
v9 = 3 * v8;
v10 = (unsigned int)(v8 + 1);
if( *(_QWORD *)&MappedTagData[v9] == *(_QWORD *)&MappedTagData[3 * v10] )
{
pFindInfo[4] = v10;
return(unsigned int)MappedTagData[3 * v10 + 2];
}
}
}
return 0i64;
}Referenced by:
SdbFindNextStringIndexedTag
SdbpFindMatchingName