MmUpdateOldWorkingSetPages

VOID __fastcall MmUpdateOldWorkingSetPages(_EPROCESS *Process, UINT64 Priority, UINT64 Flags){
  char v3; 
  int v4; 
  int v6; 
  int v7; 
  _KTBFLUSH_TYPE v8; 
  bool v9; 
  char v10; 
  UINT64 v11; 
  __int64 v12[28]; 
  INT64 v13[22]; 
  _KAPC_STATE ApcState; 
  int v15[68]; 

  v3 = Flags;
  v4 = Priority;
  memset(&ApcState, 0, sizeof(ApcState));
  memset(v12, 0i64, 0xD8u);
  memset(v13, 0i64, sizeof(v13));
  memset(v15, 0i64, 0x108u);
  if( KeGetCurrentThread()->ApcState.Process == Process )
  {
    v6 = 0;
  }
  else
  {
    v6 = 1;
    KiStackAttachProcess(Process, 0i64, &ApcState);
  }
  v7 = v12[0];
  if( (v3 & 2) != 0 )
  {
    v7 = LODWORD(v12[0]) | 1;
    LODWORD(v12[0]) |= 1u;
  }
  if( (v3 & 1) != 0 )
    LODWORD(v12[0]) = v7 | 2;
  HIDWORD(v12[0]) = v4;
  v12[4] = 20i64;
  v8 = MiTbFlushType(&Process->Vm.Instance);
  v9 = (Process->Vm.Instance.Flags._bf_0 & 7) == 0;
  LODWORD(v12[3]) = v8;
  WORD2(v12[3]) = 4;
  v12[5] = 0i64;
  v12[6] = 0i64;
  if( v9 && Process->VmContext )
  {
    v15[1] = 32;
    v12[26] = (__int64)v15;
  }
  v13[5] = -1i64;
  v13[21] = (INT64)v12;
  LOWORD(v13[0]) = 6;
  v13[19] = (INT64)MiUpdateOldPte;
  BYTE4(v13[0]) = 6;
  v13[20] = (INT64)MiUpdateOldWorkingSetPagesTail;
  v13[3] = (INT64)&Process->Vm;
  MiLockWorkingSetShared();
  LOBYTE(v11) = v10;
  BYTE6(v13[0]) = v10;
  if( (Process->Flags & 0x20) == 0 )
  {
    v12[1] = Process->Vm.Instance.AgeDistribution[6];
    if( v12[1] )
    {
      MiWalkPageTables((INT64)v13);
      LOBYTE(v11) = BYTE6(v13[0]);
    }
  }
  MiUnlockWorkingSetShared(&Process->Vm.Instance, v11);
  if( v6 == 1 )
    KiUnstackDetachProcess(&ApcState, 0i64);
}

Referenced by:

PfpDeprioritizeOldPagesInWs