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