MmProcessWorkingSetControl

NTSTATUS __stdcall MmProcessWorkingSetControl(
        PVOID ProcessHandle,
        PVOID ProcessInformation,
        UINT64 ProcessInformationLength,
        INT8 PreviousMode){
  unsigned int v6; 
  NTSTATUS result; 
  char *v8; 
  NTSTATUS v9; 
  NTSTATUS v10; 
  CHAR v11; 
  __int64 v12; 
  int v13; 
  PVOID Object[2]; 
  _KAPC_STATE ApcState; 
  Object[1] = ProcessHandle;
  v6 = 0;
  Object[0] = 0i64;
  memset(&ApcState, 0, sizeof(ApcState));
  if( (unsigned int)ProcessInformationLength < 0xC )
    return -1073741820;
  v12 = *(_QWORD *)ProcessInformation;
  v13 = *((_DWORD *)ProcessInformation + 2);
  if( (unsigned int)*(_QWORD *)ProcessInformation != 3 )
    return -1073741735;
  if( HIDWORD(v12) >= 2 )
    return -1073741811;
  if( !HIDWORD(v12) && !SeSinglePrivilegeCheck(*(_QWORD *)&SeDebugPrivilege, PreviousMode) )
    return -1073741727;
  result = ObpReferenceObjectByHandleWithTag(
             (ULONG_PTR)ProcessHandle,
             0x2000,
             (__int64)PsProcessType,
             PreviousMode,
             0x73576D4Du,
             (__int64)Object,
             0i64,
             0i64);
  if( result >= 0 )
  {
    v8 = (char *)Object[0];
    if( *((PVOID *)KeGetCurrentThread() + 23) == Object[0] )
    {
      LODWORD(Object[0]) = 0;
    }
    else
    {
      LODWORD(Object[0]) = 1;
      KiStackAttachProcess((_KPROCESS *)v8, 0i64, &ApcState);
    }
    if( HIDWORD(v12) )
    {
      if( (v13 & 0xFFFFFFC0) == 0 )
      {
        if( ((v13 & 0x20) == 0 || !PreviousMode)
          && (v13 & 1) != ((v13 & 2) == 0)
          && ((v13 & 8) == 0 || (v13 & 2) != 0)
          && ((v13 & 0x10) == 0 || (v13 & 8) != 0) )
        {
          MiLogWsEmptyControl((INT64)(v8 + 1664));
          if( (v13 & 1) != 0 )
          {
            if( (v13 & 8) != 0 )
              SmStoreCompressionStart();
            v9 = MiEmptyWorkingSetPrivatePagesByVa((_MMSUPPORT_INSTANCE *)(v8 + 1664));
            if( (v13 & 8) != 0 )
            {
              LOBYTE(v6) = (v13 & 0x10) != 0;
              SmStoreCompressionStop(v6);
            }
            goto LABEL_20;
          }
          v11 = ((v13 & 0x20) != 0 ? 4 : 0) | 1;
          if( (v13 & 4) == 0 )
            v11 = (v13 & 0x20) != 0 ? 4 : 0;
          v10 = MiEmptyWorkingSet((INT64)(v8 + 1664), v11);
          goto LABEL_40;
        }
        v9 = -1073741637;
LABEL_20:
        if( LODWORD(Object[0]) == 1 )
          KiUnstackDetachProcess(&ApcState, 0i64);
        ObfDereferenceObjectWithTag(v8, 0x73576D4Dui64);
        return v9;
      }
    }
    else if( (v13 & 0xFFFFFFFE) == 0 )
    {
      v10 = PsSwapProcessWorkingSet((ULONG_PTR)v8, (v13 & 1) == 0);
LABEL_40:
      v9 = v10;
      goto LABEL_20;
    }
    v9 = -1073741811;
    goto LABEL_20;
  }
  return result;
}

Referenced by:

NtSetInformationProcess
VmpPauseResumeNotify