IopConnectInterruptFullySpecified
NTSTATUS __stdcall IopConnectInterruptFullySpecified(
PKINTERRUPT *InterruptObject,
PKSERVICE_ROUTINE ServiceRoutine,
PVOID ServiceContext,
PKSPIN_LOCK SpinLock,
__int64 Vector,
KIRQL Irql,
KIRQL SynchronizeIrql,
KINTERRUPT_MODE InterruptMode,
BOOL ShareVector,
PGROUP_AFFINITY TargetProcessors,
BOOL FloatingSave){
char v15;
__int128 v16;
char v17;
NTSTATUS VectorInput;
__int64 v19;
__int64 v20;
INT64 result;
int v22;
int v23;
KIRQL v24;
int v25;
BOOL v26;
__int128 v27;
int v28;
char v29;
memset((INT64)&result, 0i64);
v20 = 0i64;
if( !ServiceContext || !KeVerifyGroupAffinity(*(GROUP_AFFINITY **)&FloatingSave, 0) )
return -1073741811;
v15 = InterruptMode;
if( (_BYTE)InterruptMode )
{
if( (unsigned __int8)InterruptMode >= SynchronizeIrql )
goto LABEL_5;
return -1073741811;
}
v15 = SynchronizeIrql;
LABEL_5:
v16 = **(_OWORD **)&FloatingSave;
v22 = 0;
v24 = SynchronizeIrql;
v17 = 1;
v26 = ShareVector;
LODWORD(result) = 1;
v23 = Irql;
v27 = v16;
VectorInput = HalGetVectorInput(Irql);
if( VectorInput >= 0 )
{
((__int64(__fastcall *)(_QWORD, _QWORD))off_140C00780[0])(0i64, 0i64);
*InterruptObject = 0i64;
v28 = 0;
if( (v29 & 1) == 0 )
v17 = (char)TargetProcessors;
v25 = 0;
VectorInput = IopConnectInterrupt(
&v20,
(ULONG_PTR)ServiceRoutine,
(__int64(__fastcall *)(__int64, __int64))ServiceContext,
0i64,
(__int64)SpinLock,
0,
Vector,
v15,
v17,
v19,
(__int64)&result);
if( VectorInput >= 0 )
*InterruptObject = (PKINTERRUPT)(v20 + 112);
}
return VectorInput;
}Referenced by:
IoConnectInterrupt
IoConnectInterruptEx