MiUpdateOldPte

INT64 __fastcall MiUpdateOldPte(INT64 a1, UINT64 a2, INT64 a3){
  INT64 v5; 
  UNICODE_STRING *v6; 
  INT64 v7; 
  unsigned __int64 v8; 
  UNICODE_STRING *v9; 
  UINT8 v10; 
  WCHAR *v11; 
  __int64 v12; 
  int v13; 
  UINT64 *v14; 
  INT64 a5; 
  if( (int)a3 >= 1 )
    return 0i64;
  v5 = *(_QWORD *)(a1 + 24);
  a5 = MI_READ_PTE_LOCK_FREE(a2);
  v6 = (UNICODE_STRING *)((char *)MmGetPfnDb()
                        + 48 * (((unsigned __int64)MI_READ_PTE_LOCK_FREE((INT64)&a5) >> 12) & 0xFFFFFFFFFi64));
  if( !(unsigned int)MiWalkVaCheckCommon(v5, a2, v6, 1i64, (INT64)&a5) )
    return 0i64;
  v8 = (__int64)((a2 << 25) - ((_QWORD)MmGetPteBase() << 25)) >> 16;
  if( MiGetVaAge(v7, v8) != 6 )
    return 0i64;
  v12 = *(_QWORD *)(a1 + 168);
  if( ((__int64)v6[1].Buffer & 0x3FFFFFFFFFFFFFFFi64) == 1 )
  {
    if( (*(_DWORD *)v12 & 1) == 0 || (LOBYTE(v13) = MI_PFN_IS_PROTO(v6, v9, v10, v11), !v13) )
    {
      if( (((unsigned __int64)a5 >> 5) & 1) != 0 && (v14 = *(UINT64 **)(v12 + 208)) != 0i64 && v8 <= 0x7FFFFFFEFFFFi64 )
      {
        if( (unsigned int)MiInsertVmAccessedEntry(v14, v8) )
          return MiUpdateOldWorkingSetPagesTail(a1);
      }
      else if( (((unsigned __int64)a5 >> 5) & 1) == 0 )
      {
        MiUpdateOldPteWorker(v5, a2, (INT64)v6);
      }
    }
  }
  if( ++*(_QWORD *)(v12 + 16) >= *(_QWORD *)(v12 + 8) )
    return 3i64;
  else
    return 0i64;
}

Referenced by:

No references.