HalpInterruptResetThisProcessor
VOID __fastcall __noreturn HalpInterruptResetThisProcessor(INT64 a1, DOUBLE a2){
unsigned int v2;
ULONG_PTR *v3;
ULONG_PTR *v4;
int v5;
__int64(__fastcall *v6)(ULONG_PTR);
int v7;
ULONG_PTR v8;
__int64(__fastcall *v9)(_QWORD);
int v10;
v2 = *((_DWORD *)KeGetPcr() + 105);
_disable();
HalpInterruptInitializeLocalUnit((PVOID)HalpInterruptController, a2);
HalpInterruptLastProblem = 12;
if( !v2 )
{
_InterlockedDecrement((volatile signed __int32 *)HalpInterruptProcessorsStarted);
while( _InterlockedExchangeAdd((volatile signed __int32 *)HalpInterruptProcessorsStarted, 0) )
_mm_pause();
KeStallExecutionProcessor(0x64u);
v3 = (ULONG_PTR *)HalpRegisteredInterruptControllers;
while( v3 != &HalpRegisteredInterruptControllers )
{
v4 = v3;
v3 = (ULONG_PTR *)*v3;
v5 = *((_DWORD *)v4 + 56);
if( (v5 & 1) != 0 )
{
*((_DWORD *)v4 + 56) = v5 & 0xFFFFFFFE;
HalpInterruptInitializeController(v4, a2);
v6 = (__int64(__fastcall *)(ULONG_PTR))v4[22];
if( v6 && (v7 = v6(v4[2]), v7 < 0) )
{
HalpInterruptLastProblem = 35;
*((_DWORD *)v4 + 73) = 35;
*((_DWORD *)v4 + 74) = v7;
v4[38] = (ULONG_PTR)"minkernel\\hals\\lib\\interrupts\\common\\intsup.c";
*((_DWORD *)v4 + 78) = 3011;
}
else
{
*((_DWORD *)v4 + 56) &= ~1u;
}
}
}
KeStallExecutionProcessor(0x64u);
}
HalPerformEndOfInterruptAtController[0]();
v8 = HalpInterruptController;
v9 = *(__int64(__fastcall **)(_QWORD))(HalpInterruptController + 168);
if( v9 )
{
v10 = v9(*(_QWORD *)(HalpInterruptController + 16));
if( v10 < 0 )
{
*(_DWORD *)(v8 + 296) = v10;
HalpInterruptLastProblem = 34;
*(_DWORD *)(v8 + 292) = 34;
*(_QWORD *)(v8 + 304) = "minkernel\\hals\\lib\\interrupts\\common\\intsup.c";
*(_DWORD *)(v8 + 312) = 3060;
}
}
HalpPowerWriteResetCommand(v2, (INT64 *)((unsigned __int64)HalpInterruptProcessorsStarted & -(__int64)(v2 != 0)));
JUMPOUT(0x1404B9C51i64);
}Referenced by:
HalpInterruptRebootService