SdbpGetFirstIndexedRecord
INT64 __fastcall SdbpGetFirstIndexedRecord(INT64 a1, UINT64 a2, UINT64 a3, _DWORD *a4){
unsigned int v6;
unsigned int v8;
__int64 MappedTagData;
unsigned int v10;
__int64 v11;
int *v12;
int v13;
_DWORD *v14;
int v16;
const CHAR *v17;
UINT64 v18;
v6 = a2;
if( (unsigned __int16)SdbGetTagFromTagID(a1, a2) != 0x9801 )
{
v17 = "The tag 0x%lx is not an index tag";
v18 = 430i64;
LABEL_15:
AslLogCallPrintf(1ui64, "SdbpGetFirstIndexedRecord", v18, v17, v6);
return 0i64;
}
v8 = (unsigned int)SdbGetTagDataSize(a1, v6) / 0xC;
MappedTagData = SdbpGetMappedTagData(a1, v6);
v10 = 0;
v11 = MappedTagData;
if( !MappedTagData )
{
v17 = "Failed to get the pointer to index data, index tagid 0x%lx";
v18 = 439i64;
goto LABEL_15;
}
v12 = a4 + 4;
if( (a4[5] & 1) != 0 )
{
v13 = SdbpBinarySearchUnique(MappedTagData, v8, a3, v12);
if( v13 && *v14 < v8 - 1 )
v16 = *(_DWORD *)(v11 + 12i64 * (unsigned int)(*v14 + 1) + 8);
else
v16 = 0;
a4[2] = v16;
a4[1] = 0;
}
else
{
v13 = SdbpBinarySearchFirst(MappedTagData, v8, a3, (INT64 *)v12);
}
if( v13 )
return *(unsigned int *)(v11 + 12i64 * (unsigned int)*v14 + 8);
return v10;
}Referenced by:
SdbFindFirstStringIndexedTag