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