SdbpGetFirstIndexedRecord
UINT64 __stdcall SdbpGetFirstIndexedRecord(_DB *pdb, UINT64 tiIndex, UINT64 ullKey, _FIND_INFO *pFindInfo){
unsigned int v6;
unsigned int v8;
_DWORD *MappedTagData;
unsigned int v10;
_DWORD *v11;
int *v12;
int v13;
_DWORD *v14;
_FIND_INFO v16;
INT8 *v17;
UINT64 v18;
v6 = tiIndex;
if( SdbGetTagFromTagID(pdb, tiIndex) != 0x9801 )
{
v17 = "The tag 0x%lx is not an index tag";
v18 = 430i64;
LABEL_15:
AslLogCallPrintf(1ui64, (INT8 *)"SdbpGetFirstIndexedRecord", v18, v17);
return 0i64;
}
v8 = (unsigned int)SdbGetTagDataSize(pdb, v6) / 0xC;
MappedTagData = SdbpGetMappedTagData(pdb, v6);
v10 = 0;
v11 = MappedTagData;
if( !MappedTagData )
{
v17 = (INT8 *)"Failed to get the pointer to index data, index tagid 0x%lx";
v18 = 439i64;
goto LABEL_15;
}
v12 = pFindInfo + 4;
if( (pFindInfo[5] & 1) != 0 )
{
v13 = SdbpBinarySearchUnique((__int64)MappedTagData, v8, ullKey, v12);
if( v13 && *v14 < v8 - 1 )
v16 = v11[3 * (*v14 + 1) + 2];
else
v16 = 0;
pFindInfo[2] = v16;
pFindInfo[1] = 0;
}
else
{
v13 = SdbpBinarySearchFirst((__int64)MappedTagData, v8, ullKey, v12);
}
if( v13 )
return(unsigned int)v11[3 * *v14 + 2];
return v10;
}Referenced by:
SdbFindFirstStringIndexedTag