MiAgePteWorker

VOID __fastcall MiAgePteWorker(INT64 a1, UINT64 a2, UINT64 a3, INT64 a4, INT64 a5, CHAR a6){
  UINT64 v6; 
  _MMPTE *PteBase; 
  WCHAR *Pml4eBase; 
  UINT8 PxeUserLimit; 
  _MMPFN *PfnDb; 
  _MMPTE *PteLimit; 
  _QWORD *v15; 
  UNICODE_STRING *v16; 
  char v17; 
  INT64 v18; 
  int v19; 
  unsigned __int64 v20; 
  char v21; 
  unsigned int v22; 
  UINT8 v23; 
  int v24; 
  int v25; 
  unsigned __int8 v26; 
  unsigned __int8 v27; 
  INT64 v28; 
  INT64 v29; 
  v6 = a2;
  PteBase = MmGetPteBase();
  Pml4eBase = (WCHAR *)MmGetPml4eBase();
  PxeUserLimit = (unsigned __int8)MmGetPxeUserLimit();
  PfnDb = MmGetPfnDb();
  PteLimit = MmGetPteLimit();
  if( a3 < (unsigned __int64)PteBase || a3 > (unsigned __int64)PteLimit )
  {
    v15 = (_QWORD *)((char *)PteBase + ((a3 >> 9) & 0x7FFFFFFFF8i64));
    v16 = (UNICODE_STRING *)HIBYTE(*v15);
    LOBYTE(v16) = (unsigned __int8)v16 & 0xF;
  }
  else
  {
    v15 = (_QWORD *)((char *)PteBase + ((a3 >> 9) & 0x7FFFFFFFF8i64));
    v16 = (UNICODE_STRING *)*((unsigned __int8 *)PfnDb
                            + 48 * (((unsigned __int64)MI_READ_PTE_LOCK_FREE((INT64)v15) >> 12) & 0xFFFFFFFFFi64));
    LOBYTE(v16) = ((unsigned __int8)v16 >> 1) & 7;
  }
  if( (a6 & 1) != 0 )
  {
    if( (unsigned __int8)((_BYTE)v16 - 1) > 5u )
    {
      if( (_BYTE)v16 == 7 )
      {
LABEL_12:
        v18 = 0i64;
        v19 = 0;
        if( (a6 & 2) != 0 )
        {
          v18 = *(_QWORD *)(a5 + 56);
        }
        else if( (a6 & 4) != 0 )
        {
          v19 = 1;
        }
        LODWORD(v29) = v19;
        LODWORD(v28) = dword_140C4E568;
        if( (unsigned int)MiClearPteAccessed(a1, a4, v6, v18, v28, v29) )
          ++*(_QWORD *)(a5 + 24);
        if( v18 )
        {
          v20 = qword_140C4DCD0;
          if( (*(_BYTE *)(v18 + 4) & 2) == 0
            && *(_DWORD *)v18 == 1
            && *(_QWORD *)(*((_QWORD *)KeGetCurrentThread() + 23) + 2288i64) )
          {
            v20 = -1i64;
          }
          if( (*(_DWORD *)(v18 + 12) >= *(_DWORD *)(v18 + 8) || *(_BYTE *)(v18 + 5) || *(_QWORD *)(v18 + 16) > v20)
            && v20 >= 0x400
            && !*(_BYTE *)(v18 + 5) )
          {
            MiFlushTbList(v18);
          }
        }
        return;
      }
    }
    else
    {
      MiSetVaAgeList(a1, a3, (UINT8 *)1, 0);
    }
    v17 = *(_BYTE *)(a4 + 35);
    if( (v17 & 8) == 0 && (v17 & 7u) < 5 )
    {
      MiLockSetPfnPriority((_MMPFN *)a4, 5ui64);
      v6 = a2;
    }
    goto LABEL_12;
  }
  v21 = *(_BYTE *)(a4 + 35);
  if( (v21 & 8) != 0 )
    v22 = 5;
  else
    v22 = v21 & 7;
  if( (unsigned __int8)v16 < 6u )
  {
    if( v22 < 5 )
    {
      v23 = 6;
LABEL_37:
      MiSetVaAgeList(a1, a3, (UINT8 *)1, v23);
      ++*(_QWORD *)(a5 + 16);
      goto LABEL_38;
    }
    if( (*(_DWORD *)a5 & 1) != 0 )
    {
      v23 = (_BYTE)v16 + 1;
      goto LABEL_37;
    }
  }
LABEL_38:
  LOBYTE(v24) = MI_PFN_IS_PROTO((UNICODE_STRING *)a4, v16, PxeUserLimit, Pml4eBase);
  if( v24 )
    LOBYTE(v25) = *(_BYTE *)(a5 + 5);
  else
    v25 = *(unsigned __int8 *)(a5 + 4);
  v26 = v25;
  if( !(_BYTE)v25 )
    v26 = 7;
  if( (*(_BYTE *)(a1 + 184) & 7) == 3
    && ((*(_QWORD *)(a4 + 40) >> 60) & 7) == 4
    && (*(_QWORD *)(a4 + 24) & 0x3FFFFFFFFFFFFFFFi64) == 1
    && *(_WORD *)(a4 + 32) == 1
    || (*(_DWORD *)a5 & 3) != 0
    && (a3 < (unsigned __int64)MmGetPteBase() || a3 > (unsigned __int64)MmGetPteLimit() ? (v27 = HIBYTE(*v15) & 0xF) : (v27 = (*((_BYTE *)MmGetPfnDb() + 48 * (((unsigned __int64)MI_READ_PTE_LOCK_FREE((INT64)v15) >> 12) & 0xFFFFFFFFFi64)) >> 1) & 7),
        v27 >= v26 || v22 < *(_DWORD *)(a5 + 8)) )
  {
    ++*(_QWORD *)(a5 + 32);
    MiInsertTbFlushEntry(a5 + 64, a3, 1i64, 0i64);
    if( *(_DWORD *)(a5 + 76) == *(_DWORD *)(a5 + 72) )
      MiFreeWsleList(a1, a5 + 64, 0);
  }
}

Referenced by:

MiAgePte
MiAgeWorkingSetEPTCallback
MiSimpleAgePte
MiSimpleAgeWorkingSetEPTCallback