HalpInterruptEnumerateUnmaskedSecondaryInterrupts

__int64 __fastcall HalpInterruptEnumerateUnmaskedSecondaryInterrupts(
        __int64 (__fastcall *a1)(__int64, __int64),
        __int64 a2,
        __int64 a3){
  char v7; 
  unsigned __int8 v8; 
  __int64 v9; 
  int(__fastcall *v10)(__int64, __int64, __int64, __int64); 
  unsigned int v11; 
  __int64 i; 
  int v13; 
  __int64 v14; 
  unsigned __int8 v15; 
  if( !SecondaryIcServicesEnabled )
    return 3221225659i64;
  v7 = 1;
  v8 = HalpAcquireHighLevelLock(&SecondaryIcListSpinLock);
  v9 = SecondaryIcList;
  v15 = v8;
  do
  {
    if( (__int64 *)v9 == &SecondaryIcList )
      break;
    v10 = *(int(__fastcall **)(__int64, __int64, __int64, __int64))(v9 + 104);
    v11 = 0;
    for( i = *(_QWORD *)(v9 + 32); v11 < *(_DWORD *)(v9 + 20); ++v11 )
    {
      if( *(_BYTE *)(v9 + 16 * (v11 + 10i64) + 12) )
      {
        v13 = *(_DWORD *)(v9 + 16);
        *(_WORD *)(a3 + 4) = 1;
        v14 = v11 + v13;
        *(_DWORD *)(a3 + 16) = v14;
        *(_DWORD *)(a3 + 8) = *(_DWORD *)(v9 + 16 * (v11 + 10i64) + 4);
        *(_DWORD *)(a3 + 12) = *(_DWORD *)(v9 + 16 * (v11 + 10i64));
        if( v10(i, v14, a3 + 20, a3 + 24) >= 0 )
        {
          v7 = a1(a2, a3);
          if( !v7 )
            break;
        }
      }
    }
    v9 = *(_QWORD *)v9;
  }
  while( v7 );
  KxReleaseSpinLock(&SecondaryIcListSpinLock);
  __writecr8(v15);
  return 0i64;
}

Referenced by:

HalpInterruptEnumerateUnmaskedInterrupts