PspEnforceLimitsJobPostCallback

INT64 __fastcall PspEnforceLimitsJobPostCallback(INT64 a1, INT64 a2){
  _ETHREAD *CurrentThread; 
  int v4; 
  __int64 v6; 
  __int64 v7; 
  __int128 v8; 
  __int64 v9; 
  __int64 v10; 
  __int64 v11; 
  __int128 v12; 
  __int128 v13; 
  __int128 v14; 
  __int64 v15; 
  __int32 v16; 
  int v17; 
  int v18; 
  __int32 v19; 
  int v20; 
  int v21; 
  __int64 v22; 
  UINT64 v23; 
  bool v24; 
  __int64 v25; 
  __int64 v26; 
  __int64 v27; 
  __int128 v29; 
  __int128 v30; 
  __int128 v31; 
  __int64 v32; 
  _QWORD *v33; 
  int v34; 
  __int64 v35; 
  int v36; 
  int v37; 
  __int64 v38; 
  int v39; 
  int v40; 
  __int64 v41; 
  int v42; 
  int v43; 
  int v44; 
  int v45; 
  int v46; 
  int v47; 
  ULONG_PTR v48; 
  __int64 v49; 
  int v50; 
  __int64 v51; 
  int v52; 
  unsigned __int64 v53; 
  UINT64 SystemNoWakeCharge; 
  UINT64 NoWakeCharge; 
  __int64 v56; 
  __int64 v57[3]; 
  __int128 v58; 
  __int128 v59; 
  __int128 v60; 
  __int128 v61; 
  __int128 v62; 
  __int128 v63; 
  __int64 v64; 
  INT64 result[2]; 
  __m256i v66; 
  __int128 v67; 
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v4 = 0;
  v51 = (__int64)CurrentThread;
  NoWakeCharge = 0i64;
  SystemNoWakeCharge = 0i64;
  PspLockJobShared(a1, (__int64)CurrentThread);
  v6 = *(_QWORD *)(a1 + 984);
  if( v6 )
  {
    v29 = *(_OWORD *)(v6 + 24);
    *(_OWORD *)result = *(_OWORD *)(v6 + 8);
    v30 = *(_OWORD *)(v6 + 40);
    *(_OWORD *)v66.m256i_i8 = v29;
    v31 = *(_OWORD *)(v6 + 56);
    *(_OWORD *)&v66.m256i_u64[2] = v30;
    v67 = v31;
  }
  else
  {
    memset((INT64)result, 0i64);
  }
  v7 = *(_QWORD *)(a1 + 184);
  v8 = *(_OWORD *)(a1 + 1136);
  v9 = *(_QWORD *)(a1 + 512);
  v10 = *(_QWORD *)(a1 + 520);
  v11 = *(_QWORD *)(a1 + 160);
  v58 = *(_OWORD *)(a1 + 1120);
  v12 = *(_OWORD *)(a1 + 1152);
  v56 = v7;
  LODWORD(v7) = *(_DWORD *)(a1 + 452);
  v59 = v8;
  v13 = *(_OWORD *)(a1 + 1168);
  v52 = v7;
  LODWORD(v7) = *(_DWORD *)(a1 + 256);
  v60 = v12;
  v61 = v13;
  v14 = *(_OWORD *)(a1 + 1200);
  v62 = *(_OWORD *)(a1 + 1184);
  v64 = *(_QWORD *)(a1 + 1216);
  v63 = v14;
  if( (v7 & 4) != 0 )
    v53 = *(_QWORD *)(a1 + 232);
  else
    v53 = 0i64;
  PspGetEffectiveNoWakeCharge((_EJOB *)a1, &NoWakeCharge, &SystemNoWakeCharge);
  PspUnlockJob(v15, (__int64)CurrentThread);
  v50 = 0;
  if( result[0] )
  {
    if( (unsigned __int64)(v9 + v62) > result[0] )
      v4 = 0x10000;
    v50 = v4;
  }
  if( result[1] && (unsigned __int64)(v10 + *((_QWORD *)&v62 + 1)) > result[1] )
  {
    v4 |= 0x20000u;
    v50 = v4;
  }
  if( v66.m256i_i64[0] && (unsigned __int64)(v11 + *((_QWORD *)&v58 + 1)) > v66.m256i_i64[0] )
  {
    v4 |= 4u;
    v50 = v4;
  }
  if( *(_OWORD *)&v66.m256i_u64[1] != 0i64 )
  {
    PspLockJobMemoryLimitsShared(a1, (__int64)CurrentThread);
    v50 = PspGetJobMemoryUsageNotificationViolations(
            a1,
            *(_QWORD *)(a1 + 976),
            *(_QWORD *)(a1 + 976) + *(_QWORD *)(a1 + 1336),
            33280) | v4;
    PspUnlockJobMemoryLimitsShared(a1, (__int64)CurrentThread);
  }
  v16 = v66.m256i_i32[6];
  v17 = DWORD1(v67);
  if( v66.m256i_i32[6] && *(_DWORD *)(a2 + 32) == DWORD1(v67) && *(_DWORD *)(a2 + 44) >= v66.m256i_i32[6] )
  {
    v18 = PspRateControlLimitFlag(0i64) | v50;
    v50 = v18;
  }
  else
  {
    v18 = v50;
  }
  v19 = v66.m256i_i32[7];
  if( v66.m256i_i32[7] && *(_DWORD *)(a2 + 36) == DWORD2(v67) && *(_DWORD *)(a2 + 48) >= v66.m256i_i32[7] )
  {
    v43 = PspRateControlLimitFlag(1i64);
    v18 = v43 | v44;
    v50 = v18;
  }
  v20 = v67;
  v21 = HIDWORD(v67);
  if( (_DWORD)v67 && *(_DWORD *)(a2 + 40) == HIDWORD(v67) && *(_DWORD *)(a2 + 52) >= (unsigned int)v67 )
  {
    v45 = PspRateControlLimitFlag(2i64);
    v18 = v45 | v46;
    v50 = v18;
  }
  if( v18 )
  {
    PspLockJobExclusive(a1, v51);
    v32 = *(_QWORD *)(a1 + 984);
    if( v32 )
    {
      *(_DWORD *)(v32 + 4) |= v50;
      v33 = *(_QWORD **)(a1 + 984);
      if( (v50 & 0x10000) != 0 )
        v33[9] = result[0];
      if( (v50 & 0x20000) != 0 )
        v33[10] = result[1];
      if( (v50 & 4) != 0 )
        v33[11] = v66.m256i_i64[0];
      if( (v50 & 0x200) != 0 )
        v33[13] = v66.m256i_i64[2];
      if( (v50 & 0x8000) != 0 )
        v33[12] = v66.m256i_i64[1];
      v34 = PspRateControlLimitFlag(0i64);
      if( (v34 & v36) != 0 )
      {
        *(_DWORD *)(v35 + 112) = v16;
        *(_DWORD *)(v35 + 124) = v17;
      }
      v37 = PspRateControlLimitFlag(1i64);
      if( (v37 & v39) != 0 )
      {
        v47 = DWORD2(v67);
        *(_DWORD *)(v38 + 116) = v19;
        *(_DWORD *)(v38 + 128) = v47;
      }
      v40 = PspRateControlLimitFlag(2i64);
      if( (v40 & v42) != 0 )
      {
        *(_DWORD *)(v41 + 120) = v20;
        *(_DWORD *)(v41 + 132) = v21;
      }
    }
    if( *(_QWORD *)(a1 + 456) && (*(_DWORD *)(a1 + 876) & 0x800) != 0 && (*(_DWORD *)(a1 + 1320) & 4) == 0 )
      PspSendReliableJobNotification((_EJOB *)a1, 0xBui64);
    PspUnlockJob(a1, v51);
  }
  v22 = *(_QWORD *)(a2 + 16);
  if( v22 )
  {
    if( (*(_DWORD *)(v22 + 1120) & 1) == 0 )
    {
      _InterlockedAnd((volatile signed __int32 *)(v22 + 1120), 0xFFFFFFDF);
      v48 = *(_QWORD *)(a2 + 16);
      v57[0] = *(_QWORD *)(a2 + 8);
      v57[1] = 2i64;
      v57[2] = *(_QWORD *)(v48 + 1088);
      PspRemoveProcessFromJobChain(v48, v57, 14, 0xC0000044);
      v22 = *(_QWORD *)(a2 + 16);
    }
    HalPutDmaAdapter((PADAPTER_OBJECT)v22);
  }
  if( v53 && *((_QWORD *)&v58 + 1) + v56 > v53 )
  {
    if( v52 )
    {
      if( v52 != 1 )
        goto LABEL_17;
      v49 = v51;
      PspLockJobShared(a1, v51);
      if( !*(_QWORD *)(a1 + 456) || (*(_DWORD *)(a1 + 876) & 2) == 0 )
      {
        PspUnlockJob(a1, v51);
        PspTerminateAllProcessesInJobHierarchy((_EJOB *)a1, 3221225540i64, 1u);
        goto LABEL_17;
      }
      if( PspSendJobNotification((_EJOB *)a1, 1ui64, 0i64, 0) >= 0 )
      {
        *(_DWORD *)(a1 + 256) &= ~4u;
        *(_QWORD *)(a1 + 232) = 0i64;
      }
    }
    else
    {
      if( !PspTerminateAllProcessesInJobHierarchy((_EJOB *)a1, 3221225540i64, 1u) )
        goto LABEL_17;
      v49 = v51;
      PspLockJobExclusive(a1, v51);
      if( !*(_DWORD *)(a1 + 216) && *(_QWORD *)(a1 + 456) && (*(_DWORD *)(a1 + 876) & 2) != 0 )
        PspSendJobNotification((_EJOB *)a1, 1ui64, 0i64, 0);
    }
    PspUnlockJob(a1, v49);
  }
LABEL_17:
  v23 = *(_QWORD *)(a2 + 24) + SystemNoWakeCharge;
  v24 = *(_BYTE *)(a2 + 56) == 0;
  *(_QWORD *)(a2 + 24) = v23;
  if( v24 )
  {
    if( v23 >= (unsigned int)PspSystemNoWakeChargeLimit )
    {
      PspSendNoWakeChargeLimitNotification(0i64);
      *(_BYTE *)(a2 + 56) = 1;
    }
    else if( NoWakeCharge >= (unsigned int)PspJobNoWakeChargeLimit )
    {
      PspSendNoWakeChargeLimitNotification((_EJOB *)a1);
    }
  }
  v25 = *(_QWORD *)(a1 + 1072);
  if( v25 )
  {
    PspLockJobExclusive(v25, v51);
    PspLockJobExclusive(a1, v51);
    PspAddAccountingValues((_QWORD *)(*(_QWORD *)(a1 + 1072) + 1120i64), (CHAR *)(a1 + 1120));
    memset(a1 + 1120, 0i64);
    PspUnlockJob(a1, v51);
    v27 = *(_QWORD *)(a1 + 1072);
    v26 = v51;
  }
  else
  {
    PspLockJobExclusive(a1, v51);
    memset(a1 + 1120, 0i64);
    v26 = v51;
    v27 = a1;
  }
  PspUnlockJob(v27, v26);
  return 0i64;
}

Referenced by:

No references.