MiExpandVadBitMapDown
NTSTATUS __stdcall MiExpandVadBitMapDown(UINT64 BitsNeeded){
unsigned __int64 v1;
__int64 v3;
_MMWSL_INSTANCE *VmWorkingSetList;
unsigned __int64 v5;
unsigned __int64 v6;
_QWORD *v7;
__int64 v8;
UINT64 v10;
v3 = *(_QWORD *)(BitsNeeded + 8);
v10 = 0i64;
VmWorkingSetList = KeGetCurrentThread()->ApcState.Process->Vm.Instance.VmWorkingSetList;
if( v1 > 8 * (v3 - *(&stru_140C4DB30 + 174)) )
return 0;
v5 = (v1 >> 6) + ((v1 & 0x3F) != 0);
v6 = ((8 * v5) >> 12) + (((8 * v5) & 0xFFF) != 0);
v7 = (_QWORD *)(v3 - (v6 << 12));
if( MiMakeHyperRangeAccessible(v7, (PVOID)(v3 - 1), &v10) < 0 )
return 0;
VmWorkingSetList[6].LockedEntries += v10;
*(_QWORD *)BitsNeeded += v6 << 15;
*(_QWORD *)(BitsNeeded + 8) = v7;
if( v7 == (_QWORD *)*(&stru_140C4DB30 + 174) )
{
*v7 |= 1ui64;
v8 = 1i64;
}
else
{
v8 = 0i64;
}
*(_QWORD *)(BitsNeeded + 16) = v8;
*(_QWORD *)(BitsNeeded + 32) = v8;
*(_QWORD *)(BitsNeeded + 24) = 0i64;
MiUpdateVadBits(
(VOID *)((*(_QWORD *)(BitsNeeded + 8) - *(&stru_140C4DB30 + 174)) << 19),
(VOID *)(((*(_QWORD *)(BitsNeeded + 8) - *(&stru_140C4DB30 + 174)) << 19) + (v6 << 31)));
return 1;
}Referenced by:
MiExpandVadBitMap