PspSetProcessAffinitySafe
__int64 __fastcall PspSetProcessAffinitySafe(__int64 a1, char a2, unsigned __int16 *a3, __int64 *a4, int *a5){
__int64 v9;
int v10;
int v11;
__int64 v12;
char v13;
__int64 v14;
int v15;
int result;
_BYTE result_4[172];
memset((INT64)&result, 0i64);
v10 = 0;
v11 = 1;
if( a4 )
{
result = 1310721;
memset((INT64)result_4, 0i64);
v12 = *((unsigned __int16 *)a4 + 4);
v9 = *a4;
if( (unsigned __int16)result <= (unsigned __int16)v12 )
LOWORD(result) = v12 + 1;
*(_QWORD *)&result_4[8 * v12 + 4] |= v9;
a3 = (unsigned __int16 *)&result;
v13 = 1;
}
else
{
v13 = 0;
if( (a2 & 2) != 0 )
v13 = 2;
}
if( (a2 & 1) != 0 || (*(_DWORD *)(a1 + 2172) & 0x1000) != 0 )
{
v14 = 0i64;
}
else
{
v14 = *(_QWORD *)(a1 + 1296);
if( v14 )
{
LOBYTE(v9) = 1;
ExAcquireResourceSharedLite((PERESOURCE)(v14 + 56), v9);
v15 = *(_DWORD *)(v14 + 848);
if( (v15 & 0x10) != 0
&& ((v15 & 0x4000) == 0 || !(unsigned int)KeIsSubsetAffinityEx(
(_KAFFINITY_EX *)a3,
(_KAFFINITY_EX *)(v14 + 616))) )
{
v11 = 0;
goto LABEL_16;
}
}
}
v10 = KeSetAffinityProcess(a1, v13, a3);
LABEL_16:
if( v14 )
ExReleaseResourceLite((PERESOURCE)(v14 + 56));
if( v10 >= 0 )
*a5 = v11;
return(unsigned int)v10;
}Referenced by:
NtSetInformationProcess
PspAllocateProcess
PspApplyJobLimitsToProcess
PspUpdateSingleProcessAffinity