MmProcessWorkingSetControl

NTSTATUS __stdcall MmProcessWorkingSetControl(
        VOID *ProcessHandle,
        VOID *ProcessInformation,
        UINT64 ProcessInformationLength,
        _KPROCESSOR_MODE PreviousMode){
  CHAR v4; 
  unsigned int v6; 
  NTSTATUS result; 
  char *v8; 
  UINT64 v9; 
  NTSTATUS v10; 
  NTSTATUS v11; 
  NTSTATUS v12; 
  UINT8 v13; 
  UINT64 Tag; 
  __int64 v15; 
  unsigned int ControlFlags; 
  PVOID Process[2]; 
  _KAPC_STATE ApcState; 

  v4 = PreviousMode;
  Process[1] = ProcessHandle;
  v6 = 0;
  Process[0] = 0i64;
  memset(&ApcState, 0, sizeof(ApcState));
  if( (unsigned int)ProcessInformationLength < 0xC )
    return -1073741820;
  v15 = *(_QWORD *)ProcessInformation;
  ControlFlags = *((_DWORD *)ProcessInformation + 2);
  if( (unsigned int)*(_QWORD *)ProcessInformation != 3 )
    return -1073741735;
  if( HIDWORD(v15) >= 2 )
    return -1073741811;
  if( !HIDWORD(v15) && !SeSinglePrivilegeCheck(*(_QWORD *)&SeDebugPrivilege, PreviousMode) )
    return -1073741727;
  LODWORD(Tag) = 1935109453;
  result = ObpReferenceObjectByHandleWithTag(
             ProcessHandle,
             0x2000ui64,
             (_OBJECT_TYPE *)PsProcessType,
             v4,
             Tag,
             Process,
             0i64,
             0i64);
  if( result >= 0 )
  {
    v8 = (char *)Process[0];
    if( KeGetCurrentThread()->ApcState.Process == Process[0] )
    {
      LODWORD(Process[0]) = 0;
    }
    else
    {
      LODWORD(Process[0]) = 1;
      KiStackAttachProcess(v8, 0i64, &ApcState);
    }
    if( HIDWORD(v15) )
    {
      if( (ControlFlags & 0xFFFFFFC0) == 0 )
      {
        if( ((ControlFlags & 0x20) == 0 || !v4)
          && (ControlFlags & 1) != ((ControlFlags & 2) == 0)
          && ((ControlFlags & 8) == 0 || (ControlFlags & 2) != 0)
          && ((ControlFlags & 0x10) == 0 || (ControlFlags & 8) != 0) )
        {
          MiLogWsEmptyControl((_MMSUPPORT_INSTANCE *)(v8 + 1664), ControlFlags);
          if( (ControlFlags & 1) != 0 )
          {
            if( (ControlFlags & 8) != 0 )
              SmStoreCompressionStart();
            MiEmptyWorkingSetPrivatePagesByVa((_MMSUPPORT_INSTANCE *)(v8 + 1664));
            v11 = v10;
            if( (ControlFlags & 8) != 0 )
            {
              LOBYTE(v6) = (ControlFlags & 0x10) != 0;
              SmStoreCompressionStop(v6);
            }
            goto LABEL_20;
          }
          v13 = ((ControlFlags & 0x20) != 0 ? 4 : 0) | 1;
          if( (ControlFlags & 4) == 0 )
            v13 = (ControlFlags & 0x20) != 0 ? 4 : 0;
          v12 = MiEmptyWorkingSet((_MMSUPPORT_INSTANCE *)(v8 + 1664), v13, v9);
          goto LABEL_40;
        }
        v11 = -1073741637;
LABEL_20:
        if( LODWORD(Process[0]) == 1 )
          KiUnstackDetachProcess(&ApcState, 0i64);
        ObfDereferenceObjectWithTag(v8, 0x73576D4Dui64);
        return v11;
      }
    }
    else if( (ControlFlags & 0xFFFFFFFE) == 0 )
    {
      v12 = PsSwapProcessWorkingSet(v8, (ControlFlags & 1) == 0);
LABEL_40:
      v11 = v12;
      goto LABEL_20;
    }
    v11 = -1073741811;
    goto LABEL_20;
  }
  return result;
}

Referenced by:

NtSetInformationProcess
VmpPauseResumeNotify