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