KiProcessPendingDisconnect
__int64 **__fastcall KiProcessPendingDisconnect(int a1, __int64 a2, __int64 a3){
__int64 **result;
__int64 v6;
bool v7;
_INTERRUPT_CONNECTION_DATA *v9;
NTSTATUS v10;
__int64 *v11;
result = (__int64 **)*(unsigned int *)(a2 + 104);
if( ((unsigned __int8)result & 2) != 0 )
{
result = 0i64;
if( !*(_WORD *)(a2 + 102) )
{
v6 = *(_QWORD *)(a2 + 144);
v7 = a1 == 0;
v9 = *(_INTERRUPT_CONNECTION_DATA **)(v6 + 8);
if( v7 )
v10 = KiDisconnectInterruptInternal((_KINTERRUPT *)a2, v9);
else
v10 = KiDisconnectSecondaryInterruptInternal((_KINTERRUPT *)a2, v9);
*(_DWORD *)(v6 + 16) = v10;
v11 = (__int64 *)(a2 + 8);
result = *(__int64 ***)(a3 + 8);
if( *result != (__int64 *)a3 )
__fastfail(3u);
*v11 = a3;
v11[1] = (__int64)result;
*result = v11;
*(_QWORD *)(a3 + 8) = v11;
}
}
return result;
}Referenced by:
KiInterruptDispatchCommon