MiChargePartitionResidentAvailable

_MI_RESAVAIL_CHARGE __stdcall MiChargePartitionResidentAvailable(
        _MI_PARTITION *Partition,
        UINT64 NumberOfPages,
        UINT64 RemainderPages){
  signed __int64 ResidentAvailablePages; 
  unsigned __int64 v6; 
  __int64 v7; 
  signed __int64 v8; 
  _BOOL8 v9; 
  struct _KPRCB *CurrentPrcb; 
  unsigned int CachedResidentAvailable; 
  unsigned __int64 v12; 
  struct _KPRCB *v13; 
  __int64 v14; 
  bool v15; 
  signed __int32 v16; 
  _KPRCB **v18; 
  __int64 v19; 
  unsigned __int32 v20; 
  unsigned __int64 v21; 

  if( NumberOfPages + RemainderPages >= NumberOfPages || RemainderPages == 0xFFFFFFFF )
  {
    ResidentAvailablePages = Partition->Vp.ResidentAvailablePages;
    v6 = 0i64;
    if( ResidentAvailablePages < 1024 && Partition == &Irp )
    {
      if( (_DWORD)KeNumberProcessors_0 )
      {
        v18 = &KiProcessorBlock;
        v19 = (unsigned int)KeNumberProcessors_0;
        do
        {
          if( (*v18)->CachedResidentAvailable != -1 )
          {
            v20 = _InterlockedExchange((volatile __int32 *)&(*v18)->CachedResidentAvailable, -1);
            if( v20 != -1 )
              v6 += v20;
          }
          ++v18;
          --v19;
        }
        while( v19 );
      }
      if( v6 >= NumberOfPages )
      {
        v21 = v6 - NumberOfPages;
        if( v21 )
          _InterlockedExchangeAdd64((volatile signed __int64 *)&Partition->Vp.ResidentAvailablePages, v21);
        return 3;
      }
      NumberOfPages -= v6;
    }
    if( ResidentAvailablePages <= 0 )
    {
LABEL_46:
      if( RemainderPages != 0xFFFFFFFF )
      {
LABEL_47:
        ++*(&stru_140C4DB30 + 641);
        if( v6 )
          _InterlockedExchangeAdd64((volatile signed __int64 *)&Partition->Vp.ResidentAvailablePages, v6);
        return 0;
      }
      _InterlockedExchangeAdd64(
        (volatile signed __int64 *)&Partition->Vp.ResidentAvailablePages,
        -(__int64)NumberOfPages);
      return 3;
    }
    while( 1 )
    {
      if( NumberOfPages + RemainderPages > ResidentAvailablePages && RemainderPages != 0xFFFFFFFF )
        goto LABEL_47;
      v7 = _InterlockedCompareExchange64(
             (volatile signed __int64 *)&Partition->Vp.ResidentAvailablePages,
             ResidentAvailablePages - NumberOfPages,
             ResidentAvailablePages);
      if( ResidentAvailablePages == v7 )
        break;
      ResidentAvailablePages = v7;
      if( v7 <= 0 )
        goto LABEL_46;
    }
    v8 = ResidentAvailablePages - NumberOfPages;
    v9 = v8 < 1024;
    if( Partition == &Irp )
    {
      CurrentPrcb = KeGetCurrentPrcb();
      CachedResidentAvailable = CurrentPrcb->CachedResidentAvailable;
      if( CachedResidentAvailable == -1 )
      {
        if( v8 >= 2048 )
        {
          _InterlockedCompareExchange((volatile signed __int32 *)&CurrentPrcb->CachedResidentAvailable, 0, -1);
          CachedResidentAvailable = 0;
          goto LABEL_9;
        }
      }
      else if( CachedResidentAvailable < 0x40 )
      {
LABEL_9:
        if( v8 > 1024 )
        {
          v12 = 128 - CachedResidentAvailable;
          if( v8 == _InterlockedCompareExchange64(
                       (volatile signed __int64 *)&Partition->Vp.ResidentAvailablePages,
                       v8 - v12,
                       v8) )
          {
            v13 = KeGetCurrentPrcb();
            v14 = (int)v13->CachedResidentAvailable;
            if( (_DWORD)v14 != -1 )
            {
              if( v12 + v14 <= 0x100 )
              {
                do
                {
                  if( v12 >= 0x80000 )
                    break;
                  v16 = _InterlockedCompareExchange(
                          (volatile signed __int32 *)&v13->CachedResidentAvailable,
                          v12 + v14,
                          v14);
                  v15 = (_DWORD)v14 == v16;
                  LODWORD(v14) = v16;
                  if( v15 )
                    return v9 + 2;
                }
                while( v16 != -1 && v12 + v16 <= 0x100 );
              }
              if( (int)v14 > 192
                && (_DWORD)v14 != -1
                && (_DWORD)v14 == _InterlockedCompareExchange(
                                    (volatile signed __int32 *)&v13->CachedResidentAvailable,
                                    192,
                                    v14) )
              {
                v12 += (int)v14 - 192;
              }
            }
            if( v12 )
              _InterlockedExchangeAdd64((volatile signed __int64 *)&Partition->Vp.ResidentAvailablePages, v12);
          }
        }
      }
    }
    return v9 + 2;
  }
  ++*(&stru_140C4DB30 + 640);
  return 0;
}

Referenced by:

MiChargeForLockedPage
MiChargeResident
MiFlushSectionInternal
MiLockPageTablePage
MiMakePageAvoidRead
MiObtainFaultCharges
MiProbeLockFrame
MiResolveProtoPteFault
MmCheckCachedPageStates