HvpGrowDirtyVectors
NTSTATUS __stdcall HvpGrowDirtyVectors(INT64 a1, UINT64 a2){
NTSTATUS v2;
_RTL_BITMAP *v3;
UINT32 v4;
unsigned int v5;
unsigned int v7;
__int64 v8;
__int64 v9;
unsigned int *v11;
unsigned int *v12;
UINT32 v13;
unsigned int *v14;
__int64 v15;
__int64 v16;
_RTL_BITMAP Destination;
_RTL_BITMAP BitMapHeader;
unsigned int *v19;
v2 = 0;
v3 = (_RTL_BITMAP *)(a1 + 88);
v4 = *(_DWORD *)(a1 + 88);
v5 = (unsigned int)a2 >> 9;
*(&Destination.SizeOfBitMap + 1) = 0;
*(&BitMapHeader.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);
v19 = v12;
if( v12 )
{
BitMapHeader.Buffer = v12;
v13 = v5 - v4;
Destination.SizeOfBitMap = v5;
Destination.Buffer = v11;
BitMapHeader.SizeOfBitMap = v5;
if( *(_QWORD *)(a1 + 96) )
{
RtlCopyBitMap(v3, &Destination, 0i64);
RtlClearBits(&Destination, v4, v13);
}
else
{
memset(v11, 0i64, v7);
}
if( *(_QWORD *)(a1 + 120) )
{
RtlCopyBitMap((_RTL_BITMAP *)(a1 + 112), &BitMapHeader, 0i64);
RtlClearBits(&BitMapHeader, v4, v13);
v14 = v19;
}
else
{
v14 = v19;
memset(v19, 0i64, v7);
}
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 -1073741670;
}
}
else
{
v8 = *(_QWORD *)(a1 + 96);
v3->SizeOfBitMap = v5;
*(_QWORD *)(a1 + 96) = v8;
RtlClearBits((PRTL_BITMAP)(a1 + 88), v4, v5 - v4);
v9 = *(_QWORD *)(a1 + 120);
*(_DWORD *)(a1 + 112) = v5;
*(_QWORD *)(a1 + 120) = v9;
RtlClearBits((PRTL_BITMAP)(a1 + 112), v4, v5 - v4);
}
return v2;
}Referenced by:
HvpAddBin
HvpPerformLogFileRecovery