HvpGrowDirtyVectors
INT64 __fastcall HvpGrowDirtyVectors(INT64 a1, UINT64 a2){
unsigned int v2;
RTL_BITMAP *v3;
unsigned int v4;
unsigned int v5;
unsigned int v7;
__int64 v8;
__int64 v9;
unsigned int *v11;
unsigned int *v12;
unsigned int v13;
INT64 v14;
__int64 v15;
__int64 v16;
struct _RTL_BITMAP BitMapHeader;
RTL_BITMAP Destination;
INT64 result;
v2 = 0;
v3 = (RTL_BITMAP *)(a1 + 88);
v4 = *(_DWORD *)(a1 + 88);
v5 = (unsigned int)a2 >> 9;
*(&BitMapHeader.SizeOfBitMap + 1) = 0;
*(&Destination.SizeOfBitMap + 1) = 0;
v7 = (((unsigned int)a2 >> 12) + 3) & 0xFFFFFFFC;
if( *(_DWORD *)(a1 + 108) < v7 )
{
v11 = (unsigned int *)(*(__int64(__fastcall **)(_QWORD, _QWORD, __int64))(a1 + 24))(v7, 0i64, 959532355i64);
if( v11 )
{
v12 = (unsigned int *)(*(__int64(__fastcall **)(_QWORD, _QWORD, __int64))(a1 + 24))(v7, 0i64, 959532355i64);
result = (INT64)v12;
if( v12 )
{
Destination.Buffer = v12;
v13 = v5 - v4;
BitMapHeader.SizeOfBitMap = v5;
BitMapHeader.Buffer = v11;
Destination.SizeOfBitMap = v5;
if( *(_QWORD *)(a1 + 96) )
{
RtlCopyBitMap(v3, &BitMapHeader, 0i64);
RtlClearBits(&BitMapHeader, v4, v13);
}
else
{
memset((INT64)v11, 0i64);
}
if( *(_QWORD *)(a1 + 120) )
{
RtlCopyBitMap((RTL_BITMAP *)(a1 + 112), &Destination, 0i64);
RtlClearBits(&Destination, v4, v13);
v14 = result;
}
else
{
v14 = result;
memset(result, 0i64);
}
v15 = *(_QWORD *)(a1 + 96);
if( v15 )
(*(void(__fastcall **)(__int64, _QWORD))(a1 + 32))(v15, *(unsigned int *)(a1 + 108));
v16 = *(_QWORD *)(a1 + 120);
if( v16 )
(*(void(__fastcall **)(__int64, _QWORD))(a1 + 32))(v16, *(unsigned int *)(a1 + 108));
v3->SizeOfBitMap = v5;
v3->Buffer = v11;
*(_DWORD *)(a1 + 112) = v5;
*(_QWORD *)(a1 + 120) = v14;
*(_DWORD *)(a1 + 108) = v7;
}
else
{
v2 = -1073741670;
(*(void(__fastcall **)(unsigned int *, _QWORD))(a1 + 32))(v11, v7);
}
}
else
{
return(unsigned int)-1073741670;
}
}
else
{
v8 = *(_QWORD *)(a1 + 96);
v3->SizeOfBitMap = v5;
*(_QWORD *)(a1 + 96) = v8;
RtlClearBits((RTL_BITMAP *)(a1 + 88), v4, v5 - v4);
v9 = *(_QWORD *)(a1 + 120);
*(_DWORD *)(a1 + 112) = v5;
*(_QWORD *)(a1 + 120) = v9;
RtlClearBits((RTL_BITMAP *)(a1 + 112), v4, v5 - v4);
}
return v2;
}Referenced by:
HvpAddBin
HvpPerformLogFileRecovery