KiComputeCpuSetAffinity

__int64 __fastcall KiComputeCpuSetAffinity(__int64 a1){
  __int64 v1; 
  __int64 v3; 
  _QWORD *v4; 
  _QWORD *v5; 
  int v6; 
  __int64 v7; 
  __int64 v8; 
  _QWORD *v9; 
  __int64 v10; 
  __int64 result; 
  __int64 v12; 
  __int64 v13; 
  int v14; 
  unsigned __int64 v15; 
  v1 = *(_QWORD *)(a1 + 544);
  v3 = *(unsigned __int16 *)(a1 + 584);
  v4 = (_QWORD *)(v1 + 2376);
  v5 = (_QWORD *)(v1 + 2384);
  if( (*(_DWORD *)(v1 + 2172) & 0x80u) != 0 )
  {
    v4 = (_QWORD *)*v4;
    v5 = (_QWORD *)*v5;
  }
  v6 = 1;
  v7 = KiSystemAllowedCpuSets[2 * v3] | KiSystemAllowedCpuSets[2 * v3
                                                             + (((unsigned __int64)*(unsigned int *)(a1 + 1300) >> 11) & 1)];
  if( (*(_DWORD *)(v1 + 1120) & 0x8000000) != 0 && (v8 = v4[v3]) != 0 )
  {
    v7 = v4[v3];
    v6 = 0;
  }
  else
  {
    v8 = v7 | v4[v3];
  }
  if( !v8 )
    return 0i64;
  v9 = (_QWORD *)(a1 + 1536);
  if( (*(_DWORD *)(a1 + 1296) & 0x20000) != 0 )
    v9 = (_QWORD *)*v9;
  v10 = v9[v3];
  if( !v10 )
  {
    v10 = v5[v3];
    if( !v10 )
    {
      if( !KiRestrictedSystemCpuSetsActive && v6 )
        return 0i64;
      v10 = v7;
    }
  }
  v12 = v8 & v10;
  if( v12 )
    v8 = v12;
  v13 = v8 & KiNonParkedCpuSets[v3];
  if( !v13 )
    v13 = v8;
  result = 0i64;
  v14 = (_DWORD)v3 << 6;
  do
  {
    _BitScanForward64(&v15, v13);
    result |= *(_QWORD *)&KiCpuSetAffinities[8 * (unsigned int)(v14 + v15)];
    v13 &= ~(1i64 << v15);
  }
  while( v13 );
  return result;
}

Referenced by:

KiComputeThreadAffinity