KiIntSteerDisable
__int64 __fastcall KiIntSteerDisable(__int64 *a1, unsigned int a2){
__int64 *v2;
_QWORD *v4;
UINT64 v5;
unsigned __int8 v6;
unsigned __int64 v7;
__int64 v8;
__int64 v9;
__int64 v10;
INT64 *v11;
_QWORD *v12;
INT64 v13;
INT64 *v14;
v2 = a1;
v4 = *(_QWORD **)(*a1 + 168);
if( v4 )
{
KiIntSteerLogState(*(_QWORD *)(*a1 + 168), (EVENT_DESCRIPTOR *)&PPM_ETW_INTERRUPT_STEERING_STATE_DISCONNECT);
KeAcquireSpinLockRaiseToDpc(&KiIntTrackSpinlock, v5);
v7 = v6;
if( a2 )
{
v8 = a2;
do
{
v9 = *v2;
_InterlockedAnd((volatile signed __int32 *)(*v2 + 104), 0xFFFFFFFB);
*(_QWORD *)(v9 + 168) = 0i64;
++v2;
--v8;
}
while( v8 );
}
v10 = *v4;
v11 = (INT64 *)v4[2];
v12 = (_QWORD *)v4[1];
if( *(_QWORD **)(*v4 + 8i64) == v4 && (_QWORD *)*v12 == v4 )
{
*v12 = v10;
*(_QWORD *)(v10 + 8) = v12;
ExFreePoolWithTag(v4, 0x6B725449u);
if( (INT64 *)v11[2] != v11 + 2 )
{
LABEL_11:
KxReleaseSpinLock(&KiIntTrackSpinlock);
__writecr8(v7);
return 0i64;
}
--KiIntTrackRootCount;
v13 = *v11;
v14 = (INT64 *)v11[1];
if( *(INT64 **)(*v11 + 8) == v11 && (INT64 *)*v14 == v11 )
{
*v14 = v13;
*(_QWORD *)(v13 + 8) = v14;
KiIntSteerUpdateDeviceInterruptMask((INT64)(v11 + 20), 1i64, v13);
ExFreePoolWithTag(v11, 0x6B725449u);
goto LABEL_11;
}
}
__fastfail(3u);
}
return 0i64;
}Referenced by:
KeDisconnectInterrupt