KeUnmaskInterrupt

__int64 __fastcall KeUnmaskInterrupt(__int64 a1, unsigned __int8 a2, _DWORD *a3){
  UINT8 IsInterruptTypeSecondary; 
  unsigned int v7; 
  __int64 v8; 
  _BOOL8 v9; 
  __int64 v10; 
  __int64 v11; 
  unsigned int v12; 
  IsInterruptTypeSecondary = KiIsInterruptTypeSecondary((_INTERRUPT_CONNECTION_DATA *)a3);
  v7 = 0;
  LOBYTE(v8) = 0;
  v9 = IsInterruptTypeSecondary != 0;
  if( a2 )
  {
    while( 1 )
    {
      v10 = *(_QWORD *)(a1 + 8i64 * (unsigned __int8)v8);
      _m_prefetchw((const void *)(v10 + 104));
      if( (_InterlockedAnd((volatile signed __int32 *)(v10 + 104), 0xFFFFFFFE) & 1) == 0 )
        break;
      LOBYTE(v8) = v8 + 1;
      if( (unsigned __int8)v8 >= a2 )
        goto LABEL_4;
    }
    v12 = 295;
  }
  else
  {
LABEL_4:
    if( a3[2] )
      return 0i64;
    v11 = (unsigned int)a3[16];
    if( v9 )
      v12 = KiUnmaskSecondaryInterruptInternal(*(unsigned int *)(*(_QWORD *)a1 + 88i64), (unsigned int)v11);
    else
      v12 = ((__int64(__fastcall *)(__int64, _QWORD, _BOOL8, __int64))off_140C00778[0])(v11, 0i64, v9, v8);
  }
  if( v12 != 296 )
    return v12;
  return v7;
}

Referenced by:

IopUnmaskInterrupt