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