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