IopConnectInterruptFullySpecified

NTSTATUS __stdcall IopConnectInterruptFullySpecified(
        PKINTERRUPT *InterruptObject,
        PKSERVICE_ROUTINE ServiceRoutine,
        PVOID ServiceContext,
        PKSPIN_LOCK SpinLock,
        __int64 Vector,
        KIRQL Irql,
        KIRQL SynchronizeIrql,
        KINTERRUPT_MODE InterruptMode,
        BOOL ShareVector,
        PGROUP_AFFINITY TargetProcessors,
        BOOL FloatingSave){
  char v15; 
  __int128 v16; 
  char v17; 
  NTSTATUS VectorInput; 
  __int64 v19; 
  __int64 v20; 
  INT64 result; 
  int v22; 
  int v23; 
  KIRQL v24; 
  int v25; 
  BOOL v26; 
  __int128 v27; 
  int v28; 
  char v29; 
  memset((INT64)&result, 0i64);
  v20 = 0i64;
  if( !ServiceContext || !KeVerifyGroupAffinity(*(GROUP_AFFINITY **)&FloatingSave, 0) )
    return -1073741811;
  v15 = InterruptMode;
  if( (_BYTE)InterruptMode )
  {
    if( (unsigned __int8)InterruptMode >= SynchronizeIrql )
      goto LABEL_5;
    return -1073741811;
  }
  v15 = SynchronizeIrql;
LABEL_5:
  v16 = **(_OWORD **)&FloatingSave;
  v22 = 0;
  v24 = SynchronizeIrql;
  v17 = 1;
  v26 = ShareVector;
  LODWORD(result) = 1;
  v23 = Irql;
  v27 = v16;
  VectorInput = HalGetVectorInput(Irql);
  if( VectorInput >= 0 )
  {
    ((__int64(__fastcall *)(_QWORD, _QWORD))off_140C00780[0])(0i64, 0i64);
    *InterruptObject = 0i64;
    v28 = 0;
    if( (v29 & 1) == 0 )
      v17 = (char)TargetProcessors;
    v25 = 0;
    VectorInput = IopConnectInterrupt(
                    &v20,
                    (ULONG_PTR)ServiceRoutine,
                    (__int64(__fastcall *)(__int64, __int64))ServiceContext,
                    0i64,
                    (__int64)SpinLock,
                    0,
                    Vector,
                    v15,
                    v17,
                    v19,
                    (__int64)&result);
    if( VectorInput >= 0 )
      *InterruptObject = (PKINTERRUPT)(v20 + 112);
  }
  return VectorInput;
}

Referenced by:

IoConnectInterrupt
IoConnectInterruptEx