PspApplyWorkingSetLimitsToProcess

NTSTATUS __stdcall PspApplyWorkingSetLimitsToProcess(_EPROCESS *Process){
  _ETHREAD *CurrentThread; 
  _EJOB *volatile Job; 
  int v4; 
  INT64 v5; 
  unsigned int v6; 
  _PEB *Peb; 
  volatile signed __int32 *v8; 
  _EWOW64PROCESS *WoW64Process; 
  UINT64 WorkingSetMinimumInBytes; 
  UINT64 WorkingSetMaximumInBytes; 
  _KAPC_STATE ApcState; 

  memset(&ApcState, 0, sizeof(ApcState));
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  Job = Process->Job;
  v4 = 0;
  KiStackAttachProcess(Process, 0i64, &ApcState);
  --CurrentThread->Tcb.SpecialApcDisable;
  ExAcquireResourceExclusiveLite((UINT64)Job + 56, 1, v5);
  WorkingSetMinimumInBytes = *((_QWORD *)Job + 99);
  WorkingSetMaximumInBytes = *((_QWORD *)Job + 100);
  v6 = ((*((_DWORD *)Job + 212) & 1) == 0) + 1;
  ExAcquirePushLockExclusiveEx(&stru_140C130B0, 0i64);
  _InterlockedOr((volatile signed __int32 *)Job + 330, 0x100u);
  ExReleaseResourceLite((PERESOURCE)((char *)Job + 56));
  if( v6 == 2 || (v4 = MmAdjustWorkingSetSize(WorkingSetMinimumInBytes, WorkingSetMaximumInBytes, 0i64, 1u), v4 >= 0) )
  {
    MmEnforceWorkingSetLimit(Process, v6);
    _InterlockedAnd((volatile signed __int32 *)Job + 330, 0xFFFFFEFF);
    if( (_InterlockedExchangeAdd64(&stru_140C130B0._bf_0, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
      ExfTryToWakePushLock(&stru_140C130B0);
    KeAbPostRelease(&stru_140C130B0);
    KiLeaveGuardedRegionUnsafe((__int64)CurrentThread);
    Peb = Process->Peb;
    if( Peb )
    {
      if( (Process->Flags & 8) != 0 )
      {
        v4 = 0;
      }
      else if( ExAcquireRundownProtection(&Process->RundownProtect) )
      {
        v8 = 0i64;
        WoW64Process = Process->WoW64Process;
        if( WoW64Process )
          v8 = (volatile signed __int32 *)WoW64Process->Peb;
        _interlockedbittestandset((volatile signed __int32 *)&Peb->80, 0);
        if( v8 )
          _interlockedbittestandset(v8 + 10, 0);
        ExReleaseRundownProtection(&Process->RundownProtect);
      }
      else
      {
        v4 = -1073741558;
      }
    }
  }
  else
  {
    _InterlockedAnd((volatile signed __int32 *)Job + 330, 0xFFFFFEFF);
    if( (_InterlockedExchangeAdd64(&stru_140C130B0._bf_0, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
      ExfTryToWakePushLock(&stru_140C130B0);
    KeAbPostRelease(&stru_140C130B0);
    KiLeaveGuardedRegionUnsafe((__int64)CurrentThread);
  }
  KiUnstackDetachProcess(&ApcState, 0i64);
  return v4;
}

Referenced by:

PspAssignProcessToJob
PspImplicitAssignProcessToJob