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