MiReturnFaultCharges

VOID __stdcall MiReturnFaultCharges(_MI_PARTITION *Partition, UINT64 NumberOfPages, UINT64 ChargeFlags){
  char v3; 
  unsigned __int64 v4; 
  struct _KPRCB *CurrentPrcb; 
  __int64 CachedResidentAvailable; 
  bool v7; 
  signed __int32 v8; 

  v3 = ChargeFlags;
  v4 = NumberOfPages;
  if( Partition == &Irp )
  {
    CurrentPrcb = KeGetCurrentPrcb();
    CachedResidentAvailable = (int)CurrentPrcb->CachedResidentAvailable;
    if( (_DWORD)CachedResidentAvailable != -1 )
    {
      if( NumberOfPages + CachedResidentAvailable <= 0x100 )
      {
        do
        {
          if( NumberOfPages >= 0x80000 )
            break;
          v8 = _InterlockedCompareExchange(
                 (volatile signed __int32 *)&CurrentPrcb->CachedResidentAvailable,
                 CachedResidentAvailable + NumberOfPages,
                 CachedResidentAvailable);
          v7 = (_DWORD)CachedResidentAvailable == v8;
          LODWORD(CachedResidentAvailable) = v8;
          if( v7 )
            goto LABEL_6;
        }
        while( v8 != -1 && NumberOfPages + v8 <= 0x100 );
      }
      if( (int)CachedResidentAvailable > 192
        && (_DWORD)CachedResidentAvailable != -1
        && (_DWORD)CachedResidentAvailable == _InterlockedCompareExchange(
                                                (volatile signed __int32 *)&CurrentPrcb->CachedResidentAvailable,
                                                192,
                                                CachedResidentAvailable) )
      {
        v4 = NumberOfPages + (int)CachedResidentAvailable - 192;
      }
    }
  }
  if( v4 )
    _InterlockedExchangeAdd64((volatile signed __int64 *)&Partition->Vp.ResidentAvailablePages, v4);
LABEL_6:
  if( (v3 & 1) != 0 )
    MiReturnCommit(Partition, NumberOfPages);
}

Referenced by:

MiFreeReadListPages
MiGetPageForHeader
MiMigratePfn
MiObtainFaultCharges
MiPfPrepareReadList
MiPfPrepareSequentialReadList
MiPfPutPagesInTransition
MiPrivateFixup
MiResolveMappedFileFault
MiResolvePageFileFault
MiSwitchToTransition