PpmIdleInitializeConcurrency
__int64 __fastcall PpmIdleInitializeConcurrency(unsigned __int16 *a1, _QWORD *a2, _QWORD *a3){
UINT8 v5;
int v6;
UINT16 v7;
UINT64 *v8;
unsigned int v9;
_DWORD *PoolWithTag;
__int64 v12;
__int64 v13;
__int64 v14;
__int64 v15;
struct _GROUP_AFFINITY Affinity;
struct _GROUP_AFFINITY PreviousAffinity;
Affinity = 0i64;
PreviousAffinity = 0i64;
v5 = (unsigned __int8)a1;
v6 = KeCountSetBitsAffinityEx((_KAFFINITY_EX *)a1);
v9 = (unsigned int)KeFirstGroupAffinityEx(&Affinity, v5, v7, v8);
if( a3 && (PoolWithTag = (_DWORD *)*a3) != 0i64 && v6 == PoolWithTag[2] )
{
*a3 = 0i64;
}
else
{
KeSetSystemGroupAffinityThread(&Affinity, &PreviousAffinity);
PoolWithTag = ExAllocatePoolWithTag(NonPagedPoolNx, (unsigned int)(8 * v6 + 40), 0x704D5050ui64);
KeRevertToUserGroupAffinityThread(&PreviousAffinity);
if( PoolWithTag )
{
memset((INT64)PoolWithTag, 0i64);
*(_QWORD *)PoolWithTag = 0i64;
PoolWithTag[2] = v6;
*((_QWORD *)PoolWithTag + 2) = PpmQueryTime(v13, v12, v14, v15);
}
else
{
v9 = -1073741670;
}
}
*a2 = PoolWithTag;
return v9;
}Referenced by:
PpmParkRegisterParking