KiIntSteerChooseInitialTargetProcessors

INT64 __fastcall KiIntSteerChooseInitialTargetProcessors(
        INT64 *a1,
        UINT64 a2,
        INT64 a3,
        INT64 a4,
        INT64 IsPrimaryInterrupt,
        GROUP_AFFINITY *GroupAffinity,
        INT64 a7){
  INT64 v7; 
  unsigned int v8; 
  int v10; 
  KINTERRUPT_MODE v11; 
  int SteeringMode; 
  __int64 v13; 
  __int64 v14; 
  unsigned int v15; 
  unsigned __int64 v17; 
  GROUP_AFFINITY *v18; 
  v7 = a3 + 24;
  v18 = (GROUP_AFFINITY *)(a3 + 24);
  v8 = a2;
  v10 = 0;
  *GroupAffinity = 0i64;
  v11 = *(_DWORD *)(a3 + 16);
  LOBYTE(a3) = IsPrimaryInterrupt;
  SteeringMode = KeIntSteerGetSteeringMode((UINT8)a1, a2, a3, v11, v18);
  if( SteeringMode != 2 || (v10 = KiIntRedirectConnnect(a1, v8, v13), v10 >= 0) )
  {
    v14 = *(unsigned __int16 *)(v7 + 8);
    GroupAffinity->Group = v14;
    if( SteeringMode )
    {
      GroupAffinity->Mask = KiIntSteerMask.Bitmap[v14];
      v15 = KiProcessorIndexToNumberMappingTable[(unsigned int)KeFindFirstSetRightGroupAffinity(GroupAffinity)];
      *(_DWORD *)GroupAffinity->Reserved = 0;
      GroupAffinity->Reserved[2] = 0;
      GroupAffinity->Mask = 1i64 << (v15 & 0x3F);
      GroupAffinity->Group = v15 >> 6;
    }
    else
    {
      v17 = *(_QWORD *)v7;
      GroupAffinity->Mask = *(_QWORD *)v7;
      if( LOWORD(KiIntSteerAffinitizedInterrupts[0]) <= (unsigned __int16)v14 )
        LOWORD(KiIntSteerAffinitizedInterrupts[0]) = v14 + 1;
      qword_140C2AFC8[v14] |= v17;
    }
    *(_DWORD *)a7 = SteeringMode;
  }
  return(unsigned int)v10;
}

Referenced by:

KiIntSteerConnect