KiIntSteerUpdateDeviceInterruptMask

NTSTATUS __fastcall KiIntSteerUpdateDeviceInterruptMask(INT64 a1, INT64 a2, INT64 a3){
  int v3; 
  NTSTATUS result; 
  _KPRCB *Prcb; 
  _KAFFINITY_ENUMERATION_CONTEXT Context; 
  UINT64 ProcIndex; 

  HIDWORD(ProcIndex) = HIDWORD(a3);
  v3 = a2;
  *(_DWORD *)(&Context.CurrentIndex + 1) = 0;
  *(&Context.CurrentIndex + 3) = 0;
  LODWORD(ProcIndex) = 0;
  Context.CurrentIndex = *(_WORD *)(a1 + 8);
  Context.CurrentMask = *(_QWORD *)a1;
  Context.Affinity = 0i64;
  while( 1 )
  {
    KeEnumerateNextProcessor(&ProcIndex, &Context);
    if( result )
      break;
    Prcb = KeGetPrcb((unsigned int)ProcIndex);
    if( v3 )
    {
      if( v3 == 1 && Prcb->DeviceInterrupts-- == 1 )
        _interlockedbittestandset64((volatile signed __int32 *)&Prcb->ParentNode->NonIsrTargetedSet, Prcb->GroupIndex);
    }
    else if( ++Prcb->DeviceInterrupts == 1 )
    {
      _interlockedbittestandreset64((volatile signed __int32 *)&Prcb->ParentNode->NonIsrTargetedSet, Prcb->GroupIndex);
    }
  }
  return result;
}

Referenced by:

KiIntSteerConnect
KiIntSteerDisable
KiIntSteerDistributeInterrupts