KiIntSteerDistributeInterrupts
INT64 __fastcall KiIntSteerDistributeInterrupts(){
INT64 v0;
INT64 v1;
INT64 v2;
__int64 v3;
INT64 i;
INT64 v6;
INT64 v7;
INT64 v8;
INT64 v9[2];
v1 = KiIntTrackRootList;
for( *(_OWORD *)v9 = 0i64; (INT64 *)v1 != &KiIntTrackRootList; v1 = *(_QWORD *)v1 )
{
if( *(_BYTE *)(v1 + 132) )
{
v2 = *(_QWORD *)(v1 + 176);
v3 = *(_QWORD *)(v1 + 160);
if( v2 != v3 )
{
LOWORD(v9[1]) = *(_WORD *)(v1 + 184);
if( LOWORD(v9[1]) == *(_WORD *)(v1 + 168) )
v6 = v2 & ~v3;
else
v6 = v2;
v9[0] = v6;
KiIntSteerUpdateDeviceInterruptMask((INT64)v9, 0i64, v0);
}
}
}
for( i = KiIntTrackRootList; (INT64 *)i != &KiIntTrackRootList; i = *(_QWORD *)i )
{
if( *(_BYTE *)(i + 132) && *(_QWORD *)(i + 176) != *(_QWORD *)(i + 160) )
{
KiIntSteerSetDestination(i, i + 176);
LOWORD(v9[1]) = *(_WORD *)(i + 184);
if( *(_WORD *)(i + 168) == LOWORD(v9[1]) )
v8 = *(_QWORD *)(i + 160) & ~*(_QWORD *)(i + 176);
else
v8 = *(_QWORD *)(i + 160);
v9[0] = v8;
KiIntSteerUpdateDeviceInterruptMask((INT64)v9, 1i64, v7);
*(_WORD *)(i + 168) = *(_WORD *)(i + 184);
*(_QWORD *)(i + 160) = *(_QWORD *)(i + 176);
}
}
return 0i64;
}Referenced by:
KeIntSteerPeriodic