MmUpdateOldWorkingSetPages

NTSTATUS __stdcall MmUpdateOldWorkingSetPages(_EPROCESS *Process, UINT64 Priority, UINT64 Flags){
  char v3; 
  int v4; 
  NTSTATUS v6; 
  int v7; 
  int v8; 
  int v9; 
  bool v10; 
  UINT8 v11; 
  INT64 result; 
  int v15; 
  __int16 v16; 
  __int64 v17; 
  __int64 v18; 
  __int64 v19; 
  INT64 *v20; 
  _WORD v21[2]; 
  char v22; 
  UINT8 v23; 
  __int64 v24; 
  __int64 v25; 
  INT64(__fastcall *v26)(INT64, UINT64, INT64); 
  UINT64(__stdcall *v27)(UINT64); 
  INT64 *p_result; 
  _KAPC_STATE ApcState; 
  _DWORD v30[68]; 
  v3 = Flags;
  v4 = Priority;
  memset(&ApcState, 0, sizeof(ApcState));
  memset((INT64)&result, 0i64);
  memset((INT64)v21, 0i64);
  memset((INT64)v30, 0i64);
  v6 = 0;
  if( *((_EPROCESS **)KeGetCurrentThread() + 23) == Process )
  {
    v7 = 0;
  }
  else
  {
    v7 = 1;
    KiStackAttachProcess((_KPROCESS *)Process, 0i64, &ApcState);
  }
  v8 = result;
  if( (v3 & 2) != 0 )
  {
    v8 = result | 1;
    LODWORD(result) = result | 1;
  }
  if( (v3 & 1) != 0 )
    LODWORD(result) = v8 | 2;
  HIDWORD(result) = v4;
  v17 = 20i64;
  v9 = MiTbFlushType((INT64)Process + 1664);
  v10 = (*((_BYTE *)Process + 1848) & 7) == 0;
  v15 = v9;
  v16 = 4;
  v18 = 0i64;
  v19 = 0i64;
  if( v10 && *((_QWORD *)Process + 286) )
  {
    v30[1] = 32;
    v20 = (INT64 *)v30;
  }
  v25 = -1i64;
  p_result = &result;
  v21[0] = 6;
  v26 = MiUpdateOldPte;
  v22 = 6;
  v27 = MiUpdateOldWorkingSetPagesTail;
  v24 = (__int64)Process + 1664;
  v11 = MiLockWorkingSetShared((INT64)Process + 1664);
  v23 = v11;
  if( (*((_DWORD *)Process + 281) & 0x20) != 0 )
  {
    v6 = -1073741558;
  }
  else if( *((_QWORD *)Process + 219) )
  {
    MiWalkPageTables((INT64)v21);
    v11 = v23;
  }
  MiUnlockWorkingSetShared((INT64)Process + 1664, v11);
  if( v7 == 1 )
    KiUnstackDetachProcess(&ApcState, 0i64);
  return v6;
}

Referenced by:

PfpDeprioritizeOldPagesInWs