KiIntSteerChooseInitialTargetProcessors

NTSTATUS __stdcall KiIntSteerChooseInitialTargetProcessors(
        _KINTERRUPT **InterruptObjectArray,
        UINT64 InterruptObjectCount,
        _INTERRUPT_VECTOR_DATA *VectorData,
        UINT8 IsPrimaryInterrupt,
        _GROUP_AFFINITY *TargetProcessors,
        _INTERRUPT_STEERING_MODE *OutputSteerMode){
  _GROUP_AFFINITY *p_TargetProcessors; 
  unsigned int v7; 
  int v9; 
  _KINTERRUPT_MODE Mode; 
  NTSTATUS SteeringMode; 
  _INTERRUPT_VECTOR_DATA *v12; 
  __int64 Group; 
  unsigned int v14; 
  unsigned __int64 Mask; 
  _GROUP_AFFINITY *v17; 
  NTSTATUS *v18; 

  p_TargetProcessors = &VectorData->TargetProcessors;
  v17 = &VectorData->TargetProcessors;
  v7 = InterruptObjectCount;
  v9 = 0;
  *(_OWORD *)OutputSteerMode = 0i64;
  Mode = VectorData->Mode;
  LOBYTE(VectorData) = (_BYTE)TargetProcessors;
  SteeringMode = KeIntSteerGetSteeringMode(
                   (UINT8)InterruptObjectArray,
                   InterruptObjectCount,
                   (INT64)VectorData,
                   Mode,
                   v17);
  if( SteeringMode != 2 || (v9 = KiIntRedirectConnnect(InterruptObjectArray, v7, v12), v9 >= 0) )
  {
    Group = p_TargetProcessors->Group;
    *((_WORD *)OutputSteerMode + 4) = Group;
    if( SteeringMode )
    {
      *(_QWORD *)OutputSteerMode = KiIntSteerMask.Bitmap[Group];
      v14 = KiProcessorIndexToNumberMappingTable[KeFindFirstSetRightGroupAffinity((INT64)OutputSteerMode)];
      *(_INTERRUPT_STEERING_MODE *)((char *)OutputSteerMode + 10) = IntSteerModeNone;
      *((_WORD *)OutputSteerMode + 7) = 0;
      *(_QWORD *)OutputSteerMode = 1i64 << (v14 & 0x3F);
      *((_WORD *)OutputSteerMode + 4) = v14 >> 6;
    }
    else
    {
      Mask = p_TargetProcessors->Mask;
      *(_QWORD *)OutputSteerMode = p_TargetProcessors->Mask;
      if( KiIntSteerAffinitizedInterrupts.Count <= (unsigned __int16)Group )
        KiIntSteerAffinitizedInterrupts.Count = Group + 1;
      KiIntSteerAffinitizedInterrupts.Bitmap[Group] |= Mask;
    }
    *v18 = SteeringMode;
  }
  return v9;
}

Referenced by:

KiIntSteerConnect