HvReallocateCell
UINT64 __stdcall HvReallocateCell(
PVOID Hive,
PVOID Cell,
UINT64 NewSize,
UINT8 FreeOldCell,
VOID **CellAddress,
_HV_GET_CELL_CONTEXT *CellAddressContext){
int v6;
__int64(__fastcall *v7)(PVOID, PVOID, _HV_GET_CELL_CONTEXT *);
VOID *v8;
ULONG_PTR v10;
VOID *v12;
const VOID *v13;
unsigned int v14;
unsigned int v15;
int v16;
_HV_GET_CELL_CONTEXT *v17;
UINT64 v18;
unsigned int v19;
int v20;
size_t v21;
VOID *v22;
_HV_GET_CELL_CONTEXT *v23;
_HV_GET_CELL_CONTEXT v24;
_HV_GET_CELL_CONTEXT v26;
VOID *v27;
_HV_GET_CELL_CONTEXT v28;
v6 = NewSize;
*(_DWORD *)&v28.BinContext._bf_0 = 0;
v7 = (__int64(__fastcall *)(PVOID, PVOID, _HV_GET_CELL_CONTEXT *))*((_QWORD *)Hive + 1);
v8 = 0i64;
v26 = (_HV_GET_CELL_CONTEXT)0xFFFFFFFFi64;
v10 = (unsigned int)Cell;
v28.Cell = -1;
v27 = 0i64;
v12 = (VOID *)v7(Hive, Cell, &v26);
v13 = v12;
if( v12 )
{
v15 = v6 + 4;
v16 = -4 - *((_DWORD *)v12 - 1);
if( v15 > -*((_DWORD *)v12 - 1) )
{
v18 = 0x4000i64;
v19 = (v15 + 7) & 0xFFFFFFF8;
v20 = 0;
while( v19 > (unsigned int)v18 )
{
v18 = (unsigned int)(2 * v18);
++v20;
}
if( !v20 )
v18 = v19;
if( (unsigned int)v18 <= 0x100000 )
{
v14 = HvpDoAllocateCell((ULONG_PTR)Hive, v18, v10 >> 31, &v27, &v28);
if( v14 == -1 )
{
v8 = v27;
v14 = -1;
}
else
{
v21 = v16;
v22 = v27;
memmove(v27, v13, v21);
(*((void(__fastcall **)(PVOID, _HV_GET_CELL_CONTEXT *))Hive + 2))(Hive, &v26);
v13 = 0i64;
if( FreeOldCell == 1 )
HvFreeCell((ULONG_PTR)Hive, v10);
v23 = CellAddressContext;
*CellAddress = v22;
v24 = v28;
*((_WORD *)&v28.BinContext + 1) = 0;
v28.Cell = -1;
*v23 = v24;
v28.BinContext = 0;
}
}
else
{
v14 = -1;
}
if( v13 )
(*((void(__fastcall **)(PVOID, _HV_GET_CELL_CONTEXT *))Hive + 2))(Hive, &v26);
if( v8 )
(*((void(__fastcall **)(PVOID, _HV_GET_CELL_CONTEXT *))Hive + 2))(Hive, &v28);
}
else
{
v14 = v10;
v17 = CellAddressContext;
*CellAddress = v12;
*v17 = v26;
}
}
else
{
return(unsigned int)-1;
}
return v14;
}Referenced by:
CmRestoreKey
CmpAddToLeaf
CmpAddValueToListEx
CmpRemoveValueFromList
CmpSetValueDataExisting
CmpSetValueKeyExisting
CmpSplitLeaf