MiUpdateOldPte

NTSTATUS __fastcall MiUpdateOldPte(UINT64 PurgeTransition, INT64 a2, INT64 a3){
  _MMSUPPORT_INSTANCE *v5; 
  INT64 v6; 
  unsigned __int64 v7; 
  _MMPFN *v8; 
  INT64 v9; 
  unsigned __int64 v10; 
  _UNICODE_STRING *v11; 
  UINT8 v12; 
  wchar_t *v13; 
  __int64 v14; 
  int v15; 
  UINT64 *v16; 
  INT64 v18; 

  if( (int)a3 >= 1 )
    return 0;
  v5 = *(_MMSUPPORT_INSTANCE **)(PurgeTransition + 24);
  LODWORD(v6) = MI_READ_PTE_LOCK_FREE(a2);
  v18 = v6;
  LODWORD(v7) = MI_READ_PTE_LOCK_FREE((INT64)&v18);
  v8 = &MmGetPfnDb()[(v7 >> 12) & 0xFFFFFFFFFi64];
  if( !(unsigned int)MiWalkVaCheckCommon(v5, (_MMPTE *)a2, v8, 1, (__int64)&v18) )
    return 0;
  v10 = ((a2 << 25) - ((_QWORD)MmGetPteBase() << 25)) >> 16;
  if( MiGetVaAge(v9, v10) != 6 )
    return 0;
  v14 = *(_QWORD *)(PurgeTransition + 168);
  if( (v8->u2._bf_0 & 0x3FFFFFFFFFFFFFFFi64) == 1 )
  {
    if( (*(_DWORD *)v14 & 1) == 0 || (LOBYTE(v15) = MI_PFN_IS_PROTO((_UNICODE_STRING *)v8, v11, v12, v13), !v15) )
    {
      if( (((unsigned __int64)v18 >> 5) & 1) != 0
        && (v16 = *(UINT64 **)(v14 + 208)) != 0i64
        && v10 <= 0x7FFFFFFEFFFFi64 )
      {
        if( MiInsertVmAccessedEntry(v16, v10) )
          return MiUpdateOldWorkingSetPagesTail(PurgeTransition);
      }
      else if( (((unsigned __int64)v18 >> 5) & 1) == 0 )
      {
        MiUpdateOldPteWorker(v5, a2, v8);
      }
    }
  }
  if( ++*(_QWORD *)(v14 + 16) >= *(_QWORD *)(v14 + 8) )
    return 3;
  else
    return 0;
}

Referenced by:

No references.