KiIntSteerDisable

NTSTATUS __stdcall KiIntSteerDisable(_KINTERRUPT **InterruptObjectArray, UINT64 InterruptObjectCount){
  _KINTERRUPT **v2; 
  unsigned int v3; 
  _QWORD *IntTrackEntry; 
  unsigned __int64 v5; 
  __int64 v6; 
  _KINTERRUPT *v7; 
  __int64 v8; 
  INT64 *v9; 
  _QWORD *v10; 
  INT64 v11; 
  INT64 *v12; 

  v2 = InterruptObjectArray;
  v3 = InterruptObjectCount;
  IntTrackEntry = (*InterruptObjectArray)->IntTrackEntry;
  if( IntTrackEntry )
  {
    KiIntSteerLogState(
      (__int64)(*InterruptObjectArray)->IntTrackEntry,
      (__int64)PPM_ETW_INTERRUPT_STEERING_STATE_DISCONNECT);
    v5 = (unsigned __int8)KeAcquireSpinLockRaiseToDpc(&KiIntTrackSpinlock);
    if( v3 )
    {
      v6 = v3;
      do
      {
        v7 = *v2;
        _InterlockedAnd(&(*v2)->InternalState, 0xFFFFFFFB);
        v7->IntTrackEntry = 0i64;
        ++v2;
        --v6;
      }
      while( v6 );
    }
    v8 = *IntTrackEntry;
    v9 = (INT64 *)IntTrackEntry[2];
    v10 = (_QWORD *)IntTrackEntry[1];
    if( *(_QWORD **)(*IntTrackEntry + 8i64) == IntTrackEntry && (_QWORD *)*v10 == IntTrackEntry )
    {
      *v10 = v8;
      *(_QWORD *)(v8 + 8) = v10;
      ExFreePoolWithTag(IntTrackEntry, 0x6B725449u);
      if( (INT64 *)v9[2] != v9 + 2 )
      {
LABEL_11:
        KxReleaseSpinLock(&KiIntTrackSpinlock);
        __writecr8(v5);
        return 0;
      }
      --KiIntTrackRootCount;
      v11 = *v9;
      v12 = (INT64 *)v9[1];
      if( *(INT64 **)(*v9 + 8) == v9 && (INT64 *)*v12 == v9 )
      {
        *v12 = v11;
        *(_QWORD *)(v11 + 8) = v12;
        KiIntSteerUpdateDeviceInterruptMask((INT64)(v9 + 20), 1i64, v11);
        ExFreePoolWithTag(v9, 0x6B725449u);
        goto LABEL_11;
      }
    }
    __fastfail(3u);
  }
  return 0;
}

Referenced by:

KeDisconnectInterrupt