MiExpandVadBitMapDown
UINT64 __stdcall MiExpandVadBitMapDown(UINT64 BitsNeeded){
unsigned __int64 v1;
__int64 v3;
__int64 v4;
unsigned __int64 v5;
unsigned __int64 v6;
_QWORD *v7;
__int64 v8;
UINT64 v10;
v3 = *(_QWORD *)(BitsNeeded + 8);
v10 = 0i64;
v4 = *(_QWORD *)(*((_QWORD *)KeGetCurrentThread() + 23) + 1680i64);
if( v1 > 8 * (v3 - qword_140C4E0A0) )
return 0i64;
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 0i64;
*(_QWORD *)(v4 + 272) += v10;
*(_QWORD *)BitsNeeded += v6 << 15;
*(_QWORD *)(BitsNeeded + 8) = v7;
if( v7 == (_QWORD *)qword_140C4E0A0 )
{
*v7 |= 1ui64;
v8 = 1i64;
}
else
{
v8 = 0i64;
}
*(_QWORD *)(BitsNeeded + 16) = v8;
*(_QWORD *)(BitsNeeded + 32) = v8;
*(_QWORD *)(BitsNeeded + 24) = 0i64;
MiUpdateVadBits(
(PVOID)((*(_QWORD *)(BitsNeeded + 8) - qword_140C4E0A0) << 19),
(PVOID)(((*(_QWORD *)(BitsNeeded + 8) - qword_140C4E0A0) << 19) + (v6 << 31)));
return 1i64;
}Referenced by:
MiExpandVadBitMap