PspGetJobAssignmentDisposition

VOID __stdcall PspGetJobAssignmentDisposition(){
  _EX_RUNDOWN_REF *v0; 
  INT64 v1; 
  _DWORD *v2; 
  _DWORD *v3; 
  _EPROCESS *v4; 
  INT64 v5; 
  _EX_RUNDOWN_REF *v6; 
  INT64 v7; 
  INT64 v8; 
  __int64 v9; 
  __int64 v10; 
  _DWORD *v11; 

  v3 = v2;
  v4 = (_EPROCESS *)v0;
  v5 = v1;
  if( v0 )
  {
    v6 = v0 + 139;
    if( ExAcquireRundownProtection(v0 + 139) )
    {
      if( (v4->Flags & 8) == 0 )
      {
        if( v4->Job )
        {
          if( PspIsProcessInJob(v4, (_EJOB *)v5) == 292 )
          {
            *v3 = 2;
          }
          else
          {
            v7 = v5;
            if( v5 )
            {
              while( (_EJOB *volatile)v7 != v4->Job )
              {
                v7 = *(_QWORD *)(v7 + 1072);
                if( !v7 )
                  goto LABEL_11;
              }
              *v3 = 3;
            }
            else
            {
LABEL_11:
              if( PsIsJobParentImmutable(v5) || *(_DWORD *)(v5 + 212) )
              {
                if( PspIsJobMovable(v8) )
                  *v3 = 5;
              }
              else
              {
                *v3 = 4;
              }
            }
          }
        }
        else
        {
          *v3 = 1;
        }
      }
      ExReleaseRundownProtection(v6);
    }
  }
  else if( !PsIsJobParentImmutable(v1) && !*(_DWORD *)(v9 + 212) && *(_QWORD *)(v9 + 1560) != -1i64 )
  {
    *v11 = (v10 != 0) + 6;
  }
}

Referenced by:

PsAssignProcessToJobObject
PspAssignProcessToJob