HalpInterruptEnumerateUnmaskedInterrupts
VOID __stdcall HalpInterruptEnumerateUnmaskedInterrupts(){
__int64 v0;
__int64(__fastcall *v1)(__int64, __int64);
_WORD *v2;
_WORD *v3;
unsigned int v4;
char v5;
unsigned __int8 v6;
PVOID *v7;
unsigned __int64 v8;
PVOID *v9;
PVOID *v10;
PVOID *v11;
PVOID *v12;
int v13;
_DWORD *v14;
__int64(__fastcall *v15)(__int64, __int64);
__int64 v16;
PVOID *v17;
PVOID *v18;
v16 = v0;
v15 = v1;
v3 = v2;
v4 = (unsigned __int16)v2[1];
if( *v3 && v4 >= 0x20 )
{
memset(v3, 0i64, v4 - 4);
v5 = 1;
v6 = HalpAcquireHighLevelLock(&qword_140C49C40);
v7 = (PVOID *)qword_140C4B850;
v8 = v6;
while( v7 != &qword_140C4B850 )
{
v17 = v7;
v9 = v7;
v7 = (PVOID *)*v7;
v10 = v9 + 30;
v11 = (PVOID *)v9[30];
v18 = v9 + 30;
while( v11 != v10 )
{
v12 = v11;
v11 = (PVOID *)*v11;
if( *((_DWORD *)v12 + 7) != -1 )
{
v13 = *((_DWORD *)v12 + 5);
if( v13 < *((_DWORD *)v12 + 6) )
{
do
{
v14 = (char *)v12[5] + 56 * (unsigned int)(v13 - *((_DWORD *)v12 + 5));
if( (v14[3] & 1) != 0 )
{
*((_DWORD *)v3 + 4) = *((_DWORD *)v12 + 7) + v13 - *((_DWORD *)v12 + 5);
v3[2] = 0;
*((_DWORD *)v3 + 2) = v14[2];
*((_DWORD *)v3 + 3) = *v14;
*((_QWORD *)v3 + 3) = v9[43];
v5 = v15(v16, (__int64)v3);
if( !v5 )
goto LABEL_16;
v9 = v17;
}
++v13;
}
while( v13 < *((_DWORD *)v12 + 6) );
v10 = v18;
}
}
}
}
LABEL_16:
KxReleaseSpinLock(&qword_140C49C40);
__writecr8(v8);
if( v5 )
{
if( byte_140C50754 )
HalpInterruptEnumerateUnmaskedSecondaryInterrupts(v15, v16, (__int64)v3);
}
}
}Referenced by:
No references.