KiIntSteerUpdateDeviceInterruptMask
INT64 __fastcall KiIntSteerUpdateDeviceInterruptMask(INT64 a1, INT64 a2, INT64 a3){
int v3;
INT64 result;
__int64 v5;
unsigned __int16 *v7[2];
__int16 v8;
int v9;
__int16 v10;
unsigned int ProcessorNumber;
int ProcessorNumber_4;
ProcessorNumber_4 = HIDWORD(a3);
v3 = a2;
v9 = 0;
v10 = 0;
ProcessorNumber = 0;
v8 = *(_WORD *)(a1 + 8);
v7[1] = *(unsigned __int16 **)a1;
v7[0] = 0i64;
while( 1 )
{
result = KeEnumerateNextProcessor(&ProcessorNumber, v7);
if( (_DWORD)result )
break;
KeGetPrcb(ProcessorNumber);
if( v3 )
{
if( v3 == 1 && (*(_DWORD *)(v5 + 11672))-- == 1 )
_interlockedbittestandset64(
(volatile signed __int32 *)(*(_QWORD *)(v5 + 192) + 96i64),
*(unsigned __int8 *)(v5 + 209));
}
else if( ++*(_DWORD *)(v5 + 11672) == 1 )
{
_interlockedbittestandreset64(
(volatile signed __int32 *)(*(_QWORD *)(v5 + 192) + 96i64),
*(unsigned __int8 *)(v5 + 209));
}
}
return result;
}Referenced by:
KiIntSteerConnect
KiIntSteerDisable
KiIntSteerDistributeInterrupts