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( !byte_140C50754 )
    return 3221225659i64;
  v7 = 1;
  v8 = HalpAcquireHighLevelLock((UINT64 *)&CmpDummyThreadEvent + 994);
  v9 = (__int64 *)*(&CmpDummyThreadEvent + 992);
  v15 = v8;
  do
  {
    if( v9 == (__int64 *)((char *)&CmpDummyThreadEvent + 7936) )
      break;
    v10 = (int(__fastcall *)(__int64, __int64, __int64, __int64))v9[13];
    v11 = 0;
    for( i = v9[4]; v11 < *((_DWORD *)v9 + 5); ++v11 )
    {
      if( BYTE4(v9[2 * v11 + 21]) )
      {
        v13 = *((_DWORD *)v9 + 4);
        *(_WORD *)(a3 + 4) = 1;
        v14 = v11 + v13;
        *(_DWORD *)(a3 + 16) = v14;
        *(_DWORD *)(a3 + 8) = HIDWORD(v9[2 * v11 + 20]);
        *(_DWORD *)(a3 + 12) = v9[2 * v11 + 20];
        if( v10(i, v14, a3 + 20, a3 + 24) >= 0 )
        {
          v7 = a1(a2, a3);
          if( !v7 )
            break;
        }
      }
    }
    v9 = (__int64 *)*v9;
  }
  while( v7 );
  KxReleaseSpinLock((UINT64 *)&CmpDummyThreadEvent + 994);
  __writecr8(v15);
  return 0i64;
}

Referenced by:

HalpInterruptEnumerateUnmaskedInterrupts