KiProcessPendingDisconnect

__int64 **__fastcall KiProcessPendingDisconnect(int a1, __int64 a2, __int64 a3){
  __int64 **result; 
  __int64 v6; 
  bool v7; 
  _INTERRUPT_CONNECTION_DATA *v9; 
  NTSTATUS v10; 
  __int64 *v11; 
  result = (__int64 **)*(unsigned int *)(a2 + 104);
  if( ((unsigned __int8)result & 2) != 0 )
  {
    result = 0i64;
    if( !*(_WORD *)(a2 + 102) )
    {
      v6 = *(_QWORD *)(a2 + 144);
      v7 = a1 == 0;
      v9 = *(_INTERRUPT_CONNECTION_DATA **)(v6 + 8);
      if( v7 )
        v10 = KiDisconnectInterruptInternal((_KINTERRUPT *)a2, v9);
      else
        v10 = KiDisconnectSecondaryInterruptInternal((_KINTERRUPT *)a2, v9);
      *(_DWORD *)(v6 + 16) = v10;
      v11 = (__int64 *)(a2 + 8);
      result = *(__int64 ***)(a3 + 8);
      if( *result != (__int64 *)a3 )
        __fastfail(3u);
      *v11 = a3;
      v11[1] = (__int64)result;
      *result = v11;
      *(_QWORD *)(a3 + 8) = v11;
    }
  }
  return result;
}

Referenced by:

KiInterruptDispatchCommon