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