PspSetEffectiveJobLimits
char __fastcall PspSetEffectiveJobLimits(__int64 a1, _DWORD *a2){
__int64 v4;
char v5;
int v6;
int v7;
__int64 v8;
unsigned __int8 v9;
_DWORD *v10;
int v11;
__int64 v12;
int v13;
unsigned __int64 v14;
__int64 v15;
__int64 v16;
INT64 *v17;
__int64 v18;
__int64 v19;
unsigned __int8 v20;
unsigned int v21;
__int64 v22;
unsigned __int64 v23;
__int64 v24;
unsigned __int64 v25;
_OWORD *v26;
unsigned int v27;
unsigned __int64 v28;
__int64 v29;
INT64 result[22];
memset((INT64)result, 0i64);
v4 = *(_QWORD *)(a1 + 1072);
v5 = PspSetEffectiveLimit(16, a2);
v7 = v6 - 15;
v8 = (unsigned int)(v6 + 112);
if( v5 )
{
if( ((unsigned __int8)*(_DWORD *)(a1 + 256) & (unsigned __int8)v6) != 0 )
{
if( !v4 || (v26 = (_OWORD *)(v4 + 616), (unsigned int)KeIsEmptyAffinityEx((_WORD *)(v4 + 616))) )
{
v16 = a1 + 616;
v17 = (INT64 *)(a1 + 264);
}
else
{
KeAndAffinityEx((_KAFFINITY_EX *)(v4 + 616), (_KAFFINITY_EX *)(a1 + 264), (_KAFFINITY_EX *)result);
if( !(unsigned int)KeIsEqualAffinityEx((unsigned __int16 *)(a1 + 264), (unsigned __int16 *)result)
|| (unsigned int)KeIsEmptyAffinityEx(result) )
{
*(_OWORD *)(a1 + 616) = *v26;
*(_OWORD *)(a1 + 632) = *(_OWORD *)(v4 + 632);
*(_OWORD *)(a1 + 648) = *(_OWORD *)(v4 + 648);
*(_OWORD *)(a1 + 664) = *(_OWORD *)(v4 + 664);
*(_OWORD *)(a1 + 680) = *(_OWORD *)(v4 + 680);
*(_OWORD *)(a1 + 696) = *(_OWORD *)(v4 + 696);
*(_OWORD *)(a1 + 712) = *(_OWORD *)(v4 + 712);
v18 = v8 + a1 + 616;
*(_OWORD *)(v18 - 16) = *(_OWORD *)(v4 + 728);
*(_OWORD *)v18 = *(_OWORD *)((char *)v26 + v8);
*(_OWORD *)(v18 + 16) = *(_OWORD *)((char *)v26 + v8 + 16);
v19 = *(_QWORD *)((char *)v26 + v8 + 32);
goto LABEL_18;
}
v16 = a1 + 616;
v17 = result;
}
}
else
{
v16 = a1 + 616;
if( !v4 )
{
*(_DWORD *)(a1 + 620) = 0;
*(_DWORD *)v16 = 1310721;
memset(a1 + 624, 0i64);
goto LABEL_2;
}
v17 = (INT64 *)(v4 + 616);
}
*(_OWORD *)v16 = *(_OWORD *)v17;
*(_OWORD *)(v16 + 16) = *((_OWORD *)v17 + 1);
*(_OWORD *)(v16 + 32) = *((_OWORD *)v17 + 2);
*(_OWORD *)(v16 + 48) = *((_OWORD *)v17 + 3);
*(_OWORD *)(v16 + 64) = *((_OWORD *)v17 + 4);
*(_OWORD *)(v16 + 80) = *((_OWORD *)v17 + 5);
*(_OWORD *)(v16 + 96) = *((_OWORD *)v17 + 6);
v18 = v8 + v16;
*(_OWORD *)(v18 - 16) = *((_OWORD *)v17 + 7);
*(_OWORD *)v18 = *(_OWORD *)((char *)v17 + v8);
*(_OWORD *)(v18 + 16) = *(_OWORD *)((char *)v17 + v8 + 16);
v19 = *(INT64 *)((char *)v17 + v8 + 32);
LABEL_18:
*(_QWORD *)(v18 + 32) = v19;
}
LABEL_2:
if( PspSetEffectiveLimit(32, a2) )
{
if( v4 )
v20 = *(_BYTE *)(v4 + 872);
else
v20 = 0;
if( ((unsigned __int8)*(_DWORD *)(a1 + 256) & v9) != 0
&& *((_BYTE *)&PspPriorityClassRank + v20) >= *((_BYTE *)&PspPriorityClassRank + *(unsigned __int8 *)(a1 + 873)) )
{
v20 = *(_BYTE *)(a1 + 873);
}
*(_BYTE *)(a1 + 872) = v20;
}
if( PspSetEffectiveLimit(v8, a2) )
{
if( v4 )
v21 = *(_DWORD *)(v4 + 852);
else
v21 = 10;
if( ((unsigned __int8)*(_DWORD *)(a1 + 256) & (unsigned __int8)v8) != 0 && (v27 = *(_DWORD *)(a1 + 484), v27 < v21) )
*(_DWORD *)(a1 + 852) = v27;
else
*(_DWORD *)(a1 + 852) = v21;
}
if( PspSetEffectiveLimit(v7, v10) )
{
if( v4 )
{
v22 = *(_QWORD *)(v4 + 792);
v23 = *(_QWORD *)(v4 + 800);
}
else
{
v22 = 0i64;
v23 = 0i64;
}
if( ((unsigned __int8)*(_DWORD *)(a1 + 256) & (unsigned __int8)v7) == 0
|| (v28 = *(_QWORD *)(a1 + 248), v28 >= v23) && v23 )
{
*(_QWORD *)(a1 + 800) = v23;
*(_QWORD *)(a1 + 792) = v22;
}
else
{
*(_QWORD *)(a1 + 800) = v28;
*(_QWORD *)(a1 + 792) = *(_QWORD *)(a1 + 240);
}
}
if( PspSetEffectiveLimit(256, a2) )
{
if( v4 )
{
v14 = *(_QWORD *)(v4 + 808);
v15 = *(_QWORD *)(v4 + 816);
}
else
{
v14 = 0i64;
v15 = 0i64;
}
if( (v11 & *(_DWORD *)(a1 + 256)) == 0 || (v25 = *(_QWORD *)(a1 + 576), v25 >= v14) && v14 )
{
*(_QWORD *)(a1 + 808) = v14;
*(_QWORD *)(a1 + 816) = v15;
}
else
{
*(_QWORD *)(a1 + 808) = v25;
*(_QWORD *)(a1 + 816) = a1;
}
}
LOBYTE(v12) = PspSetEffectiveLimit(2, a2);
if( (_BYTE)v12 )
{
if( v4 )
{
v12 = *(_QWORD *)(v4 + 784);
v24 = *(_QWORD *)(v4 + 824);
}
else
{
v12 = 0i64;
v24 = 0i64;
}
if( (*(_DWORD *)(a1 + 256) & 2) == 0 || (v29 = *(_QWORD *)(a1 + 224), v29 >= v12) && v12 )
{
*(_QWORD *)(a1 + 784) = v12;
*(_QWORD *)(a1 + 824) = v24;
}
else
{
*(_QWORD *)(a1 + 784) = v29;
*(_QWORD *)(a1 + 824) = a1;
}
}
v13 = *(_DWORD *)(a1 + 256);
*(_DWORD *)(a1 + 848) = v13;
if( v4 )
{
LODWORD(v12) = v13 | *(_DWORD *)(v4 + 848);
*(_DWORD *)(a1 + 848) = v12;
}
return v12;
}Referenced by:
PspEstablishJobHierarchy
PspSetJobLimitsJobPreCallback