KiUnmaskSecondaryInterruptInternal

NTSTATUS __stdcall KiUnmaskSecondaryInterruptInternal(UINT64 Vector, UINT64 Gsiv){
  unsigned int v2; 
  NTSTATUS v3; 
  __int64 v4; 
  UINT64 *v5; 
  __int64 v6; 
  __int64 v7; 
  __int64 *v8; 
  __int64 *v9; 
  int v10; 
  UINT8 OldIrql; 
  v2 = Gsiv;
  v3 = 0;
  OldIrql = 0;
  v4 = (unsigned int)(Vector - 256);
  v5 = (UINT64 *)(KiGlobalSecondaryIDT + 48 * v4);
  KiAcquireSecondaryInterruptConnectLock(v5, &OldIrql);
  v6 = KiGlobalSecondaryIDT + 48 * v4;
  if( !*(_BYTE *)(v6 + 32) )
  {
    KxReleaseSpinLock(v5);
    v3 = 296;
LABEL_5:
    __writecr8(OldIrql);
    return v3;
  }
  v7 = *(_QWORD *)(v6 + 40);
  if( !v7 )
  {
    KxReleaseSpinLock(v5);
    goto LABEL_5;
  }
  v8 = (__int64 *)(v7 + 8);
  v9 = (__int64 *)(v7 + 8);
  while( 1 )
  {
    v10 = -(v9[12] & 1);
    if( (v9[12] & 1) == 0 )
      break;
    v9 = (__int64 *)*v9;
    if( v9 == v8 )
      goto LABEL_11;
  }
  *(_BYTE *)(v6 + 32) = 0;
LABEL_11:
  KxReleaseSpinLock(v5);
  __writecr8(OldIrql);
  if( !v10 )
    return((__int64(__fastcall *)(_QWORD, _QWORD))off_140C00778[0])(v2, 0i64);
  return v3;
}

Referenced by:

KeConnectInterrupt
KeUnmaskInterrupt