PspValidateJobAssignmentProcessLimits

NTSTATUS __stdcall PspValidateJobAssignmentProcessLimits(_EJOB *Job, _EPROCESS *a2, INT64 a3){
  int v3; 
  int v6; 
  int v7; 
  NTSTATUS result; 
  __int64 v9; 

  v3 = a3;
  if( (a2->Flags & 0x4000000) == 0
    || (v9 = *((_QWORD *)Job + 54)) == 0
    || (result = PspCheckJobAccessState(v9, a2), result >= 0) )
  {
    if( *((_DWORD *)Job + 306) == -1 )
      return -1073741756;
    v6 = *((_DWORD *)Job + 64);
    if( (v6 & 8) != 0 && (unsigned int)(v3 + *((_DWORD *)Job + 54) - *((_DWORD *)Job + 307)) > *((_DWORD *)Job + 65) )
    {
      _InterlockedAnd((volatile signed __int32 *)&a2->1120, 0xFFFFFFDF);
      if( *((_QWORD *)Job + 57) && (*((_DWORD *)Job + 219) & 8) != 0 )
        PspSendJobNotification(Job, 3ui64, 0i64, 1u);
      return -1073741756;
    }
    if( (v6 & 4) != 0 && *((_DWORD *)Job + 1) )
      return -1073741756;
    v7 = *((_DWORD *)Job + 330);
    if( (v7 & 0x20000000) != 0 )
      return -1073741811;
    else
      return(v7 & 0x80u) != 0 ? 0xC000010A : 0;
  }
  return result;
}

Referenced by:

PspValidateJobChainLimits