HalpEnableSecondaryInterrupt
__int64 __fastcall HalpEnableSecondaryInterrupt(_DWORD *a1){
int v2;
unsigned int v3;
LIST_ENTRY *SecondaryIcEntry;
volatile INT32 *v5;
_LIST_ENTRY *Blink;
__int64 v7;
__int64 v8;
if( SecondaryIcServicesEnabled )
{
if( HalpCheckInterruptType(a1) )
{
v3 = a1[16];
SecondaryIcEntry = HalpFindSecondaryIcEntry(v3);
v5 = (volatile INT32 *)SecondaryIcEntry;
if( SecondaryIcEntry )
{
Blink = SecondaryIcEntry[3].Blink;
v7 = v3 - LODWORD(SecondaryIcEntry[1].Flink) + 10i64;
v8 = v3 - LODWORD(SecondaryIcEntry[1].Flink);
HIDWORD(SecondaryIcEntry[v8 + 10].Flink) = a1[6];
LODWORD(SecondaryIcEntry[v7].Flink) = a1[5];
LODWORD(SecondaryIcEntry[v8 + 10].Blink) = a1[3];
BYTE4(SecondaryIcEntry[v8 + 10].Blink) = 1;
v2 = ((__int64(__fastcall *)(_LIST_ENTRY *, _QWORD, _QWORD, _QWORD, LIST_ENTRY *))Blink)(
SecondaryIcEntry[2].Flink,
v3,
(unsigned int)a1[6],
(unsigned int)a1[5],
SecondaryIcEntry);
if( v2 < 0 )
{
v5[1 * v8 + 42] |= 0x80000000;
LOBYTE(v5[1 * v8 + 43]) = 0;
}
HalpReleaseSecondaryIcEntryShared(v5, 1);
}
else
{
return(unsigned int)-1073700575;
}
}
else
{
return(unsigned int)-1073741811;
}
}
else
{
return(unsigned int)-1073741637;
}
return(unsigned int)v2;
}Referenced by:
HalEnableInterrupt