MiAddWorkingSetEntries

UINT64 __fastcall MiAddWorkingSetEntries(INT64 a1, UINT64 rdx0, UINT8 *r8_0, CHAR a4){
  char v4; 
  unsigned __int64 v7; 
  unsigned __int64 *v9; 
  KSPIN_LOCK_QUEUE *v10; 
  int v11; 
  UINT8 *v12; 
  unsigned __int64 v13; 
  unsigned __int64 v14; 
  _QWORD *v15; 
  unsigned __int64 v16; 
  unsigned __int64 v17; 
  char v18; 
  _MMPTE *PteBase; 
  _MMPTE *PteLimit; 
  UINT8 *v21; 
  char v22; 
  int v23; 
  unsigned __int8 v24; 
  UINT64 v25; 
  unsigned __int64 *v26; 
  unsigned __int64 v27; 
  unsigned __int8 v28; 
  UINT64 result; 
  UINT64 v30; 
  UINT64 v31; 
  INT64 v32; 
  UINT64 *v33; 
  __int64 v34; 
  unsigned __int64 v35; 
  __int64 v36; 
  __int64 v37; 
  __int64 *v38; 
  __int64 *v39; 
  __int64 v40; 
  __int64 v41; 
  unsigned __int64 v42; 
  unsigned __int64 *v43; 
  unsigned __int64 v44; 
  KSPIN_LOCK_QUEUE *v45; 
  unsigned __int8 v46; 
  int v47; 
  __int64 v48; 
  __int64 **v49; 
  __int64 v50; 
  _MI_PARTITION *v51; 
  int StandbyRepurposed; 
  __int64 v53; 
  int v54; 
  _KSPIN_LOCK_QUEUE LockQueue; 
  __int64 v56; 
  UINT64 v57; 
  UINT64 v58; 
  struct _KLOCK_QUEUE_HANDLE LockHandle; 
  __int64 v60; 
  UINT64 a2; 
  __int128 v62; 
  __int64 v63; 
  _OWORD a3[2]; 
  v4 = *(_BYTE *)(a1 + 184) & 7;
  v56 = 0i64;
  a2 = rdx0;
  v7 = rdx0;
  if( v4 == 2 )
    v9 = &qword_140C4F500;
  else
    v9 = (unsigned __int64 *)(a1 + 256);
  LockQueue.Lock = v9;
  LockQueue.Next = 0i64;
  v10 = (KSPIN_LOCK_QUEUE *)_InterlockedExchange64((volatile __int64 *)v9, (__int64)&LockQueue);
  if( v10 )
    KxWaitForLockOwnerShip(&LockQueue, v10);
  v11 = 1;
  if( (a4 & 1) != 0 )
  {
    v12 = &r8_0[*(_QWORD *)(a1 + 120)];
    if( (unsigned __int64)v12 > *(_QWORD *)(a1 + 112) && (*(_BYTE *)(a1 + 187) & 8) == 0 )
    {
      v13 = *(_QWORD *)(a1 + 136);
      v14 = *(_QWORD *)(*(_QWORD *)(a1 + 16) + 32i64);
      if( v13 > v14 )
      {
        v15 = *(_QWORD **)(qword_140C4E388 + 8i64 * *(unsigned __int16 *)(a1 + 174));
        v16 = v15[866];
        if( (v13 & 0x3F) != 0 )
        {
          v17 = -1i64;
        }
        else
        {
          v17 = v15[888];
          if( v17 < v16 / 0x14 )
          {
            v11 = 1;
            if( v13 >= v16 / 0x14 )
            {
LABEL_71:
              *(_BYTE *)(a1 + 187) |= 8u;
              goto LABEL_13;
            }
          }
          else
          {
            v11 = 1;
          }
        }
        if( v13 - v14 >= 3 * (v16 >> 2) )
        {
          v51 = *(_MI_PARTITION **)(qword_140C4E388 + 8i64 * *(unsigned __int16 *)(a1 + 174));
          v60 = v15[856];
          StandbyRepurposed = MiGetStandbyRepurposed(v51, 1ui64);
          if( StandbyRepurposed == v54 )
          {
            v11 = 1;
          }
          else
          {
            if( v53 )
              v17 = v15[888];
            v11 = 1;
            if( v17 < 10i64 * *(_QWORD *)(v60 + 2384) )
              goto LABEL_71;
          }
        }
      }
      if( (*(_BYTE *)(a1 + 184) & 0x40) != 0 && (unsigned __int64)v12 > *(_QWORD *)(a1 + 152) )
        goto LABEL_71;
    }
  }
LABEL_13:
  v18 = *(_BYTE *)(a1 + 184);
  *(_DWORD *)(a1 + 4) += (_DWORD)r8_0;
  if( (v18 & 7) == 2 )
    dword_140C4F540 += (int)r8_0;
  __addgsdword(0x2E90u, (unsigned int)r8_0);
  *(_QWORD *)(a1 + 136) += r8_0;
  PteBase = MmGetPteBase();
  PteLimit = MmGetPteLimit();
  if( v7 < (unsigned __int64)PteBase || v7 > (unsigned __int64)PteLimit )
    *(_QWORD *)(a1 + 120) += r8_0;
  else
    v11 = 0;
  v21 = &r8_0[*(_QWORD *)(a1 + 120)];
  if( (unsigned __int64)v21 > *(_QWORD *)(a1 + 160) )
    *(_QWORD *)(a1 + 160) = v21;
  if( (*(_BYTE *)(a1 + 184) & 7) == 2 )
  {
    qword_140C4F548 += (__int64)r8_0;
    if( v11 == 1 )
      qword_140C4F550 += (__int64)r8_0;
    if( qword_140C4F550 > (unsigned __int64)qword_140C4F558 )
      qword_140C4F558 = qword_140C4F550;
  }
  if( (a4 & 2) != 0 )
  {
    *(_QWORD *)(a1 + 144) += r8_0;
    v62 = 0i64;
    v63 = 0i64;
    if( v7 < (unsigned __int64)PteBase || v7 > (unsigned __int64)PteLimit )
      *(_QWORD *)(a1 + 128) += r8_0;
  }
  v22 = *(_BYTE *)(a1 + 184);
  if( (v22 & 7u) >= 2 )
  {
    v40 = *(_QWORD *)(qword_140C4E388 + 8i64 * *(unsigned __int16 *)(a1 + 174));
    v41 = (v22 & 7u) - 2;
    v42 = *(_QWORD *)(a1 + 136) + *(_QWORD *)(v40 + 4352);
    if( v42 > *(_QWORD *)(v40 + 8 * v41 + 4360) )
    {
      *(_QWORD *)(v40 + 8 * v41 + 4360) = v42;
      v22 = *(_BYTE *)(a1 + 184);
    }
    if( (v22 & 7) == 4 )
    {
      if( PsNtosImageBase
        && (v7 >= PsNtosImageBase && v7 < PsNtosImageEnd || v7 < PsHalImageEnd && v7 >= (unsigned __int64)PsHalImageBase) )
      {
        LODWORD(xmmword_140C4CA88) = (_DWORD)r8_0 + xmmword_140C4CA88;
      }
      else
      {
        if( (unsigned int)MiGetSystemRegionType(v7) == 12
          && MiIsDriverPage((INT64)PteBase + ((v7 >> 9) & 0x7FFFFFFFF8i64)) )
        {
          DWORD1(xmmword_140C4CA88) += (_DWORD)r8_0;
        }
        PteLimit = MmGetPteLimit();
      }
    }
  }
  v23 = a4 & 4;
  if( v23 && r8_0 )
  {
    while( 1 )
    {
      if( v7 < (unsigned __int64)PteBase || v7 > (unsigned __int64)PteLimit )
      {
        v24 = HIBYTE(*(_QWORD *)((char *)PteBase + ((v7 >> 9) & 0x7FFFFFFFF8i64))) & 0xF;
      }
      else
      {
        v43 = (unsigned __int64 *)((char *)PteBase + ((v7 >> 9) & 0x7FFFFFFFF8i64));
        v44 = *v43;
        MiPteInShadowRange((UINT64)v43);
        v24 = (*((_BYTE *)MmGetPfnDb() + 48 * ((v44 >> 12) & 0xFFFFFFFFFi64)) >> 1) & 7;
      }
      if( v7 < (unsigned __int64)PteBase || v7 > (unsigned __int64)MmGetPteLimit() )
      {
        v25 = *(_QWORD *)((char *)MmGetPdeBase() + ((v7 >> 18) & 0x3FFFFFF8));
        v57 = v25;
        MiPteInShadowRange((UINT64)&v57);
        v26 = (unsigned __int64 *)((char *)MmGetPfnDb() + 48 * ((v25 >> 12) & 0xFFFFFFFFFi64));
        v27 = *v26;
        v28 = (*v26 >> 14) & 7;
        if( ((*v26 >> 4) & 0x3FF) != 0 )
        {
          if( v24 == v28 )
          {
            *v26 = v27 ^ ((unsigned __int16)v27 ^ (unsigned __int16)(16 * (((*v26 >> 4) & 0x3FF) + 1))) & 0x3FF0;
          }
          else if( v24 > v28 )
          {
            *v26 = v27 & 0xFFFFFFFFFFFE001Fui64 | ((unsigned __int64)(v24 & 7) << 14) | 0x10;
          }
        }
      }
      ++*(_QWORD *)(a1 + 8i64 * v24 + 40);
      if( v24 == 7 )
      {
        v34 = *(unsigned __int16 *)(a1 + 174);
        v35 = *(_QWORD *)(a1 + 96);
        memset(&LockHandle, 0, sizeof(LockHandle));
        v36 = *(_QWORD *)(qword_140C4E388 + 8 * v34);
        v37 = *(_QWORD *)(v36 + 6848);
        if( v35 >= *(_QWORD *)(v37 + 56) )
        {
          v38 = (__int64 *)(a1 + 24);
          if( *(_QWORD *)(a1 + 24) )
          {
            v39 = (__int64 *)(v36 + 6856);
            if( *(__int64 **)(v36 + 6856) != v38 )
            {
              LockHandle.LockQueue.Lock = &WorkerRoutine;
              LockHandle.LockQueue.Next = 0i64;
              v45 = (KSPIN_LOCK_QUEUE *)_InterlockedExchange64((volatile __int64 *)&WorkerRoutine, (__int64)&LockHandle);
              if( v45 )
                KxWaitForLockOwnerShip(&LockHandle.LockQueue, v45);
              if( *(_BYTE *)(v37 + 53) || (v48 = *v38) == 0 )
              {
                *(_BYTE *)(v37 + 54) = 1;
                KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
              }
              else
              {
                v49 = *(__int64 ***)(a1 + 32);
                if( *(__int64 **)(v48 + 8) != v38
                  || *v49 != v38
                  || (*v49 = (__int64 *)v48, *(_QWORD *)(v48 + 8) = v49, v50 = *v39, *(__int64 **)(*v39 + 8) != v39) )
                {
                  __fastfail(3u);
                }
                *v38 = v50;
                *(_QWORD *)(a1 + 32) = v39;
                *(_QWORD *)(v50 + 8) = v38;
                *v39 = (__int64)v38;
                KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
              }
            }
          }
        }
        PteBase = MmGetPteBase();
      }
      v7 += 4096i64;
      if( !--r8_0 )
        break;
      PteLimit = MmGetPteLimit();
    }
  }
  _m_prefetchw(&LockQueue);
  result = (UINT64)LockQueue.Next;
  if( !LockQueue.Next )
  {
    result = _InterlockedCompareExchange64((volatile signed __int64 *)LockQueue.Lock, 0i64, (signed __int64)&LockQueue);
    if( (_KSPIN_LOCK_QUEUE *)result == &LockQueue )
      goto LABEL_36;
    result = (UINT64)KxWaitForLockChainValid(&LockQueue);
  }
  LockQueue.Next = 0i64;
  _InterlockedXor64((volatile signed __int64 *)(result + 8), 1ui64);
LABEL_36:
  if( v23 )
  {
    v30 = a2;
    if( a2 < (unsigned __int64)PteBase || (result = (UINT64)MmGetPteLimit(), a2 > result) )
    {
      v31 = *(_QWORD *)((char *)MmGetPdeBase() + ((a2 >> 18) & 0x3FFFFFF8));
      v58 = v31;
      MiPteInShadowRange((UINT64)&v58);
      v33 = (UINT64 *)((char *)MmGetPfnDb() + 48 * ((v31 >> 12) & 0xFFFFFFFFFi64));
      result = (unsigned __int64)*(unsigned int *)v33 >> 4;
      if( (result & 0x3FF) == 0 )
      {
        MiCountWslesInPageTable(v32, v30, a3);
        v46 = 8;
        while( 1 )
        {
          result = --v46;
          v47 = *((_DWORD *)a3 + v46);
          if( v47 )
            break;
          if( !v46 )
            return result;
        }
        result = *v33 & 0xFFFFFFFFFFFE000Fui64;
        *v33 = result | (16 * (v47 & 0x3FF | ((unsigned __int64)(v46 & 7) << 10)));
      }
    }
  }
  return result;
}

Referenced by:

MiAllocateWsle
MiEmptyDeferredWorkingSetEntries
MiMakeSystemCacheRangeValid