MiEmptyPteBins

UINT64 __stdcall MiEmptyPteBins(_MI_SYSTEM_PTE_TYPE *PteInfo, UINT64 IncludeBinsNeedingFlush){
  UINT64 v2; 
  unsigned int v4; 
  int v5; 
  volatile _MI_CACHED_PTES *CachedPtes; 
  unsigned int v7; 
  unsigned int v8; 
  unsigned int i; 
  volatile signed __int64 *v10; 
  signed __int64 v11; 
  int v13; 
  unsigned __int8 CurrentIrql; 
  unsigned __int64 v15; 
  int v16; 
  signed __int32 v17[22]; 
  _MI_CACHED_PTE CachedPte; 
  int v19; 
  v19 = IncludeBinsNeedingFlush;
  v2 = 0i64;
  v4 = 0;
  _InterlockedOr(v17, 0);
  v5 = KiTbFlushTimeStamp;
  CachedPtes = PteInfo->CachedPtes;
  v7 = 0;
  v8 = 2 * (unsigned __int16)KeNumberNodes;
  if( PteInfo != (_MI_SYSTEM_PTE_TYPE *)&qword_140C4EC80 )
    v8 = (unsigned __int16)KeNumberNodes;
  if( v8 )
  {
    while( 2 )
    {
      for( i = 0; i < 8; ++i )
      {
        v10 = (volatile signed __int64 *)&CachedPtes->Bins[i];
        v11 = *v10;
        CachedPte = (_MI_CACHED_PTE)v11;
        if( (_DWORD)v11 )
        {
          if( (unsigned int)(v5 - v11) <= 2 )
          {
            if( (v11 & 1) != 0 || (v13 = 0, (unsigned int)(v5 - v11) < 2) )
              v13 = 1;
          }
          else
          {
            v13 = 0;
          }
          if( v13 != 1 || (_DWORD)IncludeBinsNeedingFlush )
          {
            CurrentIrql = KeGetCurrentIrql();
            __writecr8(2ui64);
            if( CurrentIrql == 2 && PteInfo == (_MI_SYSTEM_PTE_TYPE *)&qword_140C4EC80 && v7 >= v8 >> 1 )
            {
              __writecr8(2ui64);
              return v4;
            }
            if( v11 == _InterlockedCompareExchange64(v10, 0i64, v11) )
            {
              _InterlockedOr(v17, 0);
              if( (unsigned int)(KiTbFlushTimeStamp - CachedPte.GlobalTimeStamp) <= 2
                && ((CachedPte.GlobalTimeStamp & 1) != 0
                 || (unsigned int)(KiTbFlushTimeStamp - CachedPte.GlobalTimeStamp) < 2) )
              {
                v2 = 1i64;
              }
              if( PteInfo == (_MI_SYSTEM_PTE_TYPE *)&qword_140C4EC80 && v7 >= v8 >> 1 )
              {
                v16 = MiReleaseLargePteMappings(PteInfo, &CachedPte, v2);
                __writecr8(CurrentIrql);
              }
              else
              {
                v15 = MiReplenishBitMap((INT64)PteInfo, CachedPte.PteIndex, v2);
                v16 = v15;
                _InterlockedExchangeAdd64((volatile signed __int64 *)&PteInfo->TotalFreeSystemPtes, v15);
              }
              _InterlockedExchangeAdd(&CachedPtes->CachedPteCount, -v16);
              LODWORD(IncludeBinsNeedingFlush) = v19;
              v4 = 1;
              v2 = 0i64;
            }
            else
            {
              --i;
            }
            __writecr8(CurrentIrql);
          }
        }
      }
      ++CachedPtes;
      if( ++v7 < v8 )
        continue;
      break;
    }
  }
  return v4;
}

Referenced by:

MiAdjustPteBins
MiCheckProcessorPteCache
MiInsertCachedPte
MiReservePtes