PspSetEffectiveJobLimits

VOID __stdcall PspSetEffectiveJobLimits(_EJOB *Job, _PSP_SET_JOB_LIMITS_CONTEXT *SetLimitsContext){
  __int64 v4; 
  UINT8 v5; 
  int v6; 
  unsigned int v7; 
  __int64 v8; 
  unsigned __int8 v9; 
  _PSP_SET_JOB_LIMITS_CONTEXT *v10; 
  int v11; 
  int v12; 
  unsigned __int64 v13; 
  __int64 v14; 
  char *v15; 
  _KAFFINITY_EX *p_Result; 
  char *v17; 
  __int64 v18; 
  unsigned __int8 v19; 
  unsigned int v20; 
  __int64 v21; 
  unsigned __int64 v22; 
  __int64 v23; 
  __int64 v24; 
  unsigned __int64 v25; 
  _OWORD *v26; 
  unsigned int v27; 
  unsigned __int64 v28; 
  __int64 v29; 
  _KAFFINITY_EX Result; 

  memset(&Result, 0i64, sizeof(Result));
  v4 = *((_QWORD *)Job + 134);
  v5 = PspSetEffectiveLimit(0x10ui64, SetLimitsContext);
  v7 = v6 - 15;
  v8 = (unsigned int)(v6 + 112);
  if( v5 )
  {
    if( ((unsigned __int8)*((_DWORD *)Job + 64) & (unsigned __int8)v6) != 0 )
    {
      if( !v4 || (v26 = (_OWORD *)(v4 + 616), KeIsEmptyAffinityEx((WORD *)(v4 + 616))) )
      {
        v15 = (char *)Job + 616;
        p_Result = (_KAFFINITY_EX *)((char *)Job + 264);
      }
      else
      {
        KeAndAffinityEx((UINT16 *)(v4 + 616), (UINT16 *)Job + 132, (INT8 *)&Result);
        if( !KeIsEqualAffinityEx((UINT16 *)Job + 132, &Result.Count) || KeIsEmptyAffinityEx(&Result.Count) )
        {
          *(_OWORD *)((char *)Job + 616) = *v26;
          *(_OWORD *)((char *)Job + 632) = *(_OWORD *)(v4 + 632);
          *(_OWORD *)((char *)Job + 648) = *(_OWORD *)(v4 + 648);
          *(_OWORD *)((char *)Job + 664) = *(_OWORD *)(v4 + 664);
          *(_OWORD *)((char *)Job + 680) = *(_OWORD *)(v4 + 680);
          *(_OWORD *)((char *)Job + 696) = *(_OWORD *)(v4 + 696);
          *(_OWORD *)((char *)Job + 712) = *(_OWORD *)(v4 + 712);
          v17 = (char *)Job + v8 + 616;
          *((_OWORD *)v17 - 1) = *(_OWORD *)(v4 + 728);
          *(_OWORD *)v17 = *(_OWORD *)((char *)v26 + v8);
          *((_OWORD *)v17 + 1) = *(_OWORD *)((char *)v26 + v8 + 16);
          v18 = *(_QWORD *)((char *)v26 + v8 + 32);
          goto LABEL_18;
        }
        v15 = (char *)Job + 616;
        p_Result = &Result;
      }
    }
    else
    {
      v15 = (char *)Job + 616;
      if( !v4 )
      {
        *((_DWORD *)Job + 155) = 0;
        *(_DWORD *)v15 = 1310721;
        memset((char *)Job + 624, 0i64, 0xA0u);
        goto LABEL_2;
      }
      p_Result = (_KAFFINITY_EX *)(v4 + 616);
    }
    *(_OWORD *)v15 = *(_OWORD *)&p_Result->Count;
    *((_OWORD *)v15 + 1) = *(_OWORD *)&p_Result->Bitmap[1];
    *((_OWORD *)v15 + 2) = *(_OWORD *)&p_Result->Bitmap[3];
    *((_OWORD *)v15 + 3) = *(_OWORD *)&p_Result->Bitmap[5];
    *((_OWORD *)v15 + 4) = *(_OWORD *)&p_Result->Bitmap[7];
    *((_OWORD *)v15 + 5) = *(_OWORD *)&p_Result->Bitmap[9];
    *((_OWORD *)v15 + 6) = *(_OWORD *)&p_Result->Bitmap[11];
    v17 = &v15[v8];
    *((_OWORD *)v17 - 1) = *(_OWORD *)&p_Result->Bitmap[13];
    *(_OWORD *)v17 = *(_OWORD *)((char *)&p_Result->Count + v8);
    *((_OWORD *)v17 + 1) = *(_OWORD *)((char *)&p_Result->Bitmap[1] + v8);
    v18 = *(unsigned __int64 *)((char *)&p_Result->Bitmap[3] + v8);
LABEL_18:
    *((_QWORD *)v17 + 4) = v18;
  }
LABEL_2:
  if( PspSetEffectiveLimit(0x20ui64, SetLimitsContext) )
  {
    if( v4 )
      v19 = *(_BYTE *)(v4 + 872);
    else
      v19 = 0;
    if( ((unsigned __int8)*((_DWORD *)Job + 64) & v9) != 0
      && *((_BYTE *)&PspPriorityClassRank + v19) >= *((_BYTE *)&PspPriorityClassRank + *((unsigned __int8 *)Job + 873)) )
    {
      v19 = *((_BYTE *)Job + 873);
    }
    *((_BYTE *)Job + 872) = v19;
  }
  if( PspSetEffectiveLimit((unsigned int)v8, SetLimitsContext) )
  {
    if( v4 )
      v20 = *(_DWORD *)(v4 + 852);
    else
      v20 = 10;
    if( ((unsigned __int8)*((_DWORD *)Job + 64) & (unsigned __int8)v8) != 0
      && (v27 = *((_DWORD *)Job + 121), v27 < v20) )
    {
      *((_DWORD *)Job + 213) = v27;
    }
    else
    {
      *((_DWORD *)Job + 213) = v20;
    }
  }
  if( PspSetEffectiveLimit(v7, v10) )
  {
    if( v4 )
    {
      v21 = *(_QWORD *)(v4 + 792);
      v22 = *(_QWORD *)(v4 + 800);
    }
    else
    {
      v21 = 0i64;
      v22 = 0i64;
    }
    if( ((unsigned __int8)*((_DWORD *)Job + 64) & (unsigned __int8)v7) == 0
      || (v28 = *((_QWORD *)Job + 31), v28 >= v22) && v22 )
    {
      *((_QWORD *)Job + 100) = v22;
      *((_QWORD *)Job + 99) = v21;
    }
    else
    {
      *((_QWORD *)Job + 100) = v28;
      *((_QWORD *)Job + 99) = *((_QWORD *)Job + 30);
    }
  }
  if( PspSetEffectiveLimit(0x100ui64, SetLimitsContext) )
  {
    if( v4 )
    {
      v13 = *(_QWORD *)(v4 + 808);
      v14 = *(_QWORD *)(v4 + 816);
    }
    else
    {
      v13 = 0i64;
      v14 = 0i64;
    }
    if( (v11 & *((_DWORD *)Job + 64)) == 0 || (v25 = *((_QWORD *)Job + 72), v25 >= v13) && v13 )
    {
      *((_QWORD *)Job + 101) = v13;
      *((_QWORD *)Job + 102) = v14;
    }
    else
    {
      *((_QWORD *)Job + 101) = v25;
      *((_QWORD *)Job + 102) = Job;
    }
  }
  if( PspSetEffectiveLimit(2ui64, SetLimitsContext) )
  {
    if( v4 )
    {
      v23 = *(_QWORD *)(v4 + 784);
      v24 = *(_QWORD *)(v4 + 824);
    }
    else
    {
      v23 = 0i64;
      v24 = 0i64;
    }
    if( (*((_DWORD *)Job + 64) & 2) == 0 || (v29 = *((_QWORD *)Job + 28), v29 >= v23) && v23 )
    {
      *((_QWORD *)Job + 98) = v23;
      *((_QWORD *)Job + 103) = v24;
    }
    else
    {
      *((_QWORD *)Job + 98) = v29;
      *((_QWORD *)Job + 103) = Job;
    }
  }
  v12 = *((_DWORD *)Job + 64);
  *((_DWORD *)Job + 212) = v12;
  if( v4 )
    *((_DWORD *)Job + 212) = v12 | *(_DWORD *)(v4 + 848);
}

Referenced by:

PspEstablishJobHierarchy
PspSetJobLimitsJobPreCallback