MiTrimPte

INT64 __fastcall MiTrimPte(INT64 a1, UINT64 a2, INT64 a3){
  int v3; 
  _MMSUPPORT_INSTANCE *v6; 
  unsigned __int64 v7; 
  unsigned __int64 v8; 
  BOOL v9; 
  __int64 v10; 
  unsigned __int64 v11; 
  __int64 v12; 
  int v13; 
  unsigned __int64 v14; 
  _QWORD *v15; 
  __int64 v16; 
  _MMPTE *PteBase; 
  unsigned int v18; 
  __int64 v19; 
  unsigned int v20; 
  INT64 v21; 
  int v24; 
  v24 = 0;
  v3 = a3;
  v6 = *(_MMSUPPORT_INSTANCE **)(a1 + 24);
  v7 = *(_QWORD *)a2;
  v8 = (__int64)((a2 << 25) - ((_QWORD)MmGetPteBase() << 25)) >> 16;
  v9 = a3 == 0;
  v10 = *(_QWORD *)(a1 + 168);
  v11 = *(_QWORD *)(v10 + 16);
  v12 = *(_QWORD *)(v10 + 8);
  if( v11 == v12 )
    return 3i64;
  v13 = *(_DWORD *)v10;
  if( (*(_DWORD *)v10 & 0x400) != 0
    && ((v13 & 0x800) != 0 && v11 >= 0x100 || v6->WorkingSetSize <= *(_QWORD *)(v10 + 48) - v12) )
  {
    return 3i64;
  }
  if( (v13 & 0x1000) == 0 )
    v6->VmWorkingSetList->NextPteToTrim = (_MMPTE *)MiComputeNextWalkPte(a2, v9);
  v14 = *(_QWORD *)a2;
  MiPteInShadowRange(a2);
  v15 = (_QWORD *)((char *)MmGetPfnDb() + 48 * ((v14 >> 12) & 0xFFFFFFFFFi64));
  if( v3 && ((v15[3] & 0x3FFFFFFFFFFFFFFFi64) != 1 || (unsigned int)MiIsPageTableLocked((INT64)v6, a2)) )
    return 0i64;
  if( (v15[5] & 0x1000000000i64) == 0 )
  {
    v16 = v15[1];
    if( v16 > 0 && (unsigned int)MiDemoteCombinedPte(v6, (_MMPTE *)a2, (_MMPTE *)(v16 | 0x8000000000000000ui64)) == 1 )
      LOBYTE(v7) = MI_READ_PTE_LOCK_FREE(a2);
  }
  PteBase = MmGetPteBase();
  if( v8 < (unsigned __int64)PteBase || v8 > (unsigned __int64)MmGetPteLimit() )
    v18 = HIBYTE(*(_QWORD *)((char *)PteBase + ((v8 >> 9) & 0x7FFFFFFFF8i64))) & 0xF;
  else
    v18 = (*((_DWORD *)MmGetPfnDb()
           + 12
           * (((unsigned __int64)MI_READ_PTE_LOCK_FREE((INT64)PteBase + ((v8 >> 9) & 0x7FFFFFFFF8i64)) >> 12) & 0xFFFFFFFFFi64)) >> 1) & 7;
  v19 = *(_QWORD *)(a1 + 24);
  v20 = *(_DWORD *)v10 & 0xF;
  if( !(unsigned int)MiTrimThisWsle(v19, v8, (__int64)v15, (int *)v10, (v7 & 0x20) != 0, &v24) )
    goto LABEL_26;
  MiInsertTbFlushEntry(v10 + 56, v8, 1i64, 0i64);
  if( (*(_DWORD *)v10 & 0x10) != 0 )
    MI_WSLE_LOG_ACCESS(v19, a2);
  if( ++*(_QWORD *)(v10 + 16) == *(_QWORD *)(v10 + 8) || *(_DWORD *)(v10 + 68) == *(_DWORD *)(v10 + 64) )
  {
    v21 = a1;
    MiTrimWorkingSetBuildup(a1, v10);
    if( *(_QWORD *)(v10 + 16) == *(_QWORD *)(v10 + 8) )
      return 3i64;
  }
  else
  {
LABEL_26:
    v21 = a1;
  }
  if( v24 && (unsigned int)MiInsertVmAccessedEntry(*(UINT64 **)(v10 + 240), v8) )
  {
    MiTrimWorkingSetTail(v21);
    return 0i64;
  }
  if( v18 < v20 )
    return 0i64;
  if( ++*(_QWORD *)(v10 + 32) < *(_QWORD *)(v10 + 40) )
    return 0i64;
  return 3i64;
}

Referenced by:

No references.