KeInitializeInterruptEx
INT64 __fastcall KeInitializeInterruptEx(){
VOID(__stdcall *v0)(_KINTERRUPT *, PVOID);
INT64 v1;
__int64 v2;
__int64 v3;
__int64 v4;
VOID(__stdcall *v5)(_KINTERRUPT *, PVOID);
__int64 v6;
INT64 v7;
INT64 v8;
INT64 result;
int v10;
INT64 v11;
__int64 v12;
int v13;
char v14;
char v15;
int v16;
char v17;
int v18;
char v19;
__int64 v20;
v4 = v2;
v5 = v0;
v6 = v3;
v7 = v1;
memset(v1, 0i64);
*(_DWORD *)v7 = 18874390;
*(_QWORD *)(v7 + 48) = v6;
if( !v5 )
{
v5 = KiInterruptMessageDispatch;
*(_DWORD *)(v7 + 40) = v10;
*(_QWORD *)(v7 + 32) = v4;
}
*(_QWORD *)(v7 + 24) = v5;
if( v11 )
{
v8 = v11;
}
else
{
v8 = v7 + 56;
*(_QWORD *)(v7 + 56) = 0i64;
}
*(_QWORD *)(v7 + 72) = v8;
*(_DWORD *)(v7 + 88) = v13;
*(_DWORD *)(v7 + 108) = v16;
*(_BYTE *)(v7 + 100) = v17;
*(_BYTE *)(v7 + 92) = v14;
*(_BYTE *)(v7 + 93) = v15;
if( !v15 )
{
*(_WORD *)v12 = 1;
*(_QWORD *)(v12 + 16) = v12 + 8;
*(_QWORD *)(v12 + 8) = v12 + 8;
*(_BYTE *)(v12 + 2) = 6;
*(_DWORD *)(v12 + 4) = 1;
*(_QWORD *)(v7 + 128) = v12;
}
*(_DWORD *)(v7 + 96) = v18;
*(_BYTE *)(v7 + 101) = v19;
*(_QWORD *)(v7 + 160) = v20;
*(_DWORD *)(v7 + 104) = 0;
switch( v11 )
{
case -1i64:
result = (INT64)KiInterruptDispatchNoLock;
break;
case -3i64:
result = (INT64)KiInterruptDispatchNoLockNoEtw;
break;
case -4i64:
result = (INT64)KiInterruptDispatchNoEOI;
break;
default:
result = (INT64)KiInterruptDispatch;
if( v11 == -2 )
result = (INT64)KiSpuriousDispatchNoEOI;
break;
}
*(_QWORD *)(v7 + 80) = result;
*(_BYTE *)(v7 + 95) = 0;
return result;
}Referenced by:
IopConnectInterrupt