HvDuplicateCell

INT64 __fastcall HvDuplicateCell(UINT64 a1, INT64 a2, UINT64 a3, CHAR a4){
  HSTORAGE_TYPE v5; 
  __int64(__fastcall *v6)(UINT64, INT64, int *); 
  __int64 v8; 
  UINT8 *v9; 
  int v10; 
  unsigned int v11; 
  VOID *v12; 
  unsigned int v13; 
  _HV_GET_CELL_CONTEXT CellAddressContext; 
  VOID *CellAddress; 
  int v17; 
  int v18; 
  v17 = -1;
  CellAddressContext.Cell = -1;
  CellAddress = 0i64;
  v5 = (int)a3;
  v18 = 0;
  v6 = *(__int64(__fastcall **)(UINT64, INT64, int *))(a1 + 8);
  *(_DWORD *)&CellAddressContext.BinContext = 0;
  v8 = v6(a1, a2, &v17);
  v9 = (UINT8 *)v8;
  if( !v8 )
    return 0xFFFFFFFFi64;
  v10 = -4 - *(_DWORD *)(v8 - 4);
  v11 = HvAllocateCell((_HHIVE *)a1, (unsigned int)v10, v5, &CellAddress, &CellAddressContext);
  v12 = CellAddress;
  v13 = v11;
  if( v11 != -1 )
  {
    if( a4 == 1 )
      memmove((UINT8 *)CellAddress, v9, v10);
    else
      memset((INT64)CellAddress, 0i64);
  }
  (*(void(__fastcall **)(UINT64, int *))(a1 + 16))(a1, &v17);
  if( v12 )
    (*(void(__fastcall **)(UINT64, _HV_GET_CELL_CONTEXT *))(a1 + 16))(a1, &CellAddressContext);
  return v13;
}

Referenced by:

CmpCloneKCBValueListForTrans
CmpDuplicateIndex