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